Selenium_Page Object设计模式
Page Object 介绍
Page Object设计模式的优点如下:
- 减少代码的重复
- 提高测试用例的可读性
- 提高测试用例的可维护性,特别是针对UI频繁变化的项目
当Web页面编写测试时,需要操作该Web页面上的元素,如果在测试代码中直接操作HTML元素,那么代码比较脆弱,因为UI频繁变动。可用到page对象封装成一个HTML页面,通过提供的API来操作页面元素。
Page Object 实例
下面以登录163邮箱为例实现:
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = 'YinJia' from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep class Page(object):
"""
基础类,用于页面对象类的继承
"""
login_url = 'https://mail.163.com'
def __init__(self,selenium_driver,base_url=login_url):
self.base_url = base_url
self.driver = selenium_driver
self.timeout = 30 def on_page(self):
return self.driver.current_url == (self.base_url + self.url) def _open(self,url):
url = self.base_url + url
self.driver.implicitly_wait(10)
self.driver.get(url)
self.driver.maximize_window()
assert self.on_page(),'Did not land on %s' % url def open(self):
self._open(self.url) def find_element(self,*loc):
return self.driver.find_element(*loc) class LoginPage(Page):
"""
163邮箱登录页面模型
"""
url = '/'
#定位器
username_loc = (By.NAME,'email')
password_loc = (By.NAME,'password')
submit_loc = (By.ID,'dologin') #Action
def type_username(self,username):
self.find_element(*self.username_loc).send_keys(username)
def type_password(self,password):
self.find_element(*self.password_loc).send_keys(password)
def submit(self):
self.find_element(*self.submit_loc).click() def test_user_login(driver,username,password):
"""
测试获取的用户名/密码是否可以登录
"""
login_page = LoginPage(driver)
login_page.open()
driver.switch_to.frame("x-URS-iframe")
login_page.type_username(username)
login_page.type_password(password)
login_page.submit() if __name__=='__main__':
try:
driver = webdriver.Firefox()
username = 'username'
password = ''
test_user_login(driver,username,password)
sleep(3)
driver.switch_to.default_content()
text = driver.find_element_by_xpath("//span[@id='spnUid']").text
assert(text == 'username@163.com'),'用户名称不匹配,登录失败!'
finally:
#关闭浏览器窗口
driver.close()
上述代码定义了open()方法用于打开URL网站,但它本身未做的事情,而是交由_open()方法来实现,关于URL断言则交由on_page()方法来实现,而find_element()方法用于元素的定位。LoginPage类中主要对登录页面上元素进行封装。
Selenium_Page Object设计模式的更多相关文章
- Page Object设计模式实践
Page Object模式是使用Selenium的广大同行最为公认的一种设计模式.在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织. Page Object模式,创建一个对 ...
- Paget Object 设计模式编写selenium测试用例
示例常规代码 baidu.py # _*_ coding:utf-8 _*_ import csv,unittest,time #导入csv模块 from time import sleep from ...
- selenium+Python(Page Object 设计模式实例)
以下实例演示了采用了page Object设计模式的方式登录qq空间: 1.创建基础类page:在初始方法__init__()定义驱动的(driver),基本url(base_url)和超时时间(ti ...
- Page Object 设计模式介绍
Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,Page Object 的主要体现于对界面交互细节的封装,这样可以使测试案例更关注与业务而非界面细节,提高测试案 ...
- Python+selenium之Page Object设计模式
Page Object是selenium自动化测试项目开发实践的最佳设计模式之一,他主要提现在对界面交互细节的封装,这样可以使测试案例隔你给加关注于业务而非界面细节,从而提高测试案例的可读性. Pag ...
- Selenium+java - Page Object设计模式
前言 Page Object(页面对象)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一.在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一 ...
- Selenium(十九):unittest单元测试框架(五) Page Object设计模式
1. Page Object设计模式 Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,它主要体现在对界面交互细节的封装,这样可以使测试方案更关注于业务而非界面细节.从 ...
- Appium_Page object设计模式
Page object设计模式思维,把app按页面去划分,一个页面就是一个page对象 每个页面的元素集中管理.页面上按钮操作方法单独封装 # __author__ = " Caric Le ...
- web端自动化——selenium Page Object设计模式
Page Object设计模式的优点如下: ① 减少代码的重复. ② 提高测试用例的可读性. ③ 提高测试用例的可维护性,特别是针对UI频繁变化的项目. 当为Web页面编写测试时,需 ...
随机推荐
- VLC for Android 编译过程
首先,给一个VLC的官网链接:VLC-AndroidCompile 上面有编译所需要安装的插件,环境变量的配置等等信息:虽然是英语,但也挺好理解,这里就不再详述:此文主要记录我在编译的过程中遇到的一些 ...
- 「Linux」centos7更新python3.6后yum报错问题
1. #vi /usr/bin/yum 因为我的旧版本是2.7,所以将#!/usr/bin/python改为#!/usr/bin/python2.7就可以了! 退出保存 2.可能还会报错 就修改/us ...
- 微信小程序踩过的坑
之前用小程序开发工具做过一个项目了,最近又新开了一个项目,在登录的时候发现总是提示code不合法,找了半天也未发现原因 后来同事提醒是不是因为开发工具里设置的AppId的问题,果断将当前工具里默认Ap ...
- 下载外部jar包后,链接源码和javadoc.jar
今天下载了一个Apache Common的一个jar包,对于引入源码和JavaDoc有了新的认识,在这里记录一下. Binaries是指二进制文件,包含使用的jar包.Source是指源码. xxx. ...
- 《转》sklearn参数优化方法
sklearn参数优化方法 http://www.cnblogs.com/nolonely/p/7007961.html 学习器模型中一般有两个参数:一类参数可以从数据中学习估计得到,还有一类参 ...
- LeetCode-Reverse Words in a String[AC源码]
package com.lw.leet1; import java.util.Stack; /** * @ClassName:Solution * @Description: * Reverse Wo ...
- Lucene 索引与检索架构图
- 2-sat Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) D
http://codeforces.com/contest/782/problem/D 题意: 每个队有两种队名,问有没有满足以下两个条件的命名方法: ①任意两个队的名字不相同. ②若某个队 A 选用 ...
- 12款jQuery幻灯片插件和幻灯片特效教程
jQuery 使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入一些非常好的效果.滑块和幻灯片效果是常用的内容展示方式之一,这是一种在有限的网页空间内展示系列项目时非常好的方法.今 ...
- jQuery经典面试题及答案精选[转]
这两天有个面试,把这些记在这里. 问题:jQuery的美元符号$有什么作用? 回答:其实美元符号$只是”jQuery”的别名,它是jQuery的选择器,如下代码: $(document).ready( ...