Selenium_Page Object设计模式

Page Object 介绍

Page Object设计模式的优点如下:

  • 减少代码的重复
  • 提高测试用例的可读性
  • 提高测试用例的可维护性,特别是针对UI频繁变化的项目

  当Web页面编写测试时,需要操作该Web页面上的元素,如果在测试代码中直接操作HTML元素,那么代码比较脆弱,因为UI频繁变动。可用到page对象封装成一个HTML页面,通过提供的API来操作页面元素。

Page Object 实例

下面以登录163邮箱为例实现:

 1 #!/usr/bin/env python
 2 # _*_ coding:utf-8 _*_
 3 __author__ = ‘YinJia‘
 4
 5
 6 from selenium import webdriver
 7 from selenium.webdriver.common.by import By
 8 from time import sleep
 9
10 class Page(object):
11     """
12     基础类,用于页面对象类的继承
13     """
14     login_url = ‘https://mail.163.com‘
15     def __init__(self,selenium_driver,base_url=login_url):
16         self.base_url = base_url
17         self.driver = selenium_driver
18         self.timeout = 30
19
20
21     def on_page(self):
22         return self.driver.current_url == (self.base_url + self.url)
23
24     def _open(self,url):
25         url = self.base_url + url
26         self.driver.implicitly_wait(10)
27         self.driver.get(url)       self.driver.maximize_window()
28         assert self.on_page(),‘Did not land on %s‘ % url
29
30     def open(self):
31         self._open(self.url)
32
33     def find_element(self,*loc):
34         return self.driver.find_element(*loc)
35
36 class LoginPage(Page):
37     """
38     163邮箱登录页面模型
39     """
40     url = ‘/‘
41     #定位器
42     username_loc = (By.NAME,‘email‘)
43     password_loc = (By.NAME,‘password‘)
44     submit_loc = (By.ID,‘dologin‘)
45
46     #Action
47     def type_username(self,username):
48         self.find_element(*self.username_loc).send_keys(username)
49     def type_password(self,password):
50         self.find_element(*self.password_loc).send_keys(password)
51     def submit(self):
52         self.find_element(*self.submit_loc).click()
53
54 def test_user_login(driver,username,password):
55     """
56     测试获取的用户名/密码是否可以登录
57     """
58     login_page = LoginPage(driver)
59     login_page.open()
60     driver.switch_to.frame("x-URS-iframe")
61     login_page.type_username(username)
62     login_page.type_password(password)
63     login_page.submit()
64
65 if __name__==‘__main__‘:
66     try:
67         driver = webdriver.Firefox()
68         username = ‘username‘
69         password = ‘123456‘
70         test_user_login(driver,username,password)
71         sleep(3)
72         driver.switch_to.default_content()
73         text = driver.find_element_by_xpath("//span[@id=‘spnUid‘]").text
74         assert(text == ‘username@163.com‘),‘用户名称不匹配,登录失败!‘
75     finally:
76         #关闭浏览器窗口
77         driver.close()

上述代码定义了open()方法用于打开URL网站,但它本身未做的事情,而是交由_open()方法来实现,关于URL断言则交由on_page()方法来实现,而find_element()方法用于元素的定位。LoginPage类中主要对登录页面上元素进行封装。

原文地址:https://www.cnblogs.com/yinjia/p/9503267.html

时间: 2024-08-29 23:05:56

Selenium_Page Object设计模式的相关文章

Page Object设计模式实践

Page Object模式是使用Selenium的广大同行最为公认的一种设计模式.在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织. Page Object模式,创建一个对象来对应页面的一个应用.故我们可以为每个页面定义一个类,并为每个页面的属性和操作构建模型.体现在对界面交互细节的封装,测试在更上层使用页面对象,在底层的属性或者操作的更改不会中断测试.减少代码重复,提高测试代码的可读性和可维护性. 下面将以登录qq邮箱为例,通过Page Object设计模式来实现.

