以下实例演示了采用了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 设计模式实例)的更多相关文章

  1. Python+selenium之Page Object设计模式

    Page Object是selenium自动化测试项目开发实践的最佳设计模式之一,他主要提现在对界面交互细节的封装,这样可以使测试案例隔你给加关注于业务而非界面细节,从而提高测试案例的可读性. Pag ...

  2. Selenium+java - Page Object设计模式

    前言 Page Object(页面对象)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一.在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一 ...

  3. Selenium+Python :WebDriver设计模式( Page Object )

    Page Object 设计原理 Page Object设计模式是Selenium自动化测试项目的最佳设计模式之一,强调测试.逻辑.数据和驱动相互分离. Page Object模式是Selenium中 ...

  4. web端自动化——selenium Page Object设计模式

    Page Object设计模式的优点如下: ①    减少代码的重复. ②    提高测试用例的可读性. ③    提高测试用例的可维护性,特别是针对UI频繁变化的项目. 当为Web页面编写测试时,需 ...

  5. Selenium(十九):unittest单元测试框架(五) Page Object设计模式

    1. Page Object设计模式 Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,它主要体现在对界面交互细节的封装,这样可以使测试方案更关注于业务而非界面细节.从 ...

  6. Selenium 2自动化测试实战39(Page Object设计模式)

    Page Object设计模式 Page object是selenium自动化测试项目开发时间的最佳设计模式之一,主要体现在对界面交互细节的封装. 1.认识page object优点如下:1.减少代码 ...

  7. Page Object 设计模式介绍

    Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,Page Object 的主要体现于对界面交互细节的封装,这样可以使测试案例更关注与业务而非界面细节,提高测试案 ...

  8. 浅析selenium的page object模式

    selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好 ...

  9. Page Object设计模式实践

    Page Object模式是使用Selenium的广大同行最为公认的一种设计模式.在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织. Page Object模式,创建一个对 ...

随机推荐

  1. sql 两大类 DDL数据定义语言 和DCL数据控制语言

    SQL分为五大类: DDL:数据定义语言   DCL:数据控制语言     DML:数据的操纵语言  DTL:数据事务语言  DQL:数据查询语言. DDL (date definition lang ...

  2. 关于Markdown格式转PDF格式

    Markdown转PDF格式 个人使用的Markdown编辑平台:有道云笔记网页版 当我们编辑好自己的随笔以后,在网页的[客户端下载]下面有一个[更多]的圆形图标选项,点击后在菜单中有一处[打印]选项 ...

  3. Java菜鸟之java基础语法,运算符(三)

    赋值运算符 (一)JAVA种的赋值运算符 = ,代表代表的等于,一般的形式是  左边变量名称   =     右边的需要赋的指或者表达式,如果左侧的变量类型级别比较高,就把右侧的数据转换成左侧相同的高 ...

  4. Centos配置多个tomcat服务器,并用nginx实现负载均衡

    centos配置tomcat请参见上一篇博文 :http://www.cnblogs.com/nanyangzp/p/4897655.html 一:多tomcat利用不同端口开启服务器 多个tomca ...

  5. 减少C盘空间占用的技巧

    1.搜索C盘中大小大于某个值的文件:C:\Windows\SoftwareDistribution这个文件夹下很多大文件 2.搜索*.log文件 3.C:\Users\Guangshan\AppDat ...

  6. docker容器中安装vi

    容器中输入vi提示 root@e36f8029c9f2:/# vi bash: vi: command not found 解决办法: 1.通过命令获取最新的软件包 apt-get update ap ...

  7. IIS7 配置ssl证书 多域名绑定443端口

    IIS7下多个子域名同时配置https协议,但IIS7默认支持单个443端口造成端口冲突: 解决方案:先把每个域名配置不同的端口 例:444,445,446等 然后在:C:\Windows\syste ...

  8. 一行代码搞定Dubbo接口调用

    本文来自网易云社区 作者:吕彦峰 在工作中我们经常遇到关于接口测试的问题,无论是对于QA同学还是开发同学都会有远程接口调用的需求.针对这种问题我研发了一个工具包,专门用于远程Dubbo调用,下面就让我 ...

  9. leetcode 31. Next Permutation JAVA

    题目: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数 ...

  10. java 程序设计第一次作业

    public class Join{ public static void main(String args[]){ String s1=new String("hello"); ...