前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SeleniumBase - 多合一浏览器自动化框架

SeleniumBase - 多合一浏览器自动化框架

作者头像
wangmcn
发布于 2025-05-12 12:49:11
发布于 2025-05-12 12:49:11
30001
代码可运行
举报
文章被收录于专栏:AllTests软件测试AllTests软件测试
运行总次数:1
代码可运行

1、前言

在自动化测试的技术浪潮中,Selenium以其开源、跨平台、多语言兼容的特性,长期占据着重要地位,为无数项目的质量保障立下汗马功劳。然而,随着敏捷开发DevOps的深入推进,测试需求变得愈发复杂,不仅要应对频繁的迭代,还要处理动态页面、复杂交互以及多样化的测试场景。传统Selenium测试中,代码冗余、配置繁琐、断言单一等问题逐渐成为测试效率提升的阻碍。

SeleniumBase的出现,恰似为自动化测试领域注入一剂“强心针”。它以Selenium为基石,通过模块化设计、智能封装和丰富的功能扩展,有效简化测试流程,大幅提升测试脚本的可读性与可维护性。无论是Web应用的功能测试,还是复杂场景下的性能验证,SeleniumBase 都能以更高效、更稳定的姿态,帮助测试团队在快速变化的技术环境中,轻松应对挑战,让自动化测试迈向新的高度。

2、简介

SeleniumBase是一个功能强大的Python框架,适用于Web自动化活动的专业工具包。专为测试网站、绕过验证码、提高生产力、完成任务和拓展业务而打造。

其主要特性如下:

核心功能

  • 录制模式:可自动生成Python浏览器测试代码。
  • 多浏览器支持:同一测试中支持多个浏览器、标签页、iframe和代理。
  • 测试用例管理:集成Markdown技术的测试用例管理软件。
  • 智能等待机制:自动智能等待提升测试可靠性,防止不稳定测试。
  • 多测试框架兼容:支持pytest、unittest、nose和behave查找/运行测试。
  • 开源透明:所有代码开源,可深入了解任何功能实现。

运行模式与性能优化

  • 无头模式:通过`--headless`参数在后台运行测试,隐藏浏览器界面。
  • 多线程执行:使用`-n NUM_THREADS`参数实现并行浏览器测试,提升效率。
  • 会话复用:通过`--reuse-session/--rs`参数在共享浏览器会话中运行测试。

高级测试能力

  • 移动设备模拟:使用`--mobile`参数通过Chromium的移动设备模拟器运行测试。
  • 代理支持:支持多种代理配置方式,包括普通代理、PAC URL、认证代理等。
  • 用户代理定制:通过`--agent=USER_AGENT_STRING`参数设置自定义浏览器用户代理。
  • 浏览器配置加载:使用`--user-data-dir=DIR`参数加载Chromium用户数据目录/配置文件。
  • 防检测机制:通过`--undetected/--uc`参数避免被试图阻止Selenium的网站检测到。
  • 请求检查:集成selenium-wire,通过`--wire`参数检查浏览器请求。
  • Chrome扩展支持:支持加载Chrome扩展ZIP文件或文件夹。

辅助工具与集成

  • 控制台脚本:提供强大的控制台命令(如`seleniumbase`或`sbase`)。
  • 多语言支持:可将测试翻译成多种口语语言。
  • 灵活的命令行界面:支持自定义测试运行参数。
  • 全局配置文件:可根据需要配置全局设置。
  • 交互式工具:包含创建交互式网页演示、图表、对话框、网站导览的工具。
  • GUI界面:提供SeleniumBase Commander图形界面运行pytest脚本。
  • CI/CD集成:支持GitHub Actions、Google Cloud、Azure、S3和Docker等持续集成工具。

特殊场景处理

  • 双因素认证支持:结合Python的一次性密码库处理Google Authenticator登录。
  • PDF文件处理:支持从网站或本地文件系统加载PDF文件并进行断言。
  • HTML检查:通过HTML Inspector检查HTML以发现问题和关注点。
  • JavaScript执行:可通过`self.execute_script()`从Python调用执行JavaScript代码。
  • Shadow DOM支持:通过在CSS选择器中添加`::shadow`穿透Shadow DOM。
  • 混合自动化:提供MasterQA混合自动化解决方案,加速手动测试。
  • 安全增强:包含实用的Python装饰器和密码混淆方法。

