UI自动化测试的Page Object模式
在UI级的自动化测试框架中,当页面样式改变或者页面元素属性改变,那么代码也要随之进行修改,如何做到高效快速的修改代码来适应这些改变呢,这个时候可以引入Page Object模式,也是页面对象设计模式.
什么是Page Object
Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。 当页面元素id变化时,只需要更改测试页Class中页面的属性即可。 获取页面中元素的属性可以通过id,class或者XPath获取,在id唯一的情况下,可以使用id获取页面元素,否则可以使用XPath定位页面元素.
简而言之,就是把页面对象和用例进行分离,将页面的元素定位和元素行为封装一个Page类,测试用例调用Page的页面行为操作.
Page Object的优点:
1.创建可以跨多个测试用例共享的代码
2.减少重复代码的数量
3.如果用户界面发生变更后,只需要在一个地方维护即可.
Page Object 的应用.
例如我的一个项目,在page目录下编写有关于页面对象层的代码,若Web页面发生变更,修改代码主要是在Page包中进行修改,testcase包中主要编写对象中所有的测试代码.

在search_pg.py编写如下代码:
class SearchPage(BasePage):
_input_locator = (By.ID,"com.xueqiu.android:id/search_input_text")
_name_locator = (By.ID,"name")
def serach(self,keyword):
self.find_element(self._input_locator).send_keys(keyword)
self.find_element(self._name_locator).click()
return self
def get_current(self):
return float(self.driver.find_element(By.ID,"com.xueqiu.android:id/current_price").text)
在test_search.py中编写用例代码
class Test_appium:
# searchdata = yaml.load(open("./search.yaml", 'r'))
# searchdata = TestCase("step.yaml").case_data()
def setup(self):
self.search_pg = App.start().to_search()
def test_search_po(self):
self.search_pg.serach("alibaba")
assert self.search_pg.get_current()>10
# def test_yaml_step(self):
# TestCase("step.yaml").run(self.driver)
def teardown(self):
sleep(10)
App.quit()
UI自动化测试的Page Object模式的更多相关文章
- 【C#|.NET】从细节出发(三) 逻辑层事务和page object模式
一. 业务逻辑层的事务问题 如果你的程序分层清晰并且系统禁用复杂存储过程,那么在DA中的职责比较单一.程序的逻辑通过BLL调用各种不同模块的DA来实现数据操作.如果当需要不同模块在一个事务的时候,问题 ...
- 转 Page Object模式
Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ...
- selenium page object模式
页面对象模式将测试代码和被测试页面的元素及操作进行分离,以降低页面元素的变化对测试代码的影响.每个被测试的页面都会被定义一个类,类中会定位元素和操作. 如果不使用page object模式,则相同的操 ...
- 浅析selenium的page object模式
selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好 ...
- Page Object 模式编写UiAutomator脚本
在我们学习Page Object Model之前,我们先了解一下Page Object Model(以下简称POM). 为什么要POM 用UiAutomator启动UI自动化测试不是一件困难的任务.你 ...
- python+selenium自动化软件测试(第7章):Page Object模式
什么是Page ObjectModel模式Page Objects是selenium的一种测试设计模式,主要将每个页面看作是一个class.class的内容主要包括属性和方法,属性不难理解,就是这个页 ...
- 使用page object模式抓取几个主要城市的pm2.5并从小到大排序后写入txt文档
#coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...
- UI自动化测试框架:PO模式+数据驱动
1. PO 设计模式简介 2. 工程结构说明 3. 工程代码实现 page 包 action 包 business_process 包 util 包 conf 包 test_data 目录 log 目 ...
- python selenium-8 Page Object模式
封装空间操作为一个接口使用,而不是直接在页面中查找 from selenium import webdriver from selenium.webdriver.common.by import By ...
随机推荐
- linux之ls目录处理命令
目录处理命令:ls 解释 命令名称:ls 命令英文原意:list 命令所在路径:/bin/ls 执行权限:所有用户 功能描述:显示目录文件 语法 ls 选项[-ald] [文件或目录] -a 显示所有 ...
- 08.JS单词整理
以下为按照文章顺序简单整理的JS单词, 注意:是JS单词注释,部分与英文不符 01.JS语法规范.变量与常量 console——控制台 log——日志 var——变量 variable变量,变化 co ...
- redis主从同步,总是显示master_link_status:down的解决方法
小编使用的redis的版本号是5.0.5,可能会略有不同,例如redis.conf配置文件中,没有slaveof这一项配置 使用命令配置主从复制 今天在使用命令slaveof或者是replicaof命 ...
- 【Java】实验代码整理(多线程、自定义异常、界面)
1.界面+文件输入输出流 package finalExam; import java.awt.BorderLayout; import java.awt.Container; import java ...
- mysql基于二进制文件的主从复制
1.设置主服务器配置 必须在主服务器上启用二进制日志,因为二进制日志是将更改从主服务器复制到从服务器的基础,如果未启用log-bin,则无法进行复制 复制组内的每个服务 ...
- python-flask模块注入(SSTI)
前言: 第一次遇到python模块注入是做ctf的时候,当时并没有搞懂原理所在,看了网上的资料,这里做一个笔记. flask基础: 先看一段python代码: from flask import fl ...
- PIE-SDK For C++矢量数据的投影转换
1.功能简介 目前在地理信息领域中数据包括矢量和栅格两种数据组织形式,每一种数据都可以对投影进行转换,目前PIE SDK支持矢量和栅格数据的投影转换功能,下面对矢量数据的投影转换功能进行介绍. 2.功 ...
- JBPM4 学习笔记 转
关于JBPM工作流 2. JBPM jBPM,全称是Java Business Process Management,是一种基于J2EE的轻量级工作流管理系统.JBPM使用Hiberna ...
- MySQL manager or server PID file could not be found!
[root@centos var]# service mysqld stop MySQL manager or server PID file could not be found! [F ...
- P4075 [SDOI2016]模式字符串
总结 P4075 [SDOI2016]模式字符串 题目描述 给出n个结点的树结构T,其中每一个结点上有一个字符,这里我们所说的字符只考虑大写字母A到Z,再给出长度为m的模式串s,其中每一位仍然是A到z ...