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 ...
 
随机推荐
- CentOS7Linux中自动化运维工具Ansible的安装,以及通过模块批量管理多台主机
			
使用自动化运维工具Ansible集中化管理服务器 Ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet ...
 - 9.Git分支-分支的创建与合并-02
			
在 8.Git分支-分支的创建与合并-01 主要通过一个例子介绍了分支的新建,以及在工作中,git分支的新建切换以及使用,这里主要介绍分支的合并.这里的例子和8.Git分支-分支的创建与合并-01 的 ...
 - BBS论坛(三十)
			
30.显示评论和添加评论功能完成 (1)apps/models.py class CommentModel(db.Model): __tablename__='comment' id=db.Colum ...
 - SpringBoot+Elasticsearch
			
1. 前言 1.1. 集成方式 Spring Boot中集成Elasticsearch有4种方式: REST Client Jest Spring Data Spring Data Elastic ...
 - java基础(五)-----关键字static
			
在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块. ...
 - Chapter 4 Invitations——16
			
While I was sitting there, looking everywhere but at the car in front of me, I heard a knock on my p ...
 - windows下使用jenkins持续集成.net项目
			
前言 随着微服务的兴起,原先一个庞大的项目,被切分一个个功能独立的微服务,虽然使得业务系统的扩展性和维护性得到提升,但是也加大了维护人员的工作量.有的系统由成百上千个微服务组成,如果每次有修改,都要手 ...
 - Docker最全教程——从理论到实战(二)
			
上篇内容链接: https://www.cnblogs.com/codelove/p/10030439.html Docker和ASP.NET Core Docker 正在逐渐成为容器行业的事实标准, ...
 - ajax跨域请求,亲测有效
			
跨域请求域有两种常用解决方案,jsonp和cors, 因为jsonp只能解决get请求问题,我这里用的是cors方法. js前端ajax请求: $.ajax({ url: "http://1 ...
 - 【Angular专题】——(1)Angular,孤傲的变革者
			
目录 一. 漫谈Angular 二. 如果你还在使用Angularjs 三. 我计划这样学习Angular技术栈 一. 漫谈Angular Angular,来自Google的前端SPA框架,与Reac ...