更新时间: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类中的元素定位信息即可,而不必修改测试用例的其余部分。