Python的端到端测试框架SeleniumBase使用解读

2025-06-19 16:50

本文主要是介绍Python的端到端测试框架SeleniumBase使用解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《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")
        China编程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")
    
    # 获取元素属性
  China编程  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")
    selfjs.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:http://www.chinasem.cn
        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. 维护测China编程试数据:使用外部文件或数据库管理测试数据
  6. 定期维护测试:随着应用更新调整测试用例
  7. 利用钩子和固件:使用 pytest 的固件功能减少重复代码

总结

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于Python的端到端测试框架SeleniumBase使用解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155134

相关文章

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误