UI自动化框架介绍
测试技术:
python3+selenium+PO+unittest+HTMLTestRunner
PO模型介绍:
PO为什么会出现?
页面对象模型,当页面特别多的时候,我们的代码更容易维护
PO是什么?
1、Page Object,是一种设计模式,用来管理和维护一组web元素的对象库;
2、在PO模式下,应用程序的每一个页面都有一个对应的page class;
3、每一个page class维护着页面的元素集合和操作这些元素方法;
PO的优势:
1、PO提供了一种业务流程与页面元素分离的模式,这使得测试代码变得更加清晰;
2、页面对象与用例分离,能够更好的复用对象;
3、可复用的页面代码会使代码风格更加优化;
代码结构:
find element封装:
将element信息转变为元组
def
selector_to_locator(
self
, key):
selector_by
=
self
.get_by_key(key)
selector_value
=
self
.get_value(key)
if
selector_by
=
=
'id'
:
locator
=
(By.
ID
, selector_value)
elif
selector_by
=
=
'name'
:
locator
=
(By.NAME,selector_value)
elif
selector_by
=
=
'class_name'
:
locator
=
(By.CLASS_NAME,selector_value)
elif
selector_by
=
=
'link_text'
:
locator
=
(By.PARTIAL_LINK_TEXT,selector_value)
elif
selector_by
=
=
'tag_name'
:
locator
=
(By.TAG_NAME, selector_value)
elif
selector_by
=
=
'xpath'
:
locator
=
(By.XPATH,selector_value)
elif
selector_by
=
=
'css_selector'
:
locator
=
(By.CSS_SELECTOR,selector_value)
else
:
raise
NameError(
"Please enter a valid selector of targeting elements."
)
return
locator
find element方法
def
find(
self
,key,value
=
''):
''' 定位到元素,返回元素对象,没定位到,Timeout异常 loctor 传元祖,如("id", "kw") '''
if
not
isinstance
(key,
tuple
):
locator
=
self
.selector_to_locator(key)
else
:
locator
=
key
if
isinstance
(locator,
tuple
):
if
value !
=
'':
ele
=
WebDriverWait(
self
.driver, setting.UI_WAIT_TIME).until(
ES.text_to_be_present_in_element_value(locator, value))
return
ele
else
:
ele
=
WebDriverWait(
self
.driver, setting.UI_WAIT_TIME).until(ES.presence_of_element_located(locator))
if
ele:
return
ele
else
:
print
(f
"定位失败:定位方式->{locator[0]}, value值->{locator[1]}"
)
return
False
定位元素数据分离:


unittest介绍:
nittest中最核心的四个概念是:test fixture,test case, test suite, test runner 。
- unittest是Python自带的单元测试框架,可以用其来作为自动化测试框架的用例组织执行框架。
- unittest的流程:写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中
- 一个class继承unittest.TestCase即是一个TestCase,其中以
test
开头的方法在load时被加载为一个真正的TestCase。 - 用
setUp()
、tearDown()
、setUpClass()
以及tearDownClass()
可以在用例执行前布置环境,以及在用例执行后清理环境 - 参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,以及可以用HTMLTestRunner输出html报告
最终执行效果:
不积跬步,无以至千里;不积小流,无以成江海。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现