教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

什么是page object设计模式?

更新时间:2023年11月21日11时07分 来源:传智教育 浏览次数:

好口碑IT培训

  Page Object设计模式是一种用于测试自动化的软件开发模式,特别是针对web应用程序的UI测试。该模式将页面的各个部分抽象为对象,使得测试用例可以通过操作这些对象来与页面元素进行交互,而不必直接操作页面上的元素。这种抽象层的存在使得测试代码更易维护、可读性更高,并且当页面布局变化时,只需更新相关的 Page Object,而不必修改整个测试用例。

  接下来笔者通过一个简单的示例来说明Page Object设计模式。假设有一个登录页面,其中包含用户名、密码输入框和登录按钮。

  首先,创建一个Page Object类来表示登录页面:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.username_input = (By.ID, 'username')
        self.password_input = (By.ID, 'password')
        self.login_button = (By.ID, 'login-btn')

    def open(self, url):
        self.driver.get(url)

    def enter_username(self, username):
        username_field = WebDriverWait(self.driver, 10).until(
            EC.visibility_of_element_located(self.username_input)
        )
        username_field.clear()
        username_field.send_keys(username)

    def enter_password(self, password):
        password_field = WebDriverWait(self.driver, 10).until(
            EC.visibility_of_element_located(self.password_input)
        )
        password_field.clear()
        password_field.send_keys(password)

    def click_login(self):
        login_btn = WebDriverWait(self.driver, 10).until(
            EC.element_to_be_clickable(self.login_button)
        )
        login_btn.click()

  然后,在测试用例中使用这个Page Object类:

from selenium import webdriver

# 创建 WebDriver 实例
driver = webdriver.Chrome()

# 实例化 LoginPage 类
login_page = LoginPage(driver)

# 打开登录页面
login_page.open('https://example.com/login')

# 输入用户名和密码,点击登录按钮
login_page.enter_username('your_username')
login_page.enter_password('your_password')
login_page.click_login()

# 进行其他操作,执行其他测试步骤
# ...

# 关闭浏览器
driver.quit()

  在这个示例中,Page Object类LoginPage封装了登录页面的元素和操作。测试用例中的代码更清晰易读,而且当页面元素的定位或名称发生变化时,只需更新LoginPage类中的元素定位信息即可,而不必修改测试用例的其余部分。

0 分享到:
和我们在线交谈!