SeleniumBase Commander 桌面 GUI 指南:让 pytest 测试运行与调试更直观
SeleniumBase Commander 桌面 GUI 指南让 pytest 测试运行与调试更直观【免费下载链接】SeleniumBaseAPIs for browser automation, testing, and bypassing bot-detection. Includes CDP Mode: A stealthy configuration for chromium that passes every bot detection test.项目地址: https://gitcode.com/GitHub_Trending/se/SeleniumBaseSeleniumBase Commander 是 SeleniumBase 内置的桌面图形化测试运行器让开发者无需记忆繁复的 pytest 命令行参数即可通过勾选、下拉菜单与复选框完成测试筛选、浏览器切换、多线程调度与报告生成。本文将以官方文档 help_docs/commander.md 为骨架结合仓库源码逐层剖析其启动方式、测试收集机制、界面控件与命令拼接原理帮助你在本地桌面环境中快速上手这套 GUI 工作流。SeleniumBase Commander 是什么SeleniumBase Commander别名sbase gui是一个基于 Python 标准库tkinter构建的桌面应用用于在图形界面中运行pytest脚本。它的核心价值在于所见即所得的测试管理以树状列表呈现收集到的测试支持逐条勾选或全量运行零记忆的选项配置浏览器、会话复用、线程数、Demo 模式、Dashboard、HTML 报告等常用 SeleniumBase 专属选项全部通过控件切换自由扩展的透传通道对没有可见开关的 pytest 参数可通过“Additional Options”输入框直接注入。其实现位于 seleniumbase/console_scripts/sb_commander.py入口命令的分发逻辑在 seleniumbase/console_scripts/run.py。启动方式与命令入口按官方文档启动命令为sbase commander # 或等价写法 sbase gui启动成功后终端会输出* Starting the SeleniumBase Commander Desktop App...上述提示字符串正是sb_commander.py中main()打印的启动横幅见 seleniumbase/console_scripts/sb_commander.py。命令分发逻辑支持四种等价写法见 seleniumbase/console_scripts/run.pyseleniumbase commander [OPTIONAL PATH or TEST FILE] sbase commander [OPTIONAL PATH or TEST FILE] seleniumbase gui [OPTIONAL PATH or TEST FILE] sbase gui [OPTIONAL PATH or TEST FILE]其中sbase与seleniumbase两个可执行命令均通过setup.py的 entry_points 注册指向同一入口函数seleniumbase.console_scripts.run:main见 setup.pyconsole_scripts: [ seleniumbase seleniumbase.console_scripts.run:main, sbase seleniumbase.console_scripts.run:main, # Simplified name ... ],此外未安装可执行命令时也可以通过模块方式启动python -m seleniumbase gui入口在 seleniumbase/main.py。若想随时查看命令用法可执行sbase help commander或sbase --help。前提说明Commander 依赖桌面 GUI 环境tkinter。在无显示器的 Linux 服务器上需搭配 Xvfb 等虚拟显示方案才能弹出窗口若在 SSH 会话中使用请确保有可用的 X 转发或本地显示。测试收集机制与pytest --co -q完全等价文档明确指出Commander 加载的测试与pytest --co -q收集到的结果完全一致。这是因为它内部就是直接以收集模式调用 pytest 的pytest --co -q查看源码可以发现main()中实际执行的收集命令为见 seleniumbase/console_scripts/sb_commander.pyproc subprocess.Popen( %s -m pytest --collect-only -q --rootdir./ %s % (sys.executable, command_string), stdoutsubprocess.PIPE, shellTrue, )其中--collect-only -q即--co -q的完整写法--rootdir./将仓库/项目根目录固定为 pytest 根目录command_string是用户在命令行传入的附加参数。收集完成后源码按如下规则解析输出见 seleniumbase/console_scripts/sb_commander.py只保留包含::的行即形如file.py::Class::test_method的完整测试节点按::前面的文件名聚合生成(FILE) 文件 (N Test/N Tests)的分组行原始测试节点作为单独行保留供用户逐条勾选。如果收集不到任何测试Commander 会打印ERROR: No tests found! Exiting SeleniumBase Commander...并直接退出而不会弹出空窗口。自定义测试收集范围启动命令可以附带一个可选的路径或测试文件用于缩小收集范围sbase commander [OPTIONAL PATH or TEST FILE] sbase gui [OPTIONAL PATH or TEST FILE]官方文档给出的完整示例sbase gui # 收集当前目录下全部测试 sbase gui -k agent # 只收集名称含 agent 的测试pytest 关键字过滤 sbase gui -m marker2 # 只收集带有 marker2 标记的测试 sbase gui test_suite.py # 只收集该测试文件内的用例 sbase gui offline_examples/ # 只收集该目录下的用例其中-k是 pytest 的表达式过滤参数匹配测试名/类名/模块名-m按标记过滤。SeleniumBase 官方示例工程在 examples/pytest.ini 中注册了一批常用 markermarker1、marker2、smoke、qa、ci、e2e等配合sbase gui -m smoke即可快速筛选出冒烟测试集。传入的这些参数会原样拼进command_string并传入收集命令因此凡是 pytest 支持的收集期参数如--ignore、-x、--lf等都可以在此阶段使用。GUI 界面与运行控制详解窗口标题为SeleniumBase Commander | GUI for pytest默认最小尺寸约 820×700见 seleniumbase/console_scripts/sb_commander.py。界面自上而下分为三大区域选项控件区、测试列表区、运行区。浏览器选择下拉菜单提供浏览器切换对应命令行为界面选项生成的命令行参数Use Chrome Browser默认不附加参数默认 chromeUse Edge Browser--edgeUse Firefox Browser--firefoxUse Safari Browser仅 macOS 显示--safari浏览器参数拼接逻辑见 seleniumbase/console_scripts/sb_commander.pySafari 选项仅在 macOS 平台追加见同文件 seleniumbase/console_scripts/sb_commander.py。会话复用策略下拉菜单控制浏览器会话的生命周期对应 SeleniumBase 的--rs/--rcs/--crumbs机制界面选项生成的命令行参数New Session Per Test默认不附加参数Reuse Session for ALL tests in thread--rsReuse Session and also clear cookies--rs --crumbsReuse Session for tests with same CLASS--rcsReuse Session for class and clear cookies--rcs --crumbs拼接逻辑见 seleniumbase/console_scripts/sb_commander.py。--rsreuse-session让同一线程内的测试共享浏览器会话以提升速度--crumbs在复用会话时清除 Cookie 避免状态污染--rcs则把复用范围限定在同一测试类内。线程数并行执行下拉菜单提供 18 个线程选项分别映射为-n1默认不加参数到-n8Number of Threads: 1 (Default) Number of Threads: 2 (-n2) Number of Threads: 3 (-n3) Number of Threads: 4 (-n4) Number of Threads: 5 (-n5) # 仅当 CPU 核数 8 时出现 Number of Threads: 6 (-n6) Number of Threads: 7 (-n7) Number of Threads: 8 (-n8)源码在检测到os.cpu_count() 8时才动态追加 58 线程选项见 seleniumbase/console_scripts/sb_commander.py避免在低配机器上过度并行拖垮系统。线程参数最终以-nN的形式追加到 pytest 命令见同文件 seleniumbase/console_scripts/sb_commander.py依赖 pytest-xdist 提供多进程执行能力。复选框开关测试列表上方提供一排常用开关默认勾选项以括号标注复选框生成的命令行参数说明Verbose Output-v默认勾选打印每个测试的完整名称Demo Mode--demo放慢自动化速度可视化演示每一步操作Mobile Mode--mobile启用 Chromium 移动设备模拟Dashboard--dashboard默认勾选生成dashboard.html实时测试看板Report--htmlreport.html默认勾选生成 pytest-html 详细报告Headless Browser--headless无头模式运行Linux 默认无头Save Screenshots--screenshot每个测试结束时保存截图需要特别说明的是 Linux 下的默认行为当未勾选--headless时源码会自动追加--gui参数见 seleniumbase/console_scripts/sb_commander.pyif headless: full_run_command --headless elif shared_utils.is_linux(): full_run_command --gui这是因为 SeleniumBase 在 Linux 上默认无头运行若要在桌面环境看到浏览器窗口需要显式指定--guiCommander 自动替你处理了这一平台差异。测试列表与选择逻辑测试列表以ScrolledText滚动区域承载每一行都是一个 Checkbutton见 seleniumbase/console_scripts/sb_commander.py。列表首部是文件分组行形如(FILE) test_suite.py (3 Tests)其下是该文件内逐条展开的测试节点。选择规则为一个都不勾选运行全部收集到的测试等于直接执行原始command_string勾选部分仅运行勾选的节点只收集到 1 个测试直接提示Only ONE TEST was found and will be run:并自动运行该测试只收集到 1 个文件列表只展示该文件内的测试节点。判断逻辑见 seleniumbase/console_scripts/sb_commander.py 与 seleniumbase/console_scripts/sb_commander.py。附加参数输入框与 Run 按钮界面底部有一个黄色高亮的输入框提示文案为Additional pytest Options: (Eg. --incognito --slow)见 seleniumbase/console_scripts/sb_commander.py。这里可以输入所有没有可见开关的 pytest / SeleniumBase 参数例如--incognito --slow --server127.0.0.1 --port4444 --proxy127.0.0.1:8888 --envstaging --data... --archive-logs输入完成后点击绿色的Run Selected Tests按钮或在输入框内直接回车即可执行。真正执行测试的入口函数是do_pytest_run()它负责把上述所有控件状态拼装成一条完整的命令并通过subprocess.Popen(..., shellTrue)异步启动见 seleniumbase/console_scripts/sb_commander.py。命令拼接的完整顺序源码级还原理解 Commander 的拼接顺序你就能预判任意一次点击后实际执行的是哪条命令。完整顺序如下以python -m pytest开头若全选或全不选追加启动时传入的原始command_string否则逐个追加被勾选的测试节点路径追加浏览器参数--edge/--firefox/--safari追加会话复用参数--rs/--rcs/--crumbs组合追加线程参数-nN追加开关参数--demo、--mobile、--dashboard、--htmlreport.html、--headless或 Linux 下的--gui、--screenshot追加附加输入框中的任意参数追加-v勾选 Verbose 时若附加参数中未包含--capture自动追加--capturetee-sys确保测试日志能实时回显到终端。其中第 9 步是容易被忽略的细节--capturetee-sys让被测试代码的 stdout 同时输出到终端便于在 GUI 之外观察实时日志见 seleniumbase/console_scripts/sb_commander.py。命令构建完成后终端会先打印完整的full_run_command随后立刻启动子进程并把 GUI 窗口重新置顶send_window_to_front因此你可以随时在终端中核对实际执行的命令——这也是排查选项是否生效的最快途径。兄弟工具Behave GUI 与 Case PlansCommander 所在的工具族还包含两个相邻的桌面工具文档中专门引用了 Behave GUI详见 help_docs/behave_gui.md工具启动命令面向的测试框架收集命令SeleniumBase Commandersbase gui/sbase commanderpytestpytest --co -qSeleniumBase Behave GUIsbase behave-gui/sbase gui-behavebehaveGherkinbehave -dCase Plans Generatorsbase caseplanspytest生成用例计划pytest --collect-only -qBehave GUI的实现位于 seleniumbase/console_scripts/sb_behave_gui.py收集阶段执行python -m behave -d --show-source-d即 dry-run解析Feature:与Scenario:/Scenario Outline:行并统计每个 feature 的场景数。运行阶段将界面选项翻译成-D风格的 behave 参数如-D demo、-D dashboard、-D headless并自动补全-Ttimings与-kskipped参数。支持sbase behave-gui features/、sbase behave-gui features/calculator.feature这样的路径定位。Case Plans Generator位于 seleniumbase/console_scripts/sb_caseplans.py采用与 Commander 完全相同的pytest --collect-only -q --rootdir./收集机制但用途不同——它生成可离线评审的用例计划文档仓库examples/case_plans/目录下即是其产物示例。三者共用同一套 tkinter 界面风格与“收集 → 解析 → 勾选 → 拼命令 → 异步执行”的流水线设计上手其中一个即可触类旁通。典型使用场景小结演示与培训勾选Demo Mode放慢操作节奏配合 Dashboard 实时观察执行状态冒烟回归sbase gui -m smoke只收集冒烟标记的用例勾选-n4并行提速一键产出 HTML 报告定向调试sbase gui test_login.py定位单文件取消全选后只勾选失败用例结合附加框的--pdb进入失败后调试无头 CI 预演勾选Headless Browser模拟 Linux CI 环境先行验证无头模式下的用例表现。总而言之SeleniumBase Commander 把 pytest 的命令行世界搬进了桌面 GUI同时保留了“附加参数透传”的后门既适合不熟悉参数的新手快速上手也能满足老手对精细化控制的需求。需要深入了解 Behave 版本 GUI 或查看相关文档可继续阅读 help_docs/behave_gui.md 与 help_docs/case_plans.md。【免费下载链接】SeleniumBaseAPIs for browser automation, testing, and bypassing bot-detection. Includes CDP Mode: A stealthy configuration for chromium that passes every bot detection test.项目地址: https://gitcode.com/GitHub_Trending/se/SeleniumBase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考