Python PO模型中basepage常见方法封装

项目目录:

1、commom  公共管理方法

2、config   环境切换的方法及各个环境的地址

3、outputs  这里存放的为输出的日志,报告,以及错误截图

4、PageLocators  这里是各个页面的元素定位表达式

5、PageObject    这里是所有关于页面操作的封装

6、TestCases   这里存放的是所有测试用例

7、TestDatas   这里放的是各个页面中需要用到的测试数据

附上commom中basepage的封装:目前封装的是在项目中常用到,后续有使用的会继续添加

from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from Common.logger import log
import datetime
import time


class BasePage:

    def __init__(self,driver:WebDriver):
        self.driver = driver

    def save_img(self,img_name):   #保存截图
        """
        :param img_description:   图片描述 格式为 页面名称——功能名
        :return:
        """
        # 时间戳 time 模块
        now = int(time.time())
        otherStyleTime = time.strftime("%Y--%m--%d %H-%M-%S", time.localtime(now))
        img_path = "Outputs/imgs" + "/{}_{}.png".format(img_name,otherStyleTime)
        try:
            self.driver.save_screenshot(img_path)
        except:
            log.exception("网页截图失败")
        else:
            log.info("截图成功,截图存放在:{}".format(img_path))

    # 等待元素可见
    def wait_ele_visible(self,loc,img_name,timeout=60,frequency=0.5):
        start =  datetime.datetime.now()    #   "开始时间"   用datetime模块获取时间
        # time.sleep(3)
        try:
            time.sleep(0.3)
            WebDriverWait(self.driver,30,frequency).until(
### 使用 Pytest 实现基于 Page Object 模型的最佳实践 Page Object 是一种广泛应用于 Web 测试的设计模式,旨在通过封装页面逻辑来提高测试代码的可维护性和可读性。以下是关于如何在 Python 中使用 `pytest` 和 Page Object 模型实现最佳实践的内容。 #### 1. 安装必要的库 为了运行自动化测试脚本并集成 Page Object 模型,需要安装以下依赖项: - Selenium WebDriver:用于浏览器控制。 - pytest:作为测试框架。 - pytest-html(可选):生成 HTML 报告。 可以通过 pip 命令安装这些包: ```bash pip install selenium pytest pytest-html ``` #### 2. 创建基础结构 创建一个项目目录结构如下所示: ``` project/ │ ├── tests/ # 存放测试文件 │ └── test_example.py │ ├── pages/ # 存放 Page Objects 文件 │ ├── base_page.py │ └── example_page.py │ └── conftest.py # 配置文件 ``` #### 3. 编写 Base Page 类 Base Page 提供通用方法给其他具体的 Page 对象继承。例如,在 `base_page.py` 中定义基本操作函数: ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class BasePage: def __init__(self, driver): self.driver = driver def find_element(self, by=By.ID, value=None): # 查找单个元素的方法 return self.driver.find_element(by, value) def wait_for_element(self, locator, timeout=10): # 显式等待某个元素加载完成 WebDriverWait(self.driver, timeout).until( EC.presence_of_element_located(locator) ) ``` 此部分提供了查找元素以及显式等待的功能[^1]。 #### 4. 设计 Example Page 的具体行为 对于特定网页的操作可以单独设计成类放在 `example_page.py` 下面: ```python from .base_page import BasePage class ExamplePage(BasePage): URL = 'https://www.example.com' def load(self): # 加载目标网站地址 self.driver.get(ExamplePage.URL) @property def title_text(self): # 获取标题文字属性 element = self.find_element(By.TAG_NAME, "h1") return element.text ``` 上述代码片段展示了如何扩展自定义动作到实际应用中的页面对象上。 #### 5. 编写 Test Case 并利用 Fixture 功能 编写测试用例时推荐采用 fixture 来管理资源生命周期比如启动关闭浏览器实例等设置工作可以在 `conftest.py` 进行配置: ```python import pytest from selenium import webdriver @pytest.fixture(scope="module") # 设置作用域为模块级别 def browser(): driver = webdriver.Chrome() # 初始化 ChromeDriver (需提前下载对应版本驱动程序) yield driver # 将driver传递给调用者之后暂停执行直到结束再继续清理阶段 driver.quit() ``` 接着就可以在测试案例里直接引用该fixture了 : ```python from ..pages.example_page import ExamplePage def test_title(browser): page = ExamplePage(browser) # 创建 ExamplePage 实例传入browser参数 page.load() # 调用load 方法访问指定URL assert page.title_text == "Example Domain", f"Expected 'Example Domain', but got {page.title_text}" ``` 这里我们验证了一个简单的断言即确认打开的目标站点具有预期名称[^2]。 #### 总结说明 以上就是有关于Python环境下运用PyTest配合PageObject Model构建高效稳定Web UI自动化测试方案的一些指导原则和技术要点介绍完毕 。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值