-
1
、项目总体框架
auto_project
:存放项目的脚本。包括三个部分:
data
:存放项目的测试数据
report
:存放项目的测试报告,包括
HTML
报告以及
images
图片
testcase :
存放测试用例、
测试页面。
其下的
models
存
放一些公共的模块以及配置函数
等。
Page_obj
存放测试用例页面对象。
driver
:
< br>用于存放浏览器驱动等。方便后面的项目迁移,部署,直接将驱动复制到环境变
量
的路径下。
package:
存放工具包,方面后面项目的迁移和部署。
2
、代码
(
1
)
models/basetest
定义一个
unittest
的基类,继
承
se
类。实现
setUp()
p>
和
tearDown
方法。
from
auto_
import
driver
import
unittest
class
BaseTestCase(se):
#
定义
BaseTestCase
类,继承
TestCase,
后续不需
要再考虑
setUp he
tearDown
这样的方
法了
def
setUp
(
self
) ->
None
:
self
.driver = _browser()
self
.ze_window()
self
.itly_wait(
30
)
def
tearDown
(
self
) ->
None
:
print
(
测试结
束
)
self
.()
< br>(
2
)
models/
定义浏览器驱动函数。
该函数可以进行配置,根据需求,
配置用例再
不同主机以及浏览器下运行。
from
ver
import
Remote
from
selenium
import
webdriver
def
remote_browser
():
#
使用远程机器执行测试用
例,使用
Remote
类启动浏览器驱动;使用时候需要启动<
/p>
selenium-server-
standalone
服务
#
使用远程
机器执行用例,可以使得用例运行过程中不影响做其他事情
#
也可做成配置化,使用多个浏览器,多个平台
host =
'localhost:4444/wd/hub'
dc = {
'platform'
:
'WINDOWS'
,
'browserName'
:
'chrome'
}
driver = Remote(host
,
dc)
return
driver
def
local_browser
():
#
本地机器执行测试用例
#
可做成配置化,使用与多个浏览器
driver = ()
return
driver
#
用法:
if
__name__ ==
'__main__'
:
driver = remote_browser()
(
)
()
(
3
)
page_obj/
定义一个页面对象的基类,实现一些页面操作的公共方法,后
续
每个页面对象继承该类。
from
abc
import
abstractmethod
from
import
By
class
BasePage(
object
):
页面基础类,用于所有页面的继承
bbs_url =
'/'
def
< br>__init__
(
self
,
driver
,
base_url=bbs_url
,
parent=
None
):
self
.driver = driver
self
.base_url = base_url
self
._validate_page(driver)
self
.parent = parent
@abstractmethod
def
_validate_page
(
self
,
driver):
#
定义一个抽象方
法,后续集成该类的时需要实现该方法,用于校验也没是否已经加载完
成
return
def
_open
(
self
,
url):
#
单个下划线开头
的变量或方法仅供内部使用
,
只是做一个区分而已
#
打开指定连接
,
校验也没是否正常加载
url
=
self
.base_url+url
self
.(url)
assert
self
._vali
date_page(
self
.driver)
def
< br>open
(
self
):
#
打开
bbs
地址
sel
f
._open(
self
.base
_url)
def
p>
find_element
(
self
p>
,
type
,
value):
重定义单个元素查找定位
:type
value: object
:param
type:
:param
loc: *loc:by,value
:return
:
web element
if
type ==
:
return
self
._element(
,
value)
if
type ==
:
return
self
._element(
,
value)
if
type ==
:
return
self
._element(
,
value)
if
type ==
:
return
self
._element(_NAME
,
value)
if
type ==
:
return
self
._element(_SELECTOR
,
value)
if
type ==
:
return
self
._element(_TEXT
,
value)
if
type ==
:
return
self
._element(L_LINK_TEXT
,
value)
if
type ==
:
return
self
._element(_NAME
,
value)
return
def
find_elem
ents
(
self
,
*loc):
重定义多个元素查找定位
:param
loc: *loc:by,value
:return
:
web elements[]
return
self
._elements(*loc)
def
< br>script
(
self
,
p>
src):
重定义
JavaScript
代码调用方法
:param
src: JavaScript
代码
:return
:
return
self
.e(src)
(
4
)
page_ob
j/
创建登陆页面对象。对登录页面的用户名、密码输入框、登录
按钮和提示信息等元素的定位进行封装。
from
.basepage
import
BasePage
from
time
import
sleep
class
LoginPage(BasePage):
def
_validate
_page
(
self
,
driver):
pass
url =
'/'
bbs_login_loc =
-
-
-
-
-
-
-
-
-
上一篇:《自主学习任务清单》
下一篇:Vue 源码解析(中)