更新时间:2023年11月21日11时07分 来源:传智教育 浏览次数:
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类中的元素定位信息即可,而不必修改测试用例的其余部分。