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 ...
随机推荐
- Codeforces Round #250 (Div. 1)
这几次CF都挺惨.. A 没条边权设为两端点的最小点权,最后加起来. 数组开小,WA一次 #include <iostream> #include<cstdio> #inclu ...
- 【5岁小孩都会】vs2013如何进行单元测试
1,如何进行单元测试呢,打开vs 新建一个项目 然后在解决方案右键点击,如下图所示: 2,左侧点击 测试 ->单元测试项目 3)点击确定,如下图 4)在当前代码上右键点击,调试 或者运行测试 ...
- Struts 2中访问Servlet API的几种方法小结
1.使用ActionContext Action运行期间所用到的数据都保存在ActionContext中,例如session.客户端提交的参数等,ActionContext是Action的一个上下文对 ...
- Lucene全文检索技术学习
---------------------------------------------------------------------------------------------------- ...
- Azure资源管理工具Azure PowerShell介绍
什么是 Azure PowerShell? Azure PowerShell 是一组模块,提供用于通过 Windows PowerShell 管理 Azure 的 cmdlet.你可以使用 cmdle ...
- Clusterware 和 RAC 中的域名解析的配置校验和检查 (文档 ID 1945838.1)
适用于: Oracle Database - Enterprise Edition - 版本 10.1.0.2 到 12.1.0.1 [发行版 10.1 到 12.1]Oracle Database ...
- 利用enum4linux 445端口+wordpress插件任意文件上传的一次渗透
探测内网80端口发现目标IP 目标使用Apache 2.4.7web服务中间件 使用linux Ubuntu系统 使用御剑扫描了目录 目录扫描到了 http://192.168.31.236/ ...
- PHP框架深度解析
PHP成为世界上最流行的脚本语言有许多原因:灵活性,易用性等等.但通常只用PHP或者其他语言编码就会显得单调.重复,这时候就需要一个PHP框架来代替程序员完成那些重复不变的部分.本文通过回答What, ...
- python基础一 day14 复习
迭代器和生成器迭代器:双下方法 : 很少直接调用的方法.一般情况下,是通过其他语法触发的可迭代的 —— 可迭代协议 含有__iter__的方法('__iter__' in dir(数据))可迭代的一定 ...
- 爬虫_python3_抓取猫眼电影top100
使用urllib,request,和正则表达式,多线程进行秒抓,以及异常处理结果: import urllib,re,json from multiprocessing import Pool#多进程 ...