原文链接: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]LeetCode859. 亲密字符串 | Buddy Strings

    Given two strings A and B of lowercase letters, return true if and only if we can swap two letters i ...

  2. [Swift]LeetCode1004. 最大连续1的个数 III | Max Consecutive Ones III

    Given an array A of 0s and 1s, we may change up to K values from 0 to 1. Return the length of the lo ...

  3. 为什么说Java中只有值传递

    本文转载自公众号 Hollis 对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文 ...

  4. C++ 动态生成对象

    1.啰嗦一下 说起C++,很多人都觉着难学,其实我也是这么觉着的,在这个移动端火到爆的时代,我都想改行了,移动端做东西那都是现有的第三方库,拿来就可以用,而且稳定性好,开发速度快,而且最关键的是出东西 ...

  5. Java 多线程(二)—— 线程的同步

     上文创建多线程买票的例子中注释会出现错票.重票的问题,本文来讲讲如何解决此问题.本文例子:利用多线程模拟 3 个窗口卖票 实现Runnable接口 public class TestThread2 ...

  6. 那些令人惊艳的TensorFlow扩展包和社区贡献模型

    随着TensorFlow发布的,还有一个models库(仓库地址:https://github.com/tensorflow/models),里面包含官方及社群所发布的一些基于TensorFlow实现 ...

  7. 知其所以然~分布式事务cap

    背景 一致性是一个抽象的.具有多重含义的计算机术语,在不同应用场景下,有不同的定义和含义.在传统的IT时代,一致性通常指强一致性,强一致性通常体现在你中有我.我中有你.浑然一体:而在互联网时代,一致性 ...

  8. .Net高并发解决思路(附源码)

    本文如有不对之处,欢迎各位拍砖扶正.另源码在文章最下面,大家下载过后先还原一下nuget包,需要改一下redis的配置,rabbitmq的配置以及Ef的连接字符串.另外使用的是CodeFirst,先u ...

  9. Object类toString()

    Object类是java所有类的始祖,在java中每个类都是由它扩展而来. toString()方法返回一个包含类名与内存地址的文本形式的字符串  即打印对象的时候便会调用此方法. 强烈建议为自定义的 ...

  10. js反爬-从入门到精通webdriver

    学习JS反爬 地址:http://openlaw.cn/login.jsp 想在指导案例中抓些内容,需要登陆 账号密码发送会以下面方式发送 所以需要找到_csrf和加密后的password,_csrf ...