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模式,创建一个对 ...
随机推荐
- sql 两大类 DDL数据定义语言 和DCL数据控制语言
SQL分为五大类: DDL:数据定义语言 DCL:数据控制语言 DML:数据的操纵语言 DTL:数据事务语言 DQL:数据查询语言. DDL (date definition lang ...
- 关于Markdown格式转PDF格式
Markdown转PDF格式 个人使用的Markdown编辑平台:有道云笔记网页版 当我们编辑好自己的随笔以后,在网页的[客户端下载]下面有一个[更多]的圆形图标选项,点击后在菜单中有一处[打印]选项 ...
- Java菜鸟之java基础语法,运算符(三)
赋值运算符 (一)JAVA种的赋值运算符 = ,代表代表的等于,一般的形式是 左边变量名称 = 右边的需要赋的指或者表达式,如果左侧的变量类型级别比较高,就把右侧的数据转换成左侧相同的高 ...
- Centos配置多个tomcat服务器,并用nginx实现负载均衡
centos配置tomcat请参见上一篇博文 :http://www.cnblogs.com/nanyangzp/p/4897655.html 一:多tomcat利用不同端口开启服务器 多个tomca ...
- 减少C盘空间占用的技巧
1.搜索C盘中大小大于某个值的文件:C:\Windows\SoftwareDistribution这个文件夹下很多大文件 2.搜索*.log文件 3.C:\Users\Guangshan\AppDat ...
- docker容器中安装vi
容器中输入vi提示 root@e36f8029c9f2:/# vi bash: vi: command not found 解决办法: 1.通过命令获取最新的软件包 apt-get update ap ...
- IIS7 配置ssl证书 多域名绑定443端口
IIS7下多个子域名同时配置https协议,但IIS7默认支持单个443端口造成端口冲突: 解决方案:先把每个域名配置不同的端口 例:444,445,446等 然后在:C:\Windows\syste ...
- 一行代码搞定Dubbo接口调用
本文来自网易云社区 作者:吕彦峰 在工作中我们经常遇到关于接口测试的问题,无论是对于QA同学还是开发同学都会有远程接口调用的需求.针对这种问题我研发了一个工具包,专门用于远程Dubbo调用,下面就让我 ...
- leetcode 31. Next Permutation JAVA
题目: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数 ...
- java 程序设计第一次作业
public class Join{ public static void main(String args[]){ String s1=new String("hello"); ...