原文链接:https://mp.weixin.qq.com/s?__biz=MzU5NTgyMTE3Mg==&mid=2247483802&idx=1&sn=3218e34b63d0602457612996fc7d3282&chksm=fe6d5681c91adf976e5ea536fe70ea8ff43e99b3920cc2adca955bd94f75220ebeb0378cf254&token=1561865834&lang=zh_CN#rd

思路

  在 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-配置文件定位元素(九)的更多相关文章

  1. selenium配置文件定位元素

    之前的写的selenium的定位元素进行测试的代码,现在一运行就报找不到元素了,之前运行的好好的. 我查看网站源码后,发现网站元素确实是变了,原来的定位的xpath代码压根全部找不到了,于是 想着,以 ...

  2. selenium+python定位元素方法

    定位元素方法 官网地址:http://selenium-python.readthedocs.org/locating-elements.html        这里有各种策略用于定位网页中的元素(l ...

  3. selenium 难定位元素,时间插件,下拉框定位,string

    1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素: fin ...

  4. selenium css定位元素

    CSS 选择器: 常见符号: #表示 id选择器 .表示 class选择器 >表示子元素,层级 一个空格也表示子元素,但是是所有的后代子元素,相当于 xpath 中的相对路径 一.css:属性定 ...

  5. Selenium Webdriver定位元素的几种方式

    原文:http://www.cnblogs.com/tobecrazy/p/4570494.html 工作中使用到记录一下. 主要有: 上传 alter dialog prompt dialog co ...

  6. selenium无法定位元素问题

    在用自动化测试工具selenium完成下载任务时,经常会遇到定位不到元素的情况,总结如下: 1.frame/iframe原因定位不到元素: 这个是最常见的原因,首先要理解下frame的实质,frame ...

  7. selenium java-3 定位元素的八种方法

    web driver提供了八种元素定位的方法: id name class name tag name link text partial link text xpath css selector 如 ...

  8. selenium+python定位元素的方法及使用

    selenium的八种定位方法 By.ID 通过id定位 By.CLASS_NAME 通过className定位 By.CSS_SELECTOR 通过CSS定位 By.LINK_TEXT 通过link ...

  9. selenium 难定位元素,时间插件,下拉框定位,string包含,定位列表中的一个,技巧

    关于frame: 如果网页存在iframe的话,传统的定位有时候找不到元素,需要切换frame: # 切换到leftFrame定位“测井设计” driver.switch_to_frame(" ...

  10. Selenium的定位元素

    1.浏览器操作 # 刷新 driver.refresh()   # 前进 driver.forward()   # 后退 driver.back() 2.获取标签元素 # 通过ID定位目标元素 dri ...

随机推荐

  1. [Swift]LeetCode647. 回文子串 | Palindromic Substrings

    Given a string, your task is to count how many palindromic substrings in this string. The substrings ...

  2. [Swift]LeetCode923.三数之和的多种可能 | 3Sum With Multiplicity

    Given an integer array A, and an integer target, return the number of tuples i, j, k  such that i &l ...

  3. linux入门--Linux的应用领域

    Linux 似乎在我们平时的生活中很少看到,那么它应用在哪些领域呢?其实,在生活中随时随地都有 Linux 为我们服务着. 网站服务器 用事实说话!访问国际知名的 Netcraft 网站 http:/ ...

  4. Linux 实现服务器之间时间同步

    在主服务器上安装NTP时间同步服务器 yum -y install ntp vim /etc/ntp.conf  手动添加两行 server 127.127.1.0 fudge 127.127.1.0 ...

  5. Linux篇---Vi的使用

    一.前述 Vi类似记事本,所以用好记事本对编程效率有很大得影响,有着事半功倍的效率. 二.具体操作  1.打开文件vim /path/to/somefilevim +# :打开文件,并定位于第#行 v ...

  6. 【Storm篇】--Storm并发机制

    一.前述 为了提高Storm的并行能力,通常需要设置并行. 二.具体原理 1. Storm并行分为几个方面: Worker – 进程一个Topology拓扑会包含一个或多个Worker(每个Worke ...

  7. 『没有上司的舞会 树形DP』

    树形DP入门 有些时候,我们需要在树形结构上进行动态规划来求解最优解. 例如,给定一颗\(N\)个节点的树(通常是无根树,即有\(N-1\)条无向边),我们可以选择任意节点作为根节点从而定义出每一颗子 ...

  8. C#版 - 小红书后台开发面试题: 二维数组中的查找

    二维数组中的查找 热度指数:24274 时间限制:1秒 空间限制:32768K 本题知识点: 查找 ​ 在线提交网址: http://www.nowcoder.com/practice/abc3fe2 ...

  9. LocalDateTime反序列化,LocalDateTime格式化

    使用mybatis-plus的时候出现了LocalDateTime类(jdk8 中新出现的类 那么我在反序列化的时候出了问题. 我在springboot 2.1.3 中使用以下类结局问题) 用到了下面 ...

  10. scrapy爬虫学习系列三:scrapy部署到scrapyhub上

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...