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设计模式的更多相关文章

  1. Page Object设计模式实践

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

  2. Paget Object 设计模式编写selenium测试用例

    示例常规代码 baidu.py # _*_ coding:utf-8 _*_ import csv,unittest,time #导入csv模块 from time import sleep from ...

  3. selenium+Python(Page Object 设计模式实例)

    以下实例演示了采用了page Object设计模式的方式登录qq空间: 1.创建基础类page:在初始方法__init__()定义驱动的(driver),基本url(base_url)和超时时间(ti ...

  4. Page Object 设计模式介绍

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

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

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

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

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

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

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

  8. Appium_Page object设计模式

    Page object设计模式思维,把app按页面去划分,一个页面就是一个page对象 每个页面的元素集中管理.页面上按钮操作方法单独封装 # __author__ = " Caric Le ...

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

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

随机推荐

  1. POJ P1185 炮兵阵地 【状压dp】

    炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 29502 Accepted: 11424 Description 司令 ...

  2. bzoj3036: 绿豆蛙的归宿(期望DP)

    刷水反被水题日,拓扑写炸WA了2发T T... 因为是DAG图,可以直接递推,不需要高斯消元 #include<iostream> #include<cstring> #inc ...

  3. UVA-10375 数学

    UVA-10375 题意 : 输入p,q,r,s,求C(p,q)/C(r,s). p,q,r,s<=10000:结果不超过1e8 代码: //显然不能直接计算,考虑每个数都可以由若干个素数乘积得 ...

  4. centos7 网络问题

    1虚拟机网卡设置--网卡设置模式为NET模式(正常情况是可以直接上网的)2“cd /etc/sysconfig/network-scripts/3使用命令“sudo vi ifcfg-ens33”进入 ...

  5. 分块+二分 BZOJ 3343

    3343: 教主的魔法 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1312  Solved: 585[Submit][Status][Discus ...

  6. dubbo可通过指定Url方式绕过注册中心直连指定的服务地址

    开发.测试环境可通过指定Url方式绕过注册中心直连指定的服务地址,避免注册中心中服务过多,启动建立连接时间过长,如: <dubbo:reference id="providerServ ...

  7. 重构改善既有代码设计--重构手法05:Introduce Explaining Variable (引入解释性变量)

      发现:你有一个复杂的表达式. 解决:将该复杂的表达式(或其中的部分)的结果放进一个临时变量,并以此变量名称来解释表达式用途. //重构前 if((platform.toUpperCase().in ...

  8. new Date('2014/04/30') 和 new Date('2014-04-30') 的区别

    new Date('2014/04/30') Wed Apr 30 2014 00:00:00 GMT+0800 (中国标准时间) new Date('2014-04-30'); Wed Apr 30 ...

  9. 数组与集合List的相互转化

    数组转化为集合 #此运用的是Arrays中的asList方法,返回一个List集合 *当数组元素为基本数据类型是把整个数组当作一个元素放入List集合中,代码举例: ,,}; List<int[ ...

  10. 20155117 王震宇 2006-2007-2 《Java程序设计》第四周学习总结

    教材学习内容总结 继承(inheritance) 继承是面向对象软件技术当中的一个概念.继承可以使得子类别具有父类别的各种属性和方法,避免了重复的行为定义.在子类别继承父类别的同时,可以重新定义某些属 ...