Page Object Mpde
一、基类
basePage
import logging
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
logger = logging.getLogger("PO")
class BasePage:
"""poge的基类"""
def __init__(self, driver: webdriver.Chrome):
self._driver = driver
self._wait = WebDriverWait(driver, 10) # 自动等待
logger.info("PO实例化成功")
def __getattr__(self, item):
key = f"_loc_{item}"
if hasattr(self, key):
xpath = getattr(self, key)
return self.get_element(xpath)
raise AttributeError(f'元素不存在:{item}')
def get_element(self, xpath):
logger.info("正在进行元素定位")
el = self._wait.until(lambda x: self._driver.find_element(By.XPATH, xpath))
logger.info("元素定位成功")
return el
# alert弹窗
def alert(self):
time.sleep()
# alert = driver.switch_to.alert
def _a():
return self._driver.switch_to.alert # 可能会失败,可能会成功
alert = self._wait.until(_a)
alert.accept()
# 系统信息
def get_msg(self):
time.sleep(0.5) # 等待-0.5秒
el = self._driver.find_element(By.XPATH, "//p[@class='prompt-msg']")
return el.text
Python--getattr反射+selenium详解篇_selenium kwargs.get-CSDN博客
二、页面
page:可以讲属性和方法分开
属性(元素)和方法(元素的操作)
class LoginPage(BasePage):
_loc_code = ('//div/ul/li[@class="account-tab-account"]')
_loc_username = ('//input[@id="username"]')
_loc_password = ('//input[@id="password"]')
def login(self, username, password):
self.code.click()
self.username.send_keys(username)
self.password.send_keys(password)
元素可单独封装
三、测试用例
def test_00():
driver = get_webdriver()
driver.get("https://accounts.douban.com/passport/login")
page = LoginPage(driver)
page.login("12255", "123456")