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