UI对象库-定位元素与程序分离
前言
这几天有人问我,UI自动化测试中使用到的页面定位元素应该存放在哪里比较合适?我想说的是如果你使用的是PO设计模式设计测试用例的话,可以把定位元素存在每一个page页面或者单独存放在一个目录中新键不同页面对应不同名称的文件来存储定位方式,当页面变动的时只需修改对应页面对应的定位表达式文件即可,方便项目维护。还有一种就是存放在配置文件下,这样对于不懂得自动化测试的人员也可以配置,当然你可以根据自己的意愿进行选择。那么下面我看就来看一下如何存放到配置文件中?如何来读取并定位?
目录结构

测试地址:http://www.sogou.com
测试步骤:1.打开网址2.搜索框输入python3.点击搜索按钮4.判断python是否包含在页面源码中
文件说明:WebElement.ini 存放定位元素。GetElement.py用来读取配置文件并查找页面元素。SouGouTc.py用来编写测试用例
实例代码
WebElement.ini
[sogou]
queryBox=id:query
queryBtn=id:stb
GetElement.py
from selenium.webdriver.support.ui import WebDriverWait
import configparser
import os
from selenium import webdriver
class getElement():
'''
从配置文件中来获取定位信息
'''
def __init__(self):
self.elementIni = os.path.dirname(os.path.abspath(__file__))\
+r'\WebElement.ini' # 配置文件所在目录
def getElement(self, driver, sogouSection, sogouOption):
try:
f = configparser.ConfigParser()
f.read(self.elementIni) # 读配置文件内容到内存中
locators = f.get(sogouSection, sogouOption).split(':')
# 获取定位方式
locaMethod = locators[0]
# 获取定位表达式
locaExpression = locators[1]
# 通过显示等待的方式获取页面的元素
element = WebDriverWait(driver,5).until(lambda x : x.find_element(locaMethod, locaExpression))
except Exception as e:
raise e
else:
return element if __name__ == '__main__':
ele = getElement()
print(ele.elementIni)
driver = webdriver.Firefox()
driver.get('http://www.sogou.com')
element = ele.getElement(driver, 'sougou', 'queryBox')
element.send_keys('python')
SouGouTc.py
from selenium import webdriver
import unittest
import time
from programDataSeparate.GetElement import getElement
class sogouTc(unittest.TestCase): def setUp(self):
self.obj = getElement()
self.driver = webdriver.Firefox()
self.driver.get('http://www.sogou.com')
def testSoGou(self):
elementQuery = self.obj.getElement(self.driver, 'sogou', 'queryBox') # 搜索框
elementQuery.send_keys('python')
elementBtn = self.obj.getElement(self.driver, 'sogou', 'queryBtn') # 搜索按钮
elementBtn.click()
time.sleep(2)
self.assertTrue('python' in self.driver.page_source) # 断言
def tearDown(self):
self.driver.quit() if __name__ == '__main__':
unittest.main()
总结
本实例实现了程序与数据的分离,首先从UI对象库文件WebElement.ini中取得sogou首页中需要操作的页面元素的定位方式和定位表达式,然后在GetElement.py中取得该页面元素的实例对象,最后返回给测试用例方法中进行后续处理,这样做的好处是即使不懂得测试的人员也可以配置用例,当定位表达式改变时,只修改配置文件中的定位即可,无需修改测试相关代码,当然这也是相对来说的,如果页面功能操作步骤变了那么你就得修改代码操作步骤了。
UI对象库-定位元素与程序分离的更多相关文章
- Selenium WebDriver UI对象库
UI对象库:使用配置文件存储测试页面上的定位和定位表达式,做到定位数据和程序的分离. 第一步:实现工具类Object工具类,供测试程序调用. /** * 使用配置文件存储测试页面上的定位和定位表达式, ...
- 读取ini配置文件 及 UI对象库
读取ini配置文件 配置项 读取API 写入API 实战:UI 对象库 读取ini配置文件 配置项 在每个 ini 配置文件中,配置数据会被分组(比如下述配置文件中的"config" ...
- 通过id、classname定位元素,程序仍报找不到元素的原因
很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug也可以看到,就是定位不到,这种情况很有可能是frame在搞鬼.我们知道了原因,你现在就解决问题.sw ...
- 5个最优秀的微信小程序UI组件库
开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面5款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...
- 6个最优秀的微信小程序UI组件库
开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面6款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...
- 6个优秀的微信小程序ui组件库
开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面6款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...
- 小程序开发-6个优秀的UI组件库
微信小程序开发,当原生的控件不能满足我们时,可以尝试下面几个比较优秀的组件库. 1. WeUI WXSS WeUI WXSS是腾讯官方UI组件库WeUI的小程序版,提供了跟微信界面风格一致的用户体验. ...
- selenium-配置文件定位元素(九)
原文链接:https://mp.weixin.qq.com/s?__biz=MzU5NTgyMTE3Mg==&mid=2247483802&idx=1&sn=3218e34b6 ...
- 强烈推荐优秀的Vue UI组件库
Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正 ...
随机推荐
- Win10下搭建Git服务器
一. 搭建Git服务器环境前的必要准备 1.Windows10 2.Java环境 3.GitBlit服务器 4.Git版本管理工具 二. 开始搭建 第一步.安装JAVA运行环境 https://www ...
- JDBC:SqlServer连接TCP/IP连接失败,到主机 的 TCP/IP 连接失败。报错信息:com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。
作者QQ:1161493927,欢迎互相交流学习. 报错信息:com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败. j ...
- [转]微信小程序实现图片上传功能
本文转自:http://blog.csdn.net/feter1992/article/details/77877659 前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何 ...
- #Java学习之路——基础阶段二(第四篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- Java成神之路技术整理(长期更新)
以下是Java技术栈微信公众号发布的关于 Java 的技术干货,从以下几个方面汇总. Java 基础篇 Java 集合篇 Java 多线程篇 Java JVM篇 Java 进阶篇 Java 新特性篇 ...
- Mybatis之旅第一篇-初识Mybatis
一.JDBC的问题 为什么我们要使用Mybatis,是因为JDBC存在以下问题 1. 数据库连接创建.释放频繁造成系统资源浪费,从而影响系统性能.如果使用数据库连接池可解决此问题. 2. Sql语句在 ...
- 【Android Studio安装部署系列】二、Android Studio开发环境搭建
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio开发环境安装步骤 下载Android Studio 下载地址: http://www.wanandroi ...
- Python:序列的增量赋值
增量赋值运算符有 += 和 *=.+= 背后的特殊方法是 __iadd__,如果一个类没有实现 __iadd__ 方法,Python 会退一步调用 __add__ 方法.这两个方法的区别在于,__ia ...
- 服务器配置java
先去链接下载jdk or jre(服务器上这个就好) 然后解压 tar 下载的文件,放到/usr/local/java/jdk_xxx下面 -v: 可视化显示进度. Enables verbose m ...
- KVO讲解
最近一直在写swift项目,没有时间更新自己的技术博客,以前在博客里面写过KVO的底层原理,今天我们来看一下KVO的整个使用过程和使用场景(附有demo),大约花大家10-15分钟时间,希望大家看完博 ...