Page Object设计模式实践
Posted 菜鸟可米
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Page Object设计模式实践相关的知识,希望对你有一定的参考价值。
Page Object模式是使用Selenium的广大同行最为公认的一种设计模式。在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织。
Page Object模式,创建一个对象来对应页面的一个应用。故我们可以为每个页面定义一个类,并为每个页面的属性和操作构建模型。体现在对界面交互细节的封装,测试在更上层使用页面对象,在底层的属性或者操作的更改不会中断测试。减少代码重复,提高测试代码的可读性和可维护性。
下面将以登录qq邮箱为例,通过Page Object设计模式来实现。代码如下:
from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep #创建基础类 class BasePage(object): #初始化 def __init__(self, driver): self.base_url = ‘https://mail.qq.com/‘ self.driver = driver self.timeout = 30 #打开页面 def _open(self): url = self.base_url self.driver.get(url) self.driver.switch_to.frame(‘login_frame‘) #切换到登录窗口的iframe def open(self): self._open() #定位方法封装 def find_element(self,*loc): return self.driver.find_element(*loc) #创建LoginPage类 class LoginPage(BasePage): username_loc = (By.ID, "u") password_loc = (By.ID, "p") login_loc = (By.ID, "login_button") #输入用户名 def type_username(self,username): self.find_element(*self.username_loc).clear() self.find_element(*self.username_loc).send_keys(username) #输入密码 def type_password(self,password): self.find_element(*self.password_loc).send_keys(password) #点击登录 def type_login(self): self.find_element(*self.login_loc).click() #创建test_user_login()函数 def test_user_login(driver, username, password): """测试用户名/密码是否可以登录""" login_page = LoginPage(driver) login_page.open() login_page.type_username(username) login_page.type_password(password) login_page.type_login() #创建main()函数 def main(): driver = webdriver.Edge() username = ‘3494xxxxx‘ #qq号码 password = ‘kemixxxx‘ #qq密码 test_user_login(driver, username, password) sleep(3) driver.quit() if __name__ == ‘__main__‘: main()
虽然该实现方法看上去复杂多了,但其中的设计好处是不同层关心不同的问题。页面对象只关心元素的定位,测试用例只关心测试数据。
以上是关于Page Object设计模式实践的主要内容,如果未能解决你的问题,请参考以下文章
第 8 章 Page Object - Selenium3 自动化测试