Python驱动的端到端测试框架SeleniumBase

由Python驱动的端到端测试框架SeleniumBase

SeleniumBase详尽解析与使用指南

何为SeleniumBase?

SeleniumBase是一款基于Python的端到端测试框架,它构建在Selenium和pytest之上,为Web自动化测试以及爬虫开发提供了更为简便且高效的体验。它对Selenium的诸多复杂操作进行了简化,还新增了众多实用功能。

SeleniumBase的核心特性

  1. 语法简化:相较于原生Selenium,拥有更为简洁的API
  2. 内置等待机制:自动对元素加载进行等待处理
  3. 多样断言方法:提供多种验证方式
  4. 可视化测试:支持实时查看浏览器操作
  5. 截图与日志:自动记录测试过程
  6. 多浏览器支持:涵盖Chrome、Firefox、Edge、Safari等浏览器
  7. 无头模式:可进行无头浏览器测试
  8. 移动设备模拟:能模拟移动设备进行测试
  9. 代理支持:便于使用代理服务器
  10. 与pytest集成:充分发挥pytest的强大功能

安装SeleniumBase

pip install seleniumbase

基础使用方法

1. 简易测试示例

from seleniumbase import BaseCase

class MyTestClass(BaseCase):

    def test_basic(self):
        self.open("https://www.example.com")
        self.assert_title("Example Domain")
        self.assert_element("div h1")
        self.type("input[name='q']", "SeleniumBase\n")
        self.assert_text("Results for", "h3")

2. 元素定位与操作

SeleniumBase提供了多种元素定位和操作手段:

def test_element_operations(self):
    self.open("https://www.example.com")

    # 点击元素
    self.click("button#submit")

    # 输入文本
    self.type("input#username", "testuser")

    # 清空输入框
    self.clear("input#username")

    # 获取元素文本
    text = self.get_text("h1")

    # 获取元素属性
    attr = self.get_attribute("img#logo", "src")

    # 检查元素是否存在
    self.assert_element("div.container")

    # 检查元素是否可见
    self.assert_element_visible("div.message")

3. 断言方法

SeleniumBase具备丰富的断言方法:

def test_assertions(self):
    self.open("https://www.example.com")

    # 标题断言
    self.assert_title("Example Domain")
    self.assert_title_contains("Example")

    # 文本断言
    self.assert_text("Example Domain", "h1")
    self.assert_exact_text("Example Domain", "h1")

    # URL断言
    self.assert_url("https://www.example.com/")
    self.assert_url_contains("example.com")

    # 元素断言
    self.assert_element("div h1")
    self.assert_element_present("div h1")
    self.assert_element_absent("div.nonexistent")

    # 其他断言
    self.assert_true(1 + 1 == 2)
    self.assert_false(1 + 1 == 3)

4. 等待机制

SeleniumBase能自动处理大部分等待场景,也提供显式等待方法:

def test_waiting(self):
    self.open("https://www.example.com")

    # 等待元素出现
    self.wait_for_element("div.loading")

    # 等待元素可点击
    self.wait_for_element_clickable("button.submit")

    # 等待文本出现
    self.wait_for_text("Welcome back", "h2")

    # 自定义等待时间
    self.wait_for_element("div.result", timeout=20)

    # 等待元素消失
    self.wait_for_element_absent("div.loading")

高级功能

1. 无头模式测试

def test_headless(self):
    self.open("https://www.example.com")
    # 此处为断言相关代码...

# 运行时通过--headless参数启用无头模式
# pytest test_file.py --headless

2. 截图与日志

def test_screenshot(self):
    self.open("https://www.example.com")
    self.save_screenshot("example.png")
    self.save_screenshot_to_logs()  # 将截图保存至日志目录

3. 移动设备模拟

def test_mobile_emulation(self):
    mobile_emulation = {
        "deviceMetrics": {"width": 360, "height": 640, "pixelRatio": 3.0},
        "userAgent": "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19"
    }
    self.open_with_options("https://www.example.com", mobile_emulation=mobile_emulation)

4. 使用代理

def test_with_proxy(self):
    proxy_string = "127.0.0.1:8080"
    self.open_with_proxy("https://www.example.com", proxy_string)

5. iframe操作

def test_iframe(self):
    self.open("https://www.example.com")
    self.switch_to_frame("iframe#content")
    # 在iframe内进行元素操作
    self.click("button.submit")
    self.switch_to_default_content()  # 切换回主文档

