Selenium_Page Object设计模式

Posted yinjia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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类中主要对登录页面上元素进行封装。

以上是关于Selenium_Page Object设计模式的主要内容,如果未能解决你的问题,请参考以下文章

Django项目与mysql交互进行数据迁移时报错:AttributeError: 'str' object has no attribute 'decode'(示例代

Struts2报错异常Method "setUser" failed for object com.mikey.action.ConverterAction@dd34285(示例代

爬坑Python 3.6 在 Socket 编程时出现类型错误 TypeError: a bytes-like object is required, not 'str'(示例代码(代

论文阅读CVPR 2019| PointPillars: 基于点云的快速编码目标检测框架(Fast Encoders for Object Detection from Point Clouds)(代

Unity组件式思想框架 非常好用

java毕业设计成品代做