2022UI自动化测试框架搭建 —— yaml文件管理定位元素
介绍本框架基于Python语言进行开发,使用pytest管理用例运行,使用Jenkins+Allue进行脚本执行与报告展示。适用于Web、H5、IOS、安卓的UI自动化测试元素封装对于一个需要定位的元素,我们一般就需要用到它的描述、定位方式、定位语句、使用时的变量名由于部分元素出现时间较长,增加一个等待时间我们编写一个Locator类,来描述一个定位元素classLocator:"""页面元素封装
介绍
本框架基于Python
语言进行开发,使用pytest
管理用例运行,使用Jenkins
+Allue
进行脚本执行与报告展示。
适用于Web、H5、IOS、安卓的UI自动化测试
元素封装
对于一个需要定位的元素,我们一般就需要用到它的 描述
、定位方式
、定位语句
、使用时的变量名
由于部分元素出现时间较长,增加一个等待时间
我们编写一个Locator
类,来描述一个定位元素
class Locator:
"""
页面元素封装
"""
def __init__(self, element, wait_sec=3, by_type='id', locator_name='', desc=''):
"""
@param element: 定位语句
@param wait_sec: 等待时间 默认3秒
@param by_type: 定位方式
@param locator_name: 变量名
@param desc: 描述
"""
self.element = element
self.wait_sec = wait_sec
self.by_type = by_type
self.locator_name = locator_name
self.desc = desc
def __str__(self):
return f'{self.desc}:(By:{self.by_type},element:{self.element})'
def __repr__(self):
return f'{self.desc}'
重写__str__
方法是为了使用print
打印的时候可以显示指定内容
比如有个如下的元素,使用print
打印它的实例化对象就可以展示
挂号:(By:xpath,element://p[text()="挂号"])
registered = Locator(
element='//p[text()="挂号"]',
wait_sec=3,
by_type="xpath",
locator_name="registered",
desc="挂号")
print(registered) # 挂号:(By:xpath,element://p[text()="挂号"])
后面在调试或者日志打印的时候可以展示的更易于阅读
Yaml文件格式规定
为了方便多端(h5、ios、安卓等)元素调用的统一,yaml格式规定如下:
pages:
- page:
pageName: home_h5
desc: 首页
locators:
- { desc: "挂号",type: "xpath",value: '//p[text()="挂号"]', name: "registered" }
- page:
pageName: home_ios
desc: 首页_ios
locators:
- { desc: "挂号",type: "xpath",value: '//XCUIElementTypeStaticText[@name="挂号"]', name: "registered" }
最外层是pages
表示多个页面
下层是page
+desc
+locators
表示单个页面的名称、描述、具体的元素定位
我们只要在执行脚本前正确读取该yaml文件,并将它的locators
中的元素一一使用Locator
实例化,就可以使用了
读取yaml文件
path:yaml文件的存放路径
with open(path, 'r+', encoding='utf-8') as f:
data_dict = yaml.load(f, Loader=yaml.FullLoader) or {}
将读取出来的数据使用Locator
实例化
其中desc组合一下页面的描述,变为 页面描述+元素描述
desc = f"{page_desc}_{locator['desc']}"
pages_list = data_dict["pages"]
locator_map = dict()
for page in pages_list:
page_name = page["page"]["pageName"]
page_desc = page["page"]["desc"]
locator_map[page_name] = dict()
locators_list = page["page"]["locators"]
for locator in locators_list:
by_type = locator["type"]
element = locator["value"]
wait_sec = int(locator.get("timeout", 3))
locator_name = locator["name"]
desc = f"{page_desc}_{locator['desc']}"
tmp = Locator(element, wait_sec, by_type, locator_name, desc)
locator_map[page_name][locator_name] = tmp
使用定位元素
传入一个locator_name
也就是使用时的变量名
我们就可以拿到这个元素的所有信息了
locator_name = "registered"
page_name = "home_h5"
locator = locator_map.get(page_name)
if locator:
locator = locator.get(locator_name)
end
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
最后基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源【免费】。
更多推荐
所有评论(0)