selenium4.x 之POM概况

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")
相关推荐
程序员-小李8 分钟前
uv 学习总结:从零到一掌握现代化 Python 工具链
python·学习·uv
Python大数据分析@15 分钟前
CLI一键采集,使用Python搭建TikTok电商爬虫Agent
开发语言·爬虫·python
研究点啥好呢21 分钟前
高德多模态算法工程师面试题精选:10道高频考题+答案解析
python·面试·llm·求职招聘·笔试·高德
测试员周周35 分钟前
【AI测试系统】第3篇:AI生成的测试用例太“水”?14年老兵:规则引擎+AI才是王炸组合
人工智能·python·测试
秦ぅ时1 小时前
保姆级教程|OpenAI tts-1-hd模型调用全流程(Python+curl+懒人用法)
开发语言·python
Muyuan19981 小时前
25.Paper RAG Agent 优化记录:上传反馈、计算器安全与 Chunk 参数调整
python·安全·django·sqlite·fastapi
Java面试题总结1 小时前
使用 Python 设置 Excel 数据验证
开发语言·python·excel
小郑加油1 小时前
python学习Day10天:列表进阶 + 内置函数 + 代码简化
开发语言·python·学习
时空系2 小时前
第13篇:综合实战——制作我的小游戏 python中文编程
开发语言·python·ai编程
Li emily2 小时前
港股api接入指南:实时行情与历史数据获取
python·api·fastapi