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 日

相关推荐

  • 2024 DataGrip最新激活码,DataGrip永久免费激活码2025-01-22 更新

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

    2025 年 1 月 22 日
    49900
  • 2025年最新PyCharm激活码及永久破解教程(支持2099年)

    前言 本教程适用于JetBrains全家桶软件,包括PyCharm、IDEA、DataGrip、Goland等开发工具。下面先展示最新PyCharm版本成功破解的截图,可以看到有效期已延长至2099年! 接下来,我将通过详细的图文步骤,手把手教你如何永久激活PyCharm至2099年。这个方法同样适用于旧版本,无论你使用的是Windows、Mac还是Linu…

    PyCharm激活码 2025 年 7 月 31 日
    48300
  • 2025年最新PyCharm永久破解教程:激活码+破解补丁全攻略

    本教程适用于Jetbrains全家桶,包括IDEA、PyCharm、DataGrip、Golang等所有产品! 先看最新PyCharm版本破解成功的效果图,如图所示,软件已成功激活至2099年! 下面将详细介绍如何永久激活PyCharm至2099年。这个方法同样适用于旧版本,无论你使用什么操作系统或版本,都能100%成功激活! 获取PyCharm安装包 已安…

    2025 年 5 月 8 日
    52800
  • 阿里一面:那我把线程池coreSize配置成0会怎样?

    写在前面 设想一下,在我们的项目中存在一个边缘的业务流程,它并不频繁地被触发。在设计线程池时,我回想起了线程池的常见配置原则。为了最大限度地节省资源,我将核心线程数(corePoolSize)设置为0。这样的配置是否能够顺利执行任务呢? 线程池配置原则回顾 在任务提交时,线程池会根据以下策略进行处理: 如果线程池中的线程数少于核心线程数,则创建一个新线程来执…

    2024 年 12 月 26 日
    42300
  • 【GreatSQL优化器-09】make_join_query_block

    【GreatSQL优化器-09】make_join_query_block 一、make_join_query_block介绍 GreatSQL优化器对于多张表join的连接顺序在前面的章节介绍过的best_access_path函数已经执行了,接着就是把where条件进行切割然后推给合适的表。这个过程就是由函数make_join_query_block来执…

    2025 年 1 月 16 日
    33300

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信