兼容性

  • 与Python WebDriver方法向后兼容,可通过`self.driver`直接访问底层WebDriver实例。

官方网址:

https://seleniumbase.io/

3、安装

方式一:使用PyPI安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install seleniumbase

方式二:使用GitHub克隆安装

代码语言:javascript
代码运行次数:1
运行
AI代码解释
复制
git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase/
pip install -e .

输入seleniumbase或sbase以验证SeleniumBase是否已成功安装。

SeleniumBase会根据需要自动下载Web驱动程序,例如chromedriver。

SeleniumBase会自动处理常见的WebDriver操作,例如在测试之前启动Web浏览器、在失败期间保存屏幕截图以及在测试后关闭Web浏览器。

SeleniumBase支持所有主流浏览器和操作系统:

浏览器:Chrome、Edge、Firefox和Safari。

操作系统:Linux/Ubuntu、macOS和Windows

4、快速上手

一些常见的SeleniumBase方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
浏览器导航操作
self.open(url) - 导航到指定URL
self.go_back() - 返回上一页
self.get_current_url() - 获取当前页面URL
self.get_title() - 获取当前页面标题
self.get_page_source() - 获取当前页面HTML源代码

元素交互操作
self.type(selector, text) - 在指定元素输入文本
self.click(selector) - 点击指定元素
self.click_link(link_text) - 点击包含指定文本的链接
self.select_option_by_text(dropdown_selector, option) - 在下拉菜单中选择指定文本的选项
self.hover_and_click(hover_selector, click_selector) - 先悬停在指定元素上,再点击另一个元素
self.drag_and_drop(drag_selector, drop_selector) - 执行拖放操作

元素状态检查
self.get_text(selector) - 获取元素文本内容
self.get_attribute(selector, attribute) - 获取元素属性值
self.is_element_visible(selector) - 检查元素是否可见
self.is_text_visible(text, selector) - 检查文本在元素中是否可见

窗口和框架操作
self.switch_to_frame(frame) - 切换到iframe
self.switch_to_default_content() - 从iframe切换回主文档
self.open_new_window() - 打开新窗口
self.switch_to_window(window) - 切换到指定窗口
self.switch_to_default_window() - 切换回默认窗口

驱动和会话管理
self.get_new_driver(OPTIONS) - 使用指定选项创建新驱动
self.switch_to_driver(driver) - 切换到指定驱动
self.switch_to_default_driver() - 切换回默认驱动

等待和断言
self.wait_for_element(selector) - 等待元素可见
self.sleep(seconds) - 强制等待指定秒数
self.assert_element(selector) - 断言元素可见
self.assert_text(text, selector) - 断言元素包含指定文本
self.assert_exact_text(text, selector) - 断言元素文本与指定文本完全一致
self.assert_title(title) - 断言页面标题
self.assert_downloaded_file(file) - 断言文件已下载
self.assert_no_404_errors() - 断言没有404错误
self.assert_no_js_errors() - 断言没有JavaScript错误

其他操作
self.save_screenshot(name) - 保存当前页面截图

大多数SeleniumBase脚本都可以使用pytest、pynose或纯python运行。并非所有测试运行程序都可以运行所有测试格式。例如,使用sb pytest夹具的测试只能使用pytest运行。还有一种Gherkin测试格式,它与behave一起运行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pytest coffee_cart_tests.py --rs
pytest test_sb_fixture.py --demo
pytest test_suite.py --rs --html=report.html --dashboard

pynose basic_test.py --mobile
pynose test_suite.py --headless --report --show-report

python raw_sb.py
python raw_test_scripts.py

behave realworld.feature
behave calculator.feature -D rs -D dashboard

pytest包括自动测试发现功能。如果未指定要运行的特定文件或文件夹,pytest将根据以下条件自动搜索所有子目录以查找要运行的测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
以 test_ 开头或以 _test.py 结尾的 Python 文件。
以 test_ 开头的 Python 方法。

示例脚本,用于测试购物网站:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from seleniumbase import BaseCase
BaseCase.main(__name__, __file__) 

