Python (Page Object实例)
Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素和功能模块的封装减少冗余代码,同时在后期维护中,若元素定位或功能模块发生变化,只需要调整页面元素或功能模块封装的代码,提高测试用例的可维护性。
案例:登录帝国网站(http://localhost)
首先定义一个基础类,用于页面对象的继承
BasePage.py
from time import sleep class Page():
'''页面基础类''' # 初始化
def __init__(self, driver):
self.driver = driver
self.base_url = 'http://localhost'
self.timeout = 10 # 打开不同的子页面
def _open(self, url):
url_ = self.base_url + url
print("The url is %s" % url_)
# self.driver.maximize_window()
self.driver.get(url_)
sleep(2)
assert self.driver.current_url == url_, 'Did not load on %s' % url_ def open(self):
self._open(self.url) # 元素定位方法封装
def find_element(self, *loc):
return self.driver.find_element(*loc)
代码分析:
首先创建一个基础类Page,在初始化方法__init__()中定义驱动(driver),基本的URL(base_url)和超时时间(timeout)等
定义Open()方法用于打开URL网站,但它本身并未做这件事情,而是交由_open()方法来实现。关于URL地址的断言方法,则交由assert实现,而find_element()方法用于元素定位
之后设计网站登录页面模型
LoginPage.py
from BasePage import *
from selenium.webdriver.common.by import By class LoginPage(Page):
url = "/" # 定位器
username_loc = (By.NAME, 'username')
password_loc = (By.NAME, 'password')
submit_loc = (By.NAME, 'Submit') # 用户名输入框元素
def type_username(self, username):
self.find_element(*self.username_loc).clear
self.find_element(*self.username_loc).send_keys(username) # 密码输入框元素
def type_password(self, password):
self.find_element(*self.password_loc).clear
self.find_element(*self.password_loc).send_keys(password) # 登录按钮元素
def type_submit(self):
self.find_element(*self.submit_loc).click # 登录功能模块封装
def test_user_login(driver, username, password):
'''测试用户名密码是否可用''' login_page = LoginPage(driver)
login_page.open()
login_page.type_username(username)
login_page.type_password(password)
login_page.type_submit()
代码分析:
Page类中定义的这些方法都是页面操作的基本方法。上面根据再登录页面的特点再创建LoginPage类并继承Page类
LoginPage类中主要对登录页面上的元素进行封装,使其成为更具体的操作方法,例如用户名,密码和登录按钮都被封装成了方法
test_user_login()函数将单个的元素操作组成一个完整的动作,而这个动作包含了打开浏览器,输入用户名\密码,点击登录等单步操作。在使用该函数时需要将driver、username、password等信息作为函数的入参,这样该函数具有很强的可重用性
最后将用户名和密码传进去
login_test.py
from LoginPage import *
from selenium import webdriver driver = webdriver.Firefox()
username = '用户名'
password = '密码' test_user_login(driver, username, password) sleep(3)
driver.quit()
login_test更接近用户的操作行为。对用户来说,要进行网站的登录,需要关心的就是通过哪个浏览器打开网站网址,登录的用户名和密码是什么。
这样分层的好处是,不同的层关心不同的问题,页面对象层只关心元素的定位问题,测试用例只关心测试的数据
Python (Page Object实例)的更多相关文章
- selenium+Python(Page Object 设计模式实例)
以下实例演示了采用了page Object设计模式的方式登录qq空间: 1.创建基础类page:在初始方法__init__()定义驱动的(driver),基本url(base_url)和超时时间(ti ...
- 19、Page Object 实例
项目目录介绍: CalcuatorPage.java文件代码: package example; import io.appium.java_client.android.AndroidDriver; ...
- Selenium(十九):unittest单元测试框架(五) Page Object设计模式
1. Page Object设计模式 Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,它主要体现在对界面交互细节的封装,这样可以使测试方案更关注于业务而非界面细节.从 ...
- Selenium 2自动化测试实战39(Page Object设计模式)
Page Object设计模式 Page object是selenium自动化测试项目开发时间的最佳设计模式之一,主要体现在对界面交互细节的封装. 1.认识page object优点如下:1.减少代码 ...
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...
- Python+Selenium使用Page Object实现页面自动化测试
Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ...
- Page Object Model (Selenium, Python)
时间 2015-06-15 00:11:56 Qxf2 blog 原文 http://qxf2.com/blog/page-object-model-selenium-python/ 主题 Sel ...
- Python+Selenium笔记(十三):Page Object设计模式
(一) 前言 简单的说就是分为2层,页面class 和测试class. 页面class:分为父类和子类(子类指具体的页面,每一个页面都创建一个类),父类中定义公有的属性和方法(操作). #对面向对象有 ...
- Selenium的PO模式(Page Object Model)[python版]
Page Object Model 简称POM 普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...
随机推荐
- asp.net调试技巧
一眨眼的功夫,自己已经学习asp.net的有一年的功夫了.虽然称不上什么大神,但是也有一点知识的积累.就写一片调试的入门文章给那些刚刚入门迷茫的童鞋们.希望你学习了我这篇文章能从迷茫的生活中找回编程的 ...
- 文件操作,Io流。
private void textBox1_TextChanged(object sender, EventArgs e) { } private void button1_Click(object ...
- pay-spring-boot 开箱即用的Java支付模块,整合支付宝支付、微信支付
关于 使用本模块,可轻松实现支付宝支付.微信支付对接,从而专注于业务,无需关心第三方逻辑. 模块完全独立,无支付宝.微信SDK依赖. 基于Spring Boot. 依赖Redis. 我能做什么 支付宝 ...
- Windows Live Writer 2012发博客配置和技巧
一.软件准备: 最新版的是Windows Live Writer 2012,但是不提供单独的安装包,它是和微软其它软件一起的(包括MSN.Window Move Maker等),软件大小为131M,官 ...
- x-shell配置远程连接
1. 打开x-shell 2. 配置编译属性 3. 配置用户的身份证信息 5. 配置完成之后选择连接
- mohout安装
安装完成之后的环境变量的配置如下: JAVA_HOME=/usr/local/jdk1.8.0_144JRE_HOME=/usr/java/jdk1.8.0_144/jreCLASSPATH=.:$J ...
- iOS 随机数(Fixed)
ios 有如下三种随机数方法: 1. srand((unsigned)time(0)); //不加这句每次产生的随机数不变 int i = rand() % 5; 2. ...
- Xcode编译工具
一.关于Other Linker Flags xcode中,在“Targets”选项下有Other Linker Flags选项,在这里可以填写xcode链接器的参数,如:-ObjC.-all_loa ...
- idea快速生成实体类Entity
1)打开idea 2)添加mysql的数据连接 3)生成类
- HTML5服务器发送事件(Server-Send Events)
HTML5服务器发送事件是允许获得来自服务器的更新. server-sent事件-单向传递消息,表示网页自动获取来自服务器的更新. 其中有一个重要的对象,eventsource对象是用来接收服务器发送 ...