selenium-配置文件定位元素(九)
思路
在 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 即可直接定位
原文发布在微信公众号:软件羊皮卷
欢迎关注
selenium-配置文件定位元素(九)的更多相关文章
- selenium配置文件定位元素
之前的写的selenium的定位元素进行测试的代码,现在一运行就报找不到元素了,之前运行的好好的. 我查看网站源码后,发现网站元素确实是变了,原来的定位的xpath代码压根全部找不到了,于是 想着,以 ...
- selenium+python定位元素方法
定位元素方法 官网地址:http://selenium-python.readthedocs.org/locating-elements.html 这里有各种策略用于定位网页中的元素(l ...
- selenium 难定位元素,时间插件,下拉框定位,string
1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素: fin ...
- selenium css定位元素
CSS 选择器: 常见符号: #表示 id选择器 .表示 class选择器 >表示子元素,层级 一个空格也表示子元素,但是是所有的后代子元素,相当于 xpath 中的相对路径 一.css:属性定 ...
- Selenium Webdriver定位元素的几种方式
原文:http://www.cnblogs.com/tobecrazy/p/4570494.html 工作中使用到记录一下. 主要有: 上传 alter dialog prompt dialog co ...
- selenium无法定位元素问题
在用自动化测试工具selenium完成下载任务时,经常会遇到定位不到元素的情况,总结如下: 1.frame/iframe原因定位不到元素: 这个是最常见的原因,首先要理解下frame的实质,frame ...
- selenium java-3 定位元素的八种方法
web driver提供了八种元素定位的方法: id name class name tag name link text partial link text xpath css selector 如 ...
- selenium+python定位元素的方法及使用
selenium的八种定位方法 By.ID 通过id定位 By.CLASS_NAME 通过className定位 By.CSS_SELECTOR 通过CSS定位 By.LINK_TEXT 通过link ...
- selenium 难定位元素,时间插件,下拉框定位,string包含,定位列表中的一个,技巧
关于frame: 如果网页存在iframe的话,传统的定位有时候找不到元素,需要切换frame: # 切换到leftFrame定位“测井设计” driver.switch_to_frame(" ...
- Selenium的定位元素
1.浏览器操作 # 刷新 driver.refresh() # 前进 driver.forward() # 后退 driver.back() 2.获取标签元素 # 通过ID定位目标元素 dri ...
随机推荐
- [Swift]LeetCode964. 表示数字的最少运算符 | Least Operators to Express Number
Given a single positive integer x, we will write an expression of the form x (op1) x (op2) x (op3) x ...
- mac连接windows远程桌面及文件复制
最近更换mac办公,但由于之前是用windows,所以很多文件项目之类的东西都还在windows电脑中,一次都传到mac上又会比较占内存,并且使用率也不高,感觉不划算.但每次想用的时候,在从windo ...
- java 网络通信传输层协议——UDP和TCP
本文原文由作者“zskingking”发表于:jianshu.com/p/271b1c57bb0b,本次收录有改动. 1.点评 互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯网专注的即时通 ...
- BBS论坛(三十)
30.显示评论和添加评论功能完成 (1)apps/models.py class CommentModel(db.Model): __tablename__='comment' id=db.Colum ...
- 初探React与D3的结合-或许是visualization的新突破?
自诞生之初截止目前(2016年初),React可以说是前端界最流行的话题,如果你还不知道React是何物,你就该需要充充电了. d3是由纽约时报工程师开源的一个绘制基于svg的数据可视化工具,是近几年 ...
- transient和synchronized的使用
transient和synchronized这两个关键字没什么联系,这两天用到了它们,所以总结一下,两个关键字做个伴! transient 持久化时不被存储,当你的对象实现了Serializable接 ...
- centos7下vim8.1的编译安装教程
之前安装YouCompleteMe的时候遇到vim版本不兼容的问题,看网上说是需要将vim版本提升到8.0及以上,然后就开始安装最新版本的vim,安装过程中的遇到了不少问题主要集中在配置方面和缺少插件 ...
- nodejs操作session和cookie
session: 安装模块 cnpm install express-session 引入session注册到路由 var express = require('express'); var sess ...
- Mysql加锁过程详解(8)-理解innodb的锁(record,gap,Next-Key lock)
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Redux,基础
在学习了React之后, 紧跟着而来的就是Redux了~ 在系统性的学习一个东西的时候, 了解其背景.设计以及解决了什么问题都是非常必要的. 接下来记录的是, 我个人在学习Redux时的一些杂七杂八~ ...