class MyTestClass(BaseCase):
    def test_swag_labs(self):
        self.open("https://www.saucedemo.com")
        self.type("#user-name", "standard_user")
        self.type("#password", "secret_sauce\n")
        self.assert_element("div.inventory_list")
        self.click('button[name*="backpack"]')
        self.click("#shopping_cart_container a")
        self.assert_text("Backpack", "div.cart_item")
        self.click("button#checkout")
        self.type("input#first-name", "SeleniumBase")
        self.type("input#last-name", "Automation")
        self.type("input#postal-code", "77123")
        self.click("input#continue")
        self.click("button#finish")
        self.assert_text("Thank you for your order!")

输入命令,执行脚本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pytest test_get_swag.py

运行效果,可以看到执行速度很快。

执行脚本,生成测试报告方式一。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pytest test_get_swag.py --html=report.html

执行完成后,打开测试报告。

执行脚本,生成测试报告方式二。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pytest test_get_swag.py --dashboard --html=report.html

执行完成后,打开测试报告。

执行时断言报错,执行完成后,打开测试报告。

报错信息与截图也展示到测试报告里。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AllTests软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
pytest 自动化测试框架(二)
在上一篇文章中分享了 pytest 的基本用法,本文进一步介绍 pytest 的其他实用特性和进阶技巧。
霍格沃兹测试开发
2020/10/26
9080
《一头扎进》系列之Python+Selenium框架设计篇5 - 价值好几K的框架,哎呦!这个框架还真有点料啊!!!
  其实,到前面这一篇文章,简单的Python+Selenium自动化测试框架就已经算实现了。接下来的主要是介绍,unittest管理脚本,如何如何加载执行脚本,再就是采用第三方插件,实现输出html的测试报告。本文来介绍下,在同一个类中,多个测试函数时候,测试固件如何写和进一步实现POM和可能遇到问题解决办法。
北京-宏哥
2019/12/25
1.3K0
《一头扎进》系列之Python+Selenium框架设计篇5 - 价值好几K的框架,哎呦!这个框架还真有点料啊!!!
web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架
官方下载地址:https://pypi.python.org/pypi/setuptools#downloads
授客
2019/09/11
1.2K0
web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架
Selenium4+Python3系列(十二) - 测试框架的设计与开发
整个框架的实现,大约也就1.5天,关于框架的开发并不是很难,主要难在测试报告增加失败自动截图功能和echart的饼子图统计功能,两者的整合花了近半天的时间吧。
软件测试君
2023/02/24
6381
Selenium4+Python3系列(十二) - 测试框架的设计与开发
Pytest实战Web测试框架
用例之间不应相互依赖,如果部分用例拥有相同的业务流程,如都需要,打开登录页->登录->点击添加商品菜单->进入添加商品页面 不建议使用以下方式,并使其按顺序执行。
赵云龙龙
2020/02/13
1.9K0
Pytest实战Web测试框架
Python测试框架pytest(20)插件 - 生成html报告、重复执行用例、用例执行顺序、多重断言
pytest-html 测试报告默认是不展示用例描述 Description 内容,可以修改生成的报告内容,添加或删除 html 报告的 table 内容。
wangmcn
2022/07/26
1.1K0
Python测试框架pytest(20)插件 - 生成html报告、重复执行用例、用例执行顺序、多重断言
五大自动化测试的 Python 框架
Python在各大排行榜上一直都是名列前茅。目前,它在Tiobe指数中排名第二,仅次于C。随着该编程语言的广泛使用,基于Python的自动化测试框架也应运而生,且不断发展与丰富。
测试小兵
2021/08/05
9.5K0
五大自动化测试的 Python 框架
《一头扎进》系列之Python+Selenium框架实战篇4- 价值好几K的框架,呵!这个框架有点意思啊!!!
  前面文章,我们实现了框架的一部分功能,包括日志类和浏览器引擎类的封装,今天我们继续封装一个基类和介绍如何实现POM。关于基类,是这样定义的:把一些常见的页面操作的selenium封装到base_page.py这个类文件,以后每个POM中的页面类,都继承这个基类,这样每个页面类都有基类的方法,这个我们会在这篇文章由宏哥实现。
