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-11-08 08:36:40