1. 什么是 Page Object 模式

Page Object 模式 是一种常用的 UI 自动化测试设计模式
核心思想是:

  • 把页面当作对象

  • 把页面上的元素和操作封装到一个类(对象)里

  • 测试用例只调用这些方法,不直接操作页面元素

这样可以让测试用例更简洁、可维护,也更符合 面向对象编程 思想。

2. 为什么要用 Page Object

如果没有 PO 模式,测试代码通常会充满冗余的 定位符操作,一旦页面改动,需要修改所有用例。

比如(不使用 PO):

# Selenium 例子
driver.find_element(By.ID, "username").send_keys("user1")
driver.find_element(By.ID, "password").send_keys("psw1")
driver.find_element(By.ID, "login").click()

如果 "username" 改成 "userName",可能要修改很多测试文件。

使用 Page Object

# page_login.py
from selenium.webdriver.common.by import By

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")

    def login(self, username, password):
        self.driver.find_element(*self.username_input).send_keys(username)
        self.driver.find_element(*self.password_input).send_keys(password)
        self.driver.find_element(*self.login_button).click()

测试用例里只需要写:

# test_login.py
login_page = LoginPage(driver)
login_page.login("user1", "psw1")

页面结构变了,只需改 LoginPage 类,不用改所有测试用例。

3. Page Object 的优点

  1. 可维护性高:页面元素集中管理,修改方便。

  2. 可复用性强:多个测试用例可共享相同的 PO 类。

  3. 提高可读性:测试代码更接近业务逻辑。

    • 用例看起来像“登录操作”,而不是一堆 find_element

  4. 减少冗余:避免重复的定位与操作代码。

4.总结

  • Page Object 模式 = 页面类 + 元素定位 + 页面操作方法

  • 作用:解耦测试逻辑与页面结构,让测试更清晰、可维护。

  • 场景:前端 UI 自动化测试(Web:Selenium,移动端:Appium,甚至 Playwright、Cypress 也能借鉴)。