UI自动化测试框架搭建 —— yaml文件管理定位元素

发布时间:2024年01月23日

?🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享耗时200+小时精选的「软件测试」资料包

🔥?教程推荐:火遍全网的《软件测试》教程??

📢欢迎点赞 👍 收藏 ?留言 📝 如有错误敬请指正!

介绍

本框架基于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)

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!

文章来源:https://blog.csdn.net/qaqqqqqaq_/article/details/135777454
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。