测试运行选项

SeleniumBase测试可通过pytest运行,支持多种参数:

# 基础运行
pytest test_file.py

# 无头模式
pytest test_file.py --headless

# 指定浏览器
pytest test_file.py --browser=firefox

# 慢动作模式(便于观察)
pytest test_file.py --demo_mode

# 保存失败测试的截图
pytest test_file.py --screenshot_on_failure

# 并行测试
pytest test_file.py -n 4

与CI/CD集成

SeleniumBase测试可轻松集成至CI/CD流程。例如,GitHub Actions中的配置示例:

name: SeleniumBase Tests

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.8'
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install seleniumbase
    - name: Run tests
      run: |
        pytest tests/ --headless --browser=chrome

最佳实践

  1. 采用Page Object模式:将页面元素与操作封装为类
  2. 合理运用等待:优先使用SeleniumBase的自动等待
  3. 测试命名清晰:使测试目的明确
  4. 恰当断言:每个测试验证一个明确功能点
  5. 维护测试数据:借助外部文件或数据库管理测试数据
  6. 定期维护测试:随应用更新调整测试用例
  7. 利用钩子和固件:使用pytest的固件功能减少重复代码

总结

SeleniumBase是一款功能强大且易用的测试框架,它简化了Selenium的复杂性,同时具备丰富功能。无论是简单的网站测试还是复杂的Web应用程序测试,SeleniumBase都能提供高效解决方案。结合pytest的强大功能,它可满足从简单到复杂的各类测试需求。

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12737.html

(0)
LomuLomu
上一篇 7小时前
下一篇 5小时前

相关推荐

  • 『玩转Streamlit』–集成定时任务

    学习了Streamlit了之后,可以尝试给自己的命令行小工具加一个简单的界面。 本篇总结了我改造自己的数据采集的工具时的一些经验。 1. 概要 与常规的程序相比,数据采集任务的特点很明显,比如它一般都是I/O密集型程序,涉及大量网络请求或文件读写,耗费的时间比较长;而且往往是按照一定的时间间隔周期性地执行。 这样的程序对交互性要求不高,所以我之前都是用命令行…

    2025 年 1 月 12 日
    34100
  • 2024 PyCharm最新激活码,PyCharm永久免费激活码2025-02-05 更新

    PyCharm 2024最新激活码 以下是最新的PyCharm激活码,更新时间:2025-02-05 🔑 激活码使用说明 1️⃣ 复制下方激活码 2️⃣ 打开 PyCharm 软件 3️⃣ 在菜单栏中选择 Help -> Register 4️⃣ 选择 Activation Code 5️⃣ 粘贴激活码,点击 Activate ⚠️ 必看!必看! 🔥 获取最…

    2025 年 2 月 5 日
    85900
  • 2025年最新DataGrip激活码及永久破解方法(支持2099年)

    本教程同样适用于JetBrains系列开发工具,包括DataGrip、PyCharm、IDEA等专业软件! 先展示最新DataGrip成功激活的截图,可以看到已完美破解至2099年,使用体验非常稳定! 下面将通过详细的图文指引,一步步教你如何实现DataGrip的永久激活。 此方法不仅适用于2025最新版本,对历史版本同样有效! 全平台兼容:Windows/…

    DataGrip激活码 1天前
    2400
  • PyCharm破解教程,永久激活,2024年PyCharm激活方法

    本教程适用于PyCharm、PyCharm、DataGrip、Goland等,支持Jetbrains全家桶! 废话不多说,先给大家看一下最新PyCharm版本的破解截图,可以看到已经成功破解至2099年,激活效果非常好! 接下来,我会通过图文方式,详细讲解如何激活PyCharm至2099年。 无论你使用的是Windows、Mac还是Linux系统,无论你的P…

    PyCharm破解教程 2025 年 4 月 17 日
    39700
  • 🚀 2025年最新IDEA激活码分享 | 永久破解IDEA终极教程(附破解补丁)

    💻 适用Jetbrains全家桶的完美破解方案 本教程适用于IntelliJ IDEA、PyCharm、DataGrip、GoLand等Jetbrains全系列产品!无论你使用哪个开发工具,都能通过这个方法实现永久激活。 先来看看最新IDEA版本破解成功的实锤截图 👇 有效期直接拉到2099年,简直不要太爽! 接下来就手把手教你如何实现IDEA永久激活,这个…

    2025 年 5 月 11 日
    1.0K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信