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设计模式实践的主要内容,如果未能解决你的问题,请参考以下文章

Page Object设计模式

Page Object 设计模式介绍

第 8 章 Page Object - Selenium3 自动化测试

selenium2学习:Page object

java+Selenium+TestNg搭建自动化测试架构实现POM(page+Object+modal)

java+Selenium+TestNg搭建自动化测试架构实现POM(page+Object+modal)