RF自动化测试之元素封装

Wesley13
• 阅读 598

自动化测试均需要遵循由点到面的规则,然而对于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)
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
JQ选择器
如果你想寻找id以“sub\_”开头的元素,你可以使用:$("id^'sub_'")如果你想寻找id以“trim”结尾的元素,你可以使用:$("id$'trim'")要获得id包含“AAA”的元素,需要使用(这比遍历要快)$("id'trim'")可以指定元素类型input或者其他标签
Stella981 Stella981
3年前
Python+Selenium自动化篇
本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子。0.元素定位方法主要有:id定位:find\_element\_by\_id('')name定位:find\_element\_by\_name('')class定位:find\_element\_by\_class\_name(''
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Stella981 Stella981
3年前
Python+appium+pytest自动化教程(八)
从这篇文章我们将正式的进入正题,就是项目整合,在使用pytestappium之前我们先进行seleniumunitest的使用,如下文:pageObject是Selenium自动化测试项目的最佳设计模式之一,通过对界面的元素的封装,减少冗余代码,同时在后期维护中,若元素发生定位只需要页面调整封装元素的代码重构思路
Stella981 Stella981
3年前
RobotFramework自动化测试之元素定位
前言:最近在做基于RF框架的Web自动化测试,其中涉及到元素的定位,主要用到id、name、xpath、css四中定位方法,尤其后面的两种方法特别有效,可以解决大部分的定位问题。
Stella981 Stella981
3年前
CSS 分类 (Classification)
★★CSS分类属性(Classification)★★⑴CSS分类属性允许你控制如何显示元素,设置图像显示于另一元素中的何处,相对于其正常位置来定位元素,使用绝对值来定位元素,以及元素的可见度。⑵下面是常用的属性以及描述:!(https://oscimg.oschina.net/oscnet/00cb565
Stella981 Stella981
3年前
RobotFramework接口自动化的设计思想
自动化终极思想:以目标为导向,不断抽象沉淀,消除冗余,做到测试数据与测试代码分离1、自动化测试对人员的要求1、对测试人员的技能要求较高,需要自己写测试代码或看得懂别人的测试代码;2、需要根据版本迭代进行更新测试用例,有一定的维护成本;3、自动化能发现的缺陷数(bug)远远少于手工测试,产出低;4、自动化测