思路
在 UI 自动化中页面有很多不确定性,需求稍微有小小的变动,就需要修改自动化代码如果将定位元素和方法写在一起,维护脚本时就比较麻烦
因此,将定位元素放在配置文件中,方法单独写,方法中的定位元素都来自配置文件,维护时就比较方便
如果需求有变动,那个方法有变动就修改方法,定位有变动只需修改配置文件中的定位元素
将定位元素与方法分离不但可以增强代码的简洁性更有利的是维护起来方便
本文仅说明将元素配置成配置文件
在项目中最好将配置文件统一管理,例如都放在 configElement 文件下
还是以百度首页搜索为例
步骤:
1、新建配置文件
在 python 中配置文件一般是 ini 格式,暂时命名为 BaiduElement.ini
内容如下:
[BaiduHomeElement] baidu_search_input = id:kw baidu_search_button = id:su
注:[BaiduHomeElement] 这个节点只是注明这个节点下的都为百度首页的元素
如果是注册页面则可写成 [RegisterElement] 名称自定义,但最好还是写的有点含义,别人一看就能看懂是什么意思,是那个地方的元素
baidu_search_input = id:kw id 与 kw 之间的符号可以任意,只是为了区分用什么定位,定位值是啥,也可以写成<、=、》等,但是整个项目中最好统一
2、读取配置文件
配置文件 ini 的读取用到的是 configparser 库,所以要先导入该库:pip install configparser
# 创建对象 cf = configparser.ConfigParser() # 读取文件,传入文件路径,如果在同一个目录下则直接传入文件名即可 cf.read("BaiduElement.ini") # 获取元素 # 第一个参数为自定义的节点,第二个参数节点下的key element = cf.get("BaiduHomeElement", "baidu_search_input") print(element)
打印结果:
3、对读取配置文件进行封装
目的:使任意一个节点下的元素都可以使用同一个方法获取
# encoding = utf-8 import configparser class ReadIni(object): def __init__(self, file_name=None): if file_name == None: file_name = "BaiduElement.ini" # 配置文件路径可以自定义,如果不在当前目录下则读取设置的文件路径 self.cf = self.load_ini(file_name) def load_ini(self,file_name):
"""读配置文件""" cf = configparser.ConfigParser() cf.read(file_name) return cf def get_value(self,pageElement,key):
"""获得所需的值""" date = self.cf.get(pageElement,key) return date if __name__ == '__main__': cr = ReadIni() s = cr.get_value('BaiduHomeElement','baidu_search_input') print(s)
运行结果:
4、转换
将步骤3获取的结果进行处理,变成定位 key 和 value
方法很简单,使用 split 方法即可
如下例:
s = id:kw print(s.split(':'))
打印结果为:['id', 'kw']
只需要将 selenium 中的定位进行二次封装,将获得第一个值作为定位 key ,第二个值作为定位 value 即可直接定位
原文发布在微信公众号:软件羊皮卷
欢迎关注