selenium+Python(Page Object 设计模式实例)
以下实例演示了采用了page Object设计模式的方式登录qq空间:
1、创建基础类page:在初始方法__init__()定义驱动的(driver),基本url(base_url)和超时时间(timeout)等
2、创建LoginPage类:Page类中定义的方法是页面操作的基本方法,后面根据登录页面特点创建LoaginPage类并继承Page,这就是page Object设计模式中的对象层
3、创建test_user_login()函数:创建test_user_login()函数将单个元素操作组成一个完整动作,这个动作包含打开浏览器、输入账号密码、登录等操作
4、创建main()函数:main()函数更接近用户操作行为,用户操作只需要关系是那个浏览器打开打开网址,登录的用户名和密码是什么,不会关系是如何去定位输入框的
代码:
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep class Page(object):
"""基础类,用于所以页面对象类继承"""
login_url = 'https://i.qq.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.get(url)
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): """登录页面模型""" url = '/'
# 定位器
username_loc = (By.ID, 'u')
password_loc = (By.ID, 'p')
submit_loc = (By.ID, 'login_button') 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 type_submit(self):
self.find_element(*self.submit_loc).click() def test_user_login(driver, username, password):
"""测试获取的用户名、密码是否可以登录成功"""
login_page = LoginPage(driver)
login_page.open()
driver.maximize_window()
driver.switch_to_frame('login_frame')
driver.find_element_by_id("switcher_plogin").click()
login_page.type_username(username)
login_page.type_password(password)
login_page.type_submit() def main():
try:
driver = webdriver.Firefox()
username = 'qq号' #调试的时候需要换成对应的QQ号
password = 'qq密码' #需要换成对应的密码
test_user_login(driver, username, password)
sleep(3)
# 断言的方式判断登录是否成功
try:
assert '对应空间的title' in driver.title #调试时候title要换
print ('successful')
except Exception as e :
print ('failed') finally:
driver.close() if __name__ == '__main__':
main()
这样的分层好处是,不同的层关心不同的问题,页面对象只关心元素的定位问题,测试用例只关心测试数据
selenium+Python(Page Object 设计模式实例)的更多相关文章
- Python+selenium之Page Object设计模式
Page Object是selenium自动化测试项目开发实践的最佳设计模式之一,他主要提现在对界面交互细节的封装,这样可以使测试案例隔你给加关注于业务而非界面细节,从而提高测试案例的可读性. Pag ...
- Selenium+java - Page Object设计模式
前言 Page Object(页面对象)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一.在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一 ...
- Selenium+Python :WebDriver设计模式( Page Object )
Page Object 设计原理 Page Object设计模式是Selenium自动化测试项目的最佳设计模式之一,强调测试.逻辑.数据和驱动相互分离. Page Object模式是Selenium中 ...
- web端自动化——selenium Page Object设计模式
Page Object设计模式的优点如下: ① 减少代码的重复. ② 提高测试用例的可读性. ③ 提高测试用例的可维护性,特别是针对UI频繁变化的项目. 当为Web页面编写测试时,需 ...
- Selenium(十九):unittest单元测试框架(五) Page Object设计模式
1. Page Object设计模式 Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,它主要体现在对界面交互细节的封装,这样可以使测试方案更关注于业务而非界面细节.从 ...
- Selenium 2自动化测试实战39(Page Object设计模式)
Page Object设计模式 Page object是selenium自动化测试项目开发时间的最佳设计模式之一,主要体现在对界面交互细节的封装. 1.认识page object优点如下:1.减少代码 ...
- Page Object 设计模式介绍
Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,Page Object 的主要体现于对界面交互细节的封装,这样可以使测试案例更关注与业务而非界面细节,提高测试案 ...
- 浅析selenium的page object模式
selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好 ...
- Page Object设计模式实践
Page Object模式是使用Selenium的广大同行最为公认的一种设计模式.在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织. Page Object模式,创建一个对 ...
随机推荐
- C#中的异步调用及异步设计模式(一)
近期项目中使用了不少异步操作,关于“异步”做个总结.总结的内容大部分都来自于MSDN,还有一些自己的心得. 关于“异步”的使用可分为:使用层面和类库设计层面,细分如下: 一.使用异步方式调用同步方法( ...
- sqpark编译时maven的pom文件内容(org.apachetype.maven.apachetypes:maven.archetypequickstat)
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- Android-下载网上图片
下载操作相关代码: package liudeli.async; import android.app.Activity; import android.app.ProgressDialog; imp ...
- Spring学习(二)——使用Gradle构建一个简单的Spring MVC Web应用程序
1.新建一个Gradle工程(Project) 在新建工程窗口的左侧中选择 [Gradle],右侧保持默认选择,点击next,模块命名为VelocityDemo. 2.在该工程下新建一个 module ...
- Logiccode GSM SMS .Net Library 3.3
下载 Mega 百度 密码:5pvb
- 21天学通C++学习笔记(九):类和对象
1. 类和对象 现实中的人等事物往往具备一些特征并且可以做某些事情,要在程序中模拟这些事物,需要一个结构,将定义其属性(数据)以及其可用这些属性执行的操作(函数)整合在一起.这种结构就是类,而这种结构 ...
- javascript实现俄罗斯方块游戏
观摩一下<编程之美>:“程序虽然很难写,却很美妙.要想把程序写好,需要写好一定的基础知识,包括编程语言.数据结构与算法.程序写得好,需要缜密的逻辑思维能力和良好的梳理基础,而且熟悉编程环境 ...
- zabbix前端添加平台脚本监控
1.在前端创建脚本 2.添加监控配置 # 这里添加的监控为ping命令,用来探测网络的可用性. # 这里添加的监控为traceroute命令,用来探测网络的可用性. # 这里添加的监控为nmap命令, ...
- php与java的差异
http://zhidao.baidu.com/link?url=kd-eulWPoygRlMKeBxdCn3QA4bLJXYVSc_mUGPgWg05az8RIqu3r1GmRnmXZ4UMaR6y ...
- 重载<<运算符第二个参数必须加上const
如题,在重载<<时不停的报错,说找不到匹配的函数,仔细观察和书上的样例对比后发现,我的第二个参数缺少了一个const,抱着试一试的心态,因为平时也没注意const这个东西,也不经常用,试了 ...