自动化测试均需要遵循由点到面的规则,然而对于UI自动化,点是最容易发生变化的,如果使用硬链接,那么每次元素的修改都必须修改代码,这对于代码功底薄弱的测试工程师来说,是较为困难的,所以自动化测试需要对底层基本元素进行封装

1、首先就是元素的获取方式

我推荐使用CSV的文件格式对元素进行存储和维护,并给每个元素起个别名,这样之后元素维护只需要修改CSV表中具体的元素的,可简化维护工作,CSV文件内的格式如下:

模块名称,自定义的元素名称,元素定位信息,描述
Login&Register,login_label_text,btn_Login,"""我的""页面登录/注册按钮"
Login&Register,login_phone_input,et_phone_2412,登录手机号输入框

读取csv文件的方法如下

import csv
def read_csv(self,data_path):
with open(data_path, "r", encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile)
sheet_data = {}
for line in reader:
sheet_data[line["自定义的元素名称"]] = line["元素定位信息"]
# print(sheet_data.__len__())
return sheet_data

2、完整代码如下

import csv

class GetIdentify(object):

    def return_identify(self, os_name, ele_name,ele_path):
print('进入程序,ele_name:')
print(ele_name)
# ele_path="D:\\Study\\xxx\\xxxxx\\"
android_dic = GetIdentify().read_csv(ele_path+'Android_Element.csv') #必须填入绝对路径
ios_dic = GetIdentify().read_csv(ele_path+'IOS_Element.csv') #必须填入绝对路径
if os_name.lower() == 'android':
re_id = android_dic.get(ele_name)
print(re_id)
return re_id
elif os_name.lower() == 'ios':
re_id = ios_dic.get(ele_name)
print(re_id)
return re_id def read_csv(self,data_path):
with open(data_path, "r", encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile)
sheet_data = {}
for line in reader:
sheet_data[line["自定义的元素名称"]] = line["元素定位信息"]
# print(sheet_data.__len__())
return sheet_data if __name__ == '__main__':
os_name="android"    #调试用代码
ele_name='POI_travelpage_findcar'
ss1=GetIdentify()
ss1.return_identify(os_name,ele_name)

最新文章

  1. greenDao 备注
  2. 非常简单的数据,支持excel表格下载功能
  3. wcf服务与web发布时无法访问 几种解决办法
  4. Html - 返回Top
  5. Xcode 中 Git 的配置与使用
  6. java中遍历List中的map问题
  7. ip头、tcp头、udp头详解及定义,结合Wireshark抓包看实际情况
  8. Gems
  9. yii2 控制器里 action 大小写组合造成的路由问题
  10. Chrome 控制台不完全指南(转)
  11. android的引用库类
  12. APUE 2 - 进程组(process group) 会话(session) job
  13. Shell 整数比较、字符串比较
  14. 阿里云消息队列(MQ)服务
  15. Mybatis order by语句使用<Choose><When>动态拼装无效的原因及解决方法
  16. jenkins ansible 附zabbix_agent批量安装示例
  17. 3682: Phorni 后缀平衡树 线段树
  18. JSP中的动态包含和静态包含的区别
  19. [Node.js]31. Level 7: Redis coming for Node.js, Simple Redis Commands
  20. 原创:微信小程序调用PHP后台接口,解析纯html文本

热门文章

  1. Python连载57- 邮件头和主题、解析邮件
  2. ReactNative: 使用AppReistry注册类
  3. 阿里巴巴Java开发手册正确学习姿势是怎样的?刷新代码规范认知
  4. Prometheus学习系列(一)之Prometheus简介
  5. How to: Use the Entity Framework Code First in XAF 如何:在 XAF 中使用EF CodeFirst
  6. React Hook父组件获取子组件的数据/函数
  7. 2019 DevOps 技术指南
  8. 表单生成器(Form Builder)之mongodb表单数据——整理数据
  9. JS高程中的垃圾回收机制与常见内存泄露的解决方法
  10. javascript---简介的切换图片效果。