北京-宏哥
2019/12/25
9750
《一头扎进》系列之Python+Selenium框架实战篇4- 价值好几K的框架,呵!这个框架有点意思啊!!!
不写一行代码来实现自动化
由于技术的进步,各行各业的门槛越来越低。 以前别人说会selenium就是会自动化。好像很高大上的样子。现在会selenium估计是基本的。大家都忙着内卷,各种轮子越来越多,自动化的门槛也越来越低。
赵云龙龙
2021/03/16
8920
浅谈pyse
现在都看懂了吧!就是简单的Python和selenium融合,做的二次开发,使用起来比原来的selenium还要简单!
我被狗咬了
2019/09/23
1.2K0
浅谈pyse
【Python系列】pytest自动化测试框架
为了更灵活的设计自动化测试用例,可以将测试用例写到excel或者json,再进行读取。
用户9913368
2022/08/13
8430
【Python系列】pytest自动化测试框架
如何利用airobots做web自动化测试
上篇,给大家介绍了一款自动化测试框架——airobots。今天给大家演示怎么用airobots做web自动化。
归根落叶
2021/03/25
1.3K0
如何利用airobots做web自动化测试
「 自动化测试 」面试题..
自动化框架主要的核心框架就是分层+PO模式:分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。然后再加上日志处理模块,ini配置文件读取模块,unittest+ddt数据驱动模块,jenkins持续集成模式组成。
测试小兵
2024/05/11
3080
「 自动化测试 」面试题..
Selenium入门
查看chrom浏览器的版本,需要下载其对应版本的chrome webdriver.
测试加
2022/03/24
2.8K0
Selenium入门
pytest文档30-功能用例与自动化用例完美对接(allure)
做自动化做久了,经常会思考一个问题,到底别人是怎么做的自动化,跟自己的有啥不一样,看过不少书和资料,都是停留在demo的层面。 真正把自动化做的好的大牛又不屑于分享自己的劳动成果,所以大部分情况就是一群菜鸡在群里互啄,停留在初级入门的demo层面上。 到底自动化要达到什么样的效果呢?这里我把最近的研究成果分享下,有经验的小伙伴也可以一起交流下。
上海-悠悠
2019/12/19
9150
Python测试框架之pytest详解
Python测试框架之前一直用的是unittest+HTMLTestRunner,听到有人说pytest很好用,所以这段时间就看了看pytest文档,在这里做个记录。
全栈程序员站长
2022/09/05
2.4K0
Python测试框架之pytest详解
Selenium Firefox驱动程序:使用Firefox浏览器自动进行测试
根据statcounter统计,到2020年6月,Mozilla Firefox浏览器在全球浏览器市场中所占份额为4.25%,因此,对于每个Selenium测试用例,Mozilla Firefox浏览器都是不可避免的。 Mozilla开发人员推出了Geckodriver(也称为Selenium Firefox驱动程序),以帮助测试人员使用Firefox浏览器自动进行浏览器测试。
用户7466307
2020/07/20
9.7K0
Selenium Firefox驱动程序:使用Firefox浏览器自动进行测试
Python自动化测试面试:unittest、pytest与Selenium详解
在Python自动化测试的面试过程中,对unittest、pytest与Selenium这三个核心工具的理解和应用能力是面试官重点关注的对象。本文将深入浅出地剖析这三个框架,探讨面试中常见的问题、易错点及应对策略,并通过代码示例进一步加深理解。
Jimaks
2024/04/22
7900
pytest框架介绍
前面介绍了unittest这个自动化框架,但是这个古老的框架,还有很多不足。 于是乎,后浪出现了,今天要讲的就是pytest框架。 pytest介绍 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1、简单灵活,容易上手,文档丰富; 2、支持参数化,可以细粒度地控制要测试的测试用例; 3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests); 4、pytest具有很多第三方插件,并且可以自定义扩展 如pytest-selenium(集成selenium)、 pytest-html(完美html测试报告生成)、 pytest-rerunfailures(失败case重复执行)、 pytest-xdist(多CPU分发)、 pytest--ordering(控制测试运行的顺序) 5、测试用例的skip和xfail处理; 6、可以很好的和CI工具结合,例如jenkins
赵云龙龙
2021/04/23
1.1K0
Web UI自动化
UI 自动化测试,即通过自动化的手段来控制机器模拟人进行手工操作。随着 GrowingIO
花落花相惜
2021/12/05
1.2K0
推荐阅读
相关推荐
pytest 自动化测试框架(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验