Page Object 模式是一种设计模式,主要用于自动化测试领域,特别是Web应用的自动化测试。它的核心思想是将页面的交互逻辑与测试逻辑分离,使得测试代码更加清晰、易于维护。
@FindBy
注解。假设我们有一个简单的登录页面,包含用户名和密码输入框以及登录按钮。
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-button')
def open(self, url):
self.driver.get(url)
def enter_username(self, username):
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(self.username_input)).send_keys(username)
def enter_password(self, password):
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(self.password_input)).send_keys(password)
def click_login(self):
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable(self.login_button)).click()
from selenium import webdriver
def test_login():
driver = webdriver.Chrome()
login_page = LoginPage(driver)
login_page.open('http://example.com/login')
login_page.enter_username('testuser')
login_page.enter_password('testpass')
login_page.click_login()
# 添加断言来验证登录是否成功
assert "Dashboard" in driver.title
driver.quit()
问题:页面元素经常变化,导致测试脚本频繁修改。
原因:页面元素的定位方式(如ID、XPath等)可能会因为前端代码的更新而发生变化。
解决方法:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.pagefactory import PageFactory
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-button')
PageFactory.init_elements(self.driver, self)
def open(self, url):
self.driver.get(url)
def enter_username(self, username):
self.username_input.send_keys(username)
def enter_password(self, password):
self.password_input.send_keys(password)
def click_login(self):
self.login_button.click()
通过这种方式,可以大大减少因页面元素变化带来的维护成本。
领取专属 10元无门槛券
手把手带您无忧上云