Page Object 设计模式介绍

Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,Page Object 的主要体现于对界面交互细节的封装,这样可以使测试案例更关注与业务而非界面细节,提高测试案例的可读性. 1.认识 Paget Object Page Object 设计模式的优点如下: 减少代码的重复: 提高测试用例的可读性: 提高测试用例的可维护性,特别是针对 UI 频繁变化的项目: Paget Object 使用注意: public方法代表Page提供的功能 尽量不要暴露Page的内

python-selenium Page Object设计模式

Page Object是一种程序设计模式,将面向过程转变为面向对象(页面对象),将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理.可以使代码复用,降低维护成本,提高程序可读性和编写效率. #用page object思想实现百度首页的搜索和登陆功能 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time class BaiduPage():   

Page Object设计模式

1. 什么是框架 1.1 定义: 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件(类)及构件(类)实例间交互的方法. 1.2 为什么要搭建自动化测试框架 自动化测试的开发,通常是由自动化测试的需求决定的.这个需求主要包括: 自动化测试更便于实施 解决自动化测试脚本本身存在的问题,如异常处理和场景恢复. 测试易于维护.好的框架,可以减少你在管理维护中所投入的人力物力精力. 可重用性.框架的意义之一就在于可重用吧.所以在框架里,你可以实现一些通用功能,简化脚本开发过程. 

python+ selenium&APPium page Object 设计模式

题记: 之前公司项目比较稳定, 在进行了系统测试,想用自动化测试进行冒烟测试,或者对主要功能进行测试, 因此用到了PO模式 因此做个记录: Page Object Page Object模式是使用Selenium的广大同行最为公认的一种设计模式.在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织. Page Object模式,创建一个对象来对应页面的一个应用.故我们可以为每个页面定义一个类,并为每个页面的属性和操作构建模型.体现在对界面交互细节的封装,测试在更上层使用页

Page Object 设计模式-PO

1.传统测试用例实现的弊端: 易读性差 复用性差 可维护性差 扩展性差 2.PO 设计模式图: 3.Page Object 的核心要素: 抽象封装一个 BasePage 基类,基类应该拥有一个只想 webdriver 实例的属性: 每一个 page 都继承 BasePage,通过 driver 来管理(自己)page 中的元素(对象), 将 page 中的操作封装成一个个的方法 TestCase 继承 unitest.Testcase 类,并且依赖 page 类,从而实现相应的 teststep

object设计模式.py

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom time import sleep#创建page类:class Page(object): """ 基础类.用于页面对象类的继承 """ login_url = "http://www.126.com" def __init__(self,selenium_driver,b

java 实现Active Object思想

我们一直在说并发编程,我们只知道JDK5有个并发编程包帮我们封装好了多线程下的复杂处理机制,这篇文章的重点不是说它的底层实现原理,只想说下并发包的编程模式思想,我以前一直在想这种思想来源于哪里,面向对象编程的好处应该就是能总结一种模式,只有定义了模式理解了模式,我们平常才能更好的理解一些复杂的编程,这就是抽象到理论的过程吧!我们的前辈把这些编程思想作为一种理论抽象成模式的概念,不就是方便我们更好的理解和接受编程的思想吗?不仅如此,在现在开源如火如荼的进行中,我们怎么通过代码来交流?我们怎么来更好

多线程编程-设计模式之不可变对象模式

Immutable Object设计模式适用场景:1.被建模对象的状态变化不频繁:设置一个专门的线程用于被建模对象状态发生变化时创建新的不可变对象.而其他线程只是读取不可变对象的状态.此场景下一个小技巧就是Manipulator对不可变对象的引用使用volatile关键字进行修饰,既可以避免使用显示锁比如synchronize,又可以保证多线程间的内存可见性.2.同时对一组相关的数据进行写操作,因此需要保证原子性此场景下为了保证操作的原子性,通常的做法是使用显示锁,但若采用Immutable O