appium+python自动化49-yaml管理定位元素

前言

如何高效管理定位元素,这个是很有学问的问题,也是面试必问的[以下纯属个人观点,勿喷!]

  • 有的人用xml管理页面定位元素,这种逼格略高,但是小编认为学习成本大,贼麻烦。

  • 有的人提到用excel管理页面定位元素,这种略显逼格,至少做到了数据分离,但是读取excel太慢,不够高效,还得在excel里面维护,忒麻烦。

  • 有的人说把定位元素放数据库管理,这种除了装逼,没觉得有多高效,当然有小伙伴提到接口测试数据量比较大的时候,这种方法还可以。

  • 有的人用pageobject模式,直接在page类写定位方法,虽然这种没直接把定位独立出来,但这种非常直观,也易于阅读

那么有没有一种方法,既高效,直观,方便,又能装逼,还能迎合面试官口味呢?接下来就是要讲的这种yaml文件管理
对yaml不了解的可以看我之前发的这篇python笔记14-读取yaml配置文件

环境:
python 3.6
appium 1.8
美团app
yaml包安装:pip install pyyaml

PageObject

1.先回顾一下PageObject模式定位元素的写法,如下这种:

class HomePage:    '''dec: 首页'''    # name: 城市选择    city_loc = ("id", "com.sankuai.meituan:id/city_button")    # name: 首页搜索    home_loc = ("id", "com.sankuai.meituan:id/search_edit")

yaml管理定位

1.把定位方法放到yaml文件管理,美团app首页元素定位如下:

HomePage:  dec: 首页    # 作者:上海-悠悠 QQ交流群:512200893  locators:      -        name: 城市选择        type: id        value: com.sankuai.meituan:id/city_button      -         name: 首页搜索         type: id         value: com.sankuai.meituan:id/search_edit

2.app上[我的]菜单页定位

MyPage:  dec: 我的  locators:      -        name: 我的        type: accessibility_id        value: 我的      -         name: 请点击登录         type: id         value: com.sankuai.meituan:id/user_name

3.登录页面定位,这里我把登录的几个流程页合并到一起了

--- LoginPage:  dec: 登录页  locators:      -        name: 微信登录        type: id        value: com.sankuai.meituan:id/passport_button_wechat      -         name: 手机号登录         type: id         value: com.sankuai.meituan:id/passport_button_meituan      -         name: 其它登录         type: id         value: com.sankuai.meituan:id/passport_button_other      -         name: QQ         type: xpath         value: //*[@text='QQ']      -         name: 微博         type: xpath         value: //*[@text='微博']      -         name: 账号密码         type: xpath         value: //*[@text='账号密码']      -         name: 输入账号         type: id         value: com.sankuai.meituan:id/edit_account      -         name: 输入密码         type: id         value: com.sankuai.meituan:id/edit_password      -         name: 登录按钮         type: id         value: com.sankuai.meituan:id/login_button

遍历读取os.walk()

1.把不同页面的元素放到对应的页面.yaml文件里,放到同一个目录下,方便一次性遍历读取

  • 在page总目录下,建一个pageelement的文件夹(这里是文件夹,里面不要有init.py文件),里面放页面元素的定位,不同的页面定义不同的namepage.yaml.

  • templetpage放一个自动生成用例的模板(这个模板是没后缀的文件),下一篇会讲

  • tools.py 用于运行代码后自动生成pages.py脚本

  • pages.py 运行tools里面代码后生成的

2.os.walk()遍历读取文件,之前有一篇专门讲过了python笔记4-遍历文件夹目录os.walk()

# coding:utf-8 import yaml import os # 当前脚本路径 basepath = os.path.dirname(os.path.realpath(__file__)) # yaml文件夹 yamlPagesPath = os.path.join(basepath, "pageelement") def parseyaml():    '''    # 作者:上海-悠悠 QQ交流群:512200893    遍历读取yaml文件    '''    pageElements = {}    # 遍历读取yaml文件    for fpath, dirname, fnames in os.walk(yamlPagesPath):        for name in fnames:            # yaml文件绝对路径            yaml_file_path = os.path.join(fpath, name)            # 排除一些非.yaml的文件            if ".yaml" in str(yaml_file_path):                with open(yaml_file_path, 'r', encoding='utf-8') as f:                    page = yaml.load(f)                    pageElements.update(page)    return pageElements if __name__ == "__main__":    a = parseyaml()    print(a)    for i in a["HomePage"]['locators']:        print(i)

运行结果:

下一篇讲通过templetpage模板自动生成pageobject模式的代码(用代码去写代码)

(0)

相关推荐

  • appium

    文章目录 appium 1.appium可以测试的对象 2.自动化混合APP的条件 3.总结 4.查看webview版本 5.APP面试点 6.代码部分 方式1: 设置搜索webview 方式2: 输 ...

  • 定位元素 | 白月黑羽教Python

    代码规则 点击这里,边看视频讲解,边学习以下内容 从示例代码,大家就可以发现,和Selenium Web自动化一样,要操作界面元素,必须先 定位(选择)元素. Appium是基于Selenium的,所 ...

  • Appium+python自动化14-查看webview上元素(DevTools)

    前言 app上webview的页面实际上是启用的chrome浏览器的内核加载的,如何把手机的网页加载到电脑上,电脑的chrome浏览器上有个开发模式,是可以方便调试的. 一.环境准备 1.手机上装一个 ...

  • Appium+python自动化12-appium元素定位

    前言 appium定位app上的元素,可以通过id,name.class这些属性定位到 一.id定位 1.appium的id属性也就是通过UI Automator工具查看的resource-id属性 ...

  • Appium+python自动化20-查看iOS上app元素属性

    前言 学UI自动化首先就是定位页面元素,玩过android版的appium小伙伴应该都知道,appium的windows版自带的Inspector可以定位app上的元素 Mac版的appium1.6的 ...

  • Appium+python自动化28-name定位

    前言 appium1.5以下老的版本是可以通过name定位的,新版本从1.5以后都不支持name定位了 一. name定位报错 1.最新版appium V1.7用name定位,报错: > sel ...

  • appium+python自动化30-list定位(find_elements)

    前言 有时候页面上没有id属性,并且其它的属性不唯一,平常用的比较多的是单数(element)的定位方法,遇到元素属性不唯一,就无法直接定位到了. 于是我们可以通过复数(elements)定位,先定位 ...

  • appium+python自动化31-android_uiautomator定位

    前言 appium的前身就是封装android的uiautomator这个框架来的,所以uiautomator的一些定位方法也可以用 一. text 1.通过text文本定位语法 > new U ...

  • appium+python自动化32-android_uiautomator定位进阶版

    前言 上一盘介绍uiautomator的定位方式都是类似这种'new UiSelector().xxx("xxx")',看起非常长,我也记不住,这很不python.于是本篇优化了定 ...

  • appium+python自动化34-获取元素属性

    前言 在做断言的时候,我们往往需要先获取目标元素的某些属性值,拿来判断,比如登录后,如何判断登录成功了呢?可以通过登录后获取账号的名称(元素的text属性)来判断. 一.获取text ``` # co ...

  • appium+python自动化50-生成定位对象模板templet(jinja2)

    前言 每次自己写pageobject定位元素对象太繁琐,格式都差不多,只是换个定位方法,这种就可以才有模板的方式,批量生成pageobject定位元素对象的模板 python里面生成模板有两个模块可以 ...