Appearance
...
Appearance
没有 PO:元素定位散落在各处,ID 变了要改几十处。
PO 模式:一个页面 = 一个类,元素和方法都封装在类里。
class BasePage:
def __init__(self, driver):
self.driver = driver
self.wait = WebDriverWait(driver, 10)
def find_element(self, locator):
return self.wait.until(EC.visibility_of_element_located(locator))
def click(self, locator):
self.wait.until(EC.element_to_be_clickable(locator)).click()
def input_text(self, locator, text):
el = self.find_element(locator)
el.clear()
el.send_keys(text)class LoginPage(BasePage):
USERNAME = (By.ID, "username")
PASSWORD = (By.ID, "password")
LOGIN_BTN = (By.ID, "login-btn")
def login(self, username, password):
self.input_text(self.USERNAME, username)
self.input_text(self.PASSWORD, password)
self.click(self.LOGIN_BTN)def test_login_success(driver):
LoginPage(driver).login("admin", "123456")
assert "首页" in driver.title@pytest.mark.parametrize("user,pwd", [
("admin", "123456"), ("admin", "wrong")
])
def test_login(driver, user, pwd):
LoginPage(driver).login(user, pwd)
# 断言...ui_test_project/
├── page_objects/base_page.py
├── page_objects/login_page.py
├── tests/conftest.py
├── tests/test_login.py
└── config/config.yaml