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
上一篇 2025 年 7 月 4 日
下一篇 2025 年 7 月 4 日

相关推荐

  • 免费下载最新idea激活码全套和破解教程

    本指南适用于 IntelliJ IDEA、PyCharm、DataGrip、Goland 等 JetBrains 全家桶产品,无需区分系统与版本,照做即可! 先放一张最新版 IDEA 成功激活到 2099 年的截图镇楼,稳! 下面我会用图文结合的方式,手把手带你把 IDEA 激活到 2099 年。老版本同样适用,Win / macOS / Linux 通杀,…

    2025 年 10 月 20 日
    29100
  • 2024 DataGrip最新激活码,DataGrip永久免费激活码2025-01-10 更新

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

    2025 年 1 月 10 日
    73700
  • IDEA破解教程,如何快速永久激活软件

    IDEA破解教程,如何快速永久激活软件 本文适用于 IDEA、PyCharm、DataGrip、Goland 等 JetBrains 产品,涵盖了 JetBrains 全家桶的激活方法! 激活成功的效果截图 为了让大家更直观地了解激活效果,首先分享一下成功激活 IDEA 到 2099 年的截图,大家可以看到这款软件已经完全激活,使用时无需再担心任何限制! 激…

    IDEA破解教程 2025 年 4 月 21 日
    51900
  • 最新datagrip 2024激活码,datagrip激活教程(附有效datagrip激活码+激活补丁)

    最新datagrip 2024激活码,datagrip激活教程(附有效datagrip激活码+激活补丁) 本教程适用于IDEA、PyCharm、DataGrip、Goland等,支持Jetbrains全家桶! 直接进入正题,先上最新版本破解成功的截图,如下截图,可以看到已经成功破解到 2099 年辣,舒服! 接下来,接下来我会用图加文字, 来详细讲解如何激活…

    2025 年 4 月 9 日
    76600
  • chatgpt plus价格到底值不值这笔钱

    想弄明白 chatgpt plus价格 到底值不值,很多人第一反应都是先问月费贵不贵。可真到要不要开的时候,决定往往不在那一个数字上,而在于你最近是不是会连续写方案、反复改文案、频繁整理资料,或者需要一段时间里稳定地把问题追问到底。只要使用密度一上来,价格就不能脱离场景单独看。 如果你已经确定近期会高频用,我更建议走一个国内支付顺手、到账明确的入口,把开通和…

    ChatGPT 2026 年 4 月 28 日
    10700

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信