如何高效管理定位元素,这个是很有学问的问题,也是面试必问的[以下纯属个人观点,勿喷!]。
那么有没有一种方法,既高效,直观,方便,又能装逼,还能迎合面试官口味呢?接下来就是要讲的这种yaml文件管理 对yaml不了解的可以看我之前发的这篇python笔记14-读取yaml配置文件
环境: python 3.6 appium 1.8 美团app yaml包安装:pip install pyyaml
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")
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
1.把不同页面的元素放到对应的页面.yaml文件里,放到同一个目录下,方便一次性遍历读取
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模式的代码(用代码去写代码)