当前位置: 首页 > news >正文

RobotFramework Selenium与Browser常用关键字对比

一、核心区别概述

Browser 库和 SeleniumLibrary 在 Robot Framework 中用法非常相似,关键区别在于底层驱动机制:SeleniumLibrary 基于 Selenium WebDriver 驱动浏览器,而 Browser 库基于 Playwright 驱动浏览器。这一技术栈差异带来了以下几个方面的影响:

对比维度 SeleniumLibrary Browser 库
底层技术 Selenium WebDriver Playwright (Node.js)
浏览器驱动 需要独立的 WebDriver 内置浏览器二进制文件,无需额外驱动
执行速度 基准速度 测试执行速度提升约 50%
浏览器支持 Chrome, Firefox, Edge, Safari Chromium, Firefox, WebKit, Edge(原生支持)
自动等待机制 需要显式或隐式等待(约 40% 测试失败由时序问题导致) 内置智能自动等待
Shadow DOM 支持 不支持,需要复杂变通方案 原生支持穿透 Shadow DOM
上下文隔离 每个浏览器需独立进程 支持多上下文,比 Selenium 快约 10 倍
关键字总数 约 180+ 个 约 118+ 个
生态系统 成熟,资源丰富 较新,资源相对少

注意:两个库不能混用——不能用 SeleniumLibrary 打开浏览器后用 Browser 库的关键字操作,必须完全使用其中一种。

二、浏览器与窗口管理

2.1 打开浏览器

功能 SeleniumLibrary Browser 库
打开浏览器 Open Browser url browser New Browser browser headless=False + New Context + New Page url
快速打开(一次性) Open Browser url browser(相当于三合一便捷方法)
创建无头浏览器 添加参数 headlesschrome New Browser 默认 headless=True
创建持久化上下文 New Persistent Context url browser

SeleniumLibrary 中 Open Browser 一次性打开浏览器并导航到指定 URL。Browser 库采用 Browser → Context → Page 三层架构设计,更灵活但也更复杂:

robotframework

# SeleniumLibrary 写法
*** Settings ***
Library    SeleniumLibrary*** Test Cases ***
Open GoogleOpen Browser    https://www.google.com    chrome# Browser 库写法
*** Settings ***
Library    Browser*** Test Cases ***
Open GoogleNew Browser    chromium    headless=falseNew Context    viewport={'width': 1920, 'height': 1080}New Page       https://www.google.com

Browser 库也提供了 Open Browser 关键字作为便捷方法,等价于一次性执行 New Browser + New Context + New Page,适用于快速实验或调试场景。

2.2 关闭浏览器/窗口

功能 SeleniumLibrary Browser 库
关闭当前浏览器 Close Browser Close Browser
关闭所有浏览器 Close All Browsers Close Browser ALL
关闭当前页面 Close Window Close Page
关闭当前上下文 Close Context

2.3 窗口/标签页切换

功能 SeleniumLibrary Browser 库
切换窗口 Switch Window locator=NEW Switch Page NEW
通过标题切换 Switch Window title=xxx Switch Page url=xxxtitle=xxx
获取窗口句柄列表 Get Window Handles Get Page Ids
获取当前窗口信息 Get Window Titles Get Title

2.4 页面导航

功能 SeleniumLibrary Browser 库
跳转到 URL Go To url Go To url
刷新页面 Reload Page Reload
后退 Go Back Go Back
前进 Go Forward
获取当前 URL Get Location Get Url
验证 URL Location Should Be url Get Url == url

三、元素交互

3.1 点击操作

功能 SeleniumLibrary Browser 库
点击元素(通用) Click Element locator Click selector
点击按钮 Click Button locator Click selector(通用)
点击链接 Click Link locator Click selector(通用)
双击元素 Double Click Element locator Double Click selector
右键点击 Open Context Menu locator Click selector button=right
点击坐标 Click Element At Coordinates Click x=... y=...
点击图片 Click Image locator 使用 Click 配合图片选择器
选中复选框 Select Checkbox locator Check Checkbox selector
取消复选框 Unselect Checkbox locator Uncheck Checkbox selector
选择单选按钮 Select Radio Button Click selector

Browser 库的 Click 关键字是统一的点击入口,不再区分 Button、Link、Element 等类型,这简化了 API 但丢失了一些语义信息。

3.2 文本输入

功能 SeleniumLibrary Browser 库
输入文本 Input Text locator text Fill Text selector textType Text selector text
输入密码 Input Password locator password Fill Secret selector password
清空输入框 Clear Element Text locator Clear Text selector
模拟键盘按键 Press Keys locator keys Keyboard Key press key
逐字输入(模拟打字) Type Text selector text delay=100ms

Fill Text 会先清空输入框再填入内容;Type Text 则逐个字符输入,可设置延迟来模拟真实用户打字行为。

3.3 下拉列表选择

功能 SeleniumLibrary Browser 库
按值选择 Select From List By Value Select Options By selector value
按标签选择 Select From List By Label Select Options By selector label
按索引选择 Select From List By Index Select Options By selector index
获取选中项标签 Get Selected List Label Get Selected Options selector then label
获取选中项值 Get Selected List Value Get Selected Options selector then value
取消选择 Unselect From List By ... Deselect Options selector

3.4 文件上传

功能 SeleniumLibrary Browser 库
选择文件上传 Choose File locator file_path Upload File selector file_path

3.5 鼠标操作

功能 SeleniumLibrary Browser 库
鼠标悬停 Mouse Over locator Hover selector
拖拽 Drag And Drop from to Drag And Drop from to
拖拽偏移 Drag And Drop By Offset Drag And Drop By Offset
鼠标按下 Mouse Down locator Mouse Button down
鼠标松开 Mouse Up locator Mouse Button up
鼠标移动 Mouse Move x y
虚拟鼠标控制 Mouse MoveMouse Button 配合实现虚拟鼠标

四、元素查找与获取信息

功能 SeleniumLibrary Browser 库
获取文本 Get Text locator Get Text selector
获取属性 Get Element Attribute locator attr Get Attribute selector attr
获取元素数量 Get Element Count locator Get Element Count selector
获取元素 Get WebElement locator Get Element selector
获取元素列表 Get WebElements locator Get Elements selector
获取页面标题 Get Title Get Title
获取页面源码 Get Source Get Page Source

选择器(定位符)策略对比

两个库在选择器语法上略有差异:

选择器类型 SeleniumLibrary Browser 库
CSS(默认) css=.class 或直接写 .class 直接写 .class(默认 CSS)
XPath xpath=//div 或以 // 开头 // 开头自动识别为 XPath
ID id=foo #foo(CSS)或 id=foo
Name name=foo [name="foo"](CSS)
文本匹配 text="Login""Login"
链式选择器 不支持原生 支持 >> 链式(如 #iframe >> #btn

Browser 库的选择器功能更强大,支持文本引擎 text="Login" 直接按文本定位,以及 >> 链式选择器来穿透 Shadow DOM 和 iframe。

五、等待机制

功能 SeleniumLibrary Browser 库
设置隐式等待 Set Selenium Implicit Wait Set Browser Timeout
等待元素可见 Wait Until Element Is Visible Wait For Elements State selector visible
等待元素不可见 Wait Until Element Is Not Visible Wait For Elements State selector hidden
等待元素启用 Wait Until Element Is Enabled Wait For Elements State selector enabled
等待包含元素 Wait Until Page Contains Element Wait For Elements State selector attached
等待页面包含文本 Wait Until Page Contains Wait For Elements State text="xxx" visible
等待条件为真 Wait For Condition condition
等待网络空闲 Wait For Load State networkidle
固定等待 Sleep seconds Sleep seconds

Browser 库的最大优势之一是其内置的自动等待机制:交互前会自动等待元素可操作,因此通常不需要编写大量显式等待语句,大大减少了测试的不稳定性。

robotframework

# SeleniumLibrary 典型写法
Click Element    id=submit-btn
Wait Until Element Is Visible    css=.success-message
Element Text Should Be    css=.success-message    Operation successful# Browser 库写法(自动等待)
Click    id=submit-btn
Get Text    css=.success-message    ==    Operation successful

六、断言与验证

功能 SeleniumLibrary Browser 库
页面应包含文本 Page Should Contain text Get Text body contains text
页面不应包含文本 Page Should Not Contain text Get Text body not contains text
元素应可见 Element Should Be Visible Get Element State selector == visible
元素应不可见 Element Should Not Be Visible Get Element State selector == hidden
元素应启用 Element Should Be Enabled Get Element State selector == enabled
元素应禁用 Element Should Be Disabled Get Element State selector == disabled
元素文本应为 Element Text Should Be text Get Text selector == text
元素应包含 Element Should Contain text Get Text selector contains text
复选框应选中 Checkbox Should Be Selected Get Checkbox State selector == checked
属性值应为 Element Attribute Value Should Be Get Attribute selector attr == value

Browser 库采用了一种更统一的断言模式:关键字返回状态值,然后使用 ==containsshould be 等运算符进行断言,支持 validatethen 闭包进行更复杂的条件判断。

robotframework

# Browser 库的断言模式示例
Get Text       css=h1    ==    Welcome
Get Title      ==    Home Page
Get Url        contains    /dashboard
Get Element State    #submit-btn    ==    enabled

七、弹窗与对话框

功能 SeleniumLibrary Browser 库
处理 Alert Handle Alert action=ACCEPT Handle Future Dialogs action=accept
Alert 文本应为 Alert Should Be Present text 结合 Handle Future Dialogspromise
获取 Alert 文本 Get Alert Message 使用 Promise 方式
输入 Alert 文本 Input Text Into Alert Handle Future Dialogs prompt_input=text
确认 Alert 不存在 Alert Should Not Be Present
处理文件选择对话框 Handle Future Dialogs action=accept

Browser 库对弹窗的处理采用“预注册”模式——必须在触发弹窗的操作之前调用 Handle Future Dialogs,这与 SeleniumLibrary 的事后处理模式不同:

robotframework

# Browser 库弹窗处理模式
Handle Future Dialogs    action=accept
Click    #trigger-alert-btn

八、框架与多文档

功能 SeleniumLibrary Browser 库
选择 Frame Select Frame locator 链式选择器 #iframe >> #elementSwitch Context
取消选择 Frame Unselect Frame 链式选择器默认只对单次操作有效
当前 Frame 应包含 Current Frame Should Contain text Get Text body contains text
穿透 Shadow DOM 不支持,需要复杂脚本 原生支持,CSS 选择器自动穿透

Browser 库处理 iframe 和 Shadow DOM 的最大优势是无需显式切换上下文。通过 >> 链式选择器可以直接定位到嵌套元素:

robotframework

# Browser 库穿透 iframe 和 Shadow DOM 的方式
Click    #iframe-id >> #inner-button
Click    #shadow-host >> #shadow-element

九、Cookie 管理

功能 SeleniumLibrary Browser 库
获取 Cookies Get Cookies Get Cookies
获取单个 Cookie Get Cookie name Get Cookie name
添加 Cookie Add Cookie name value Add Cookie name=value
删除 Cookie Delete Cookie name Delete Cookie name
删除所有 Cookies Delete All Cookies Delete All Cookies
保存 Cookies 到文件 Save Storage State
加载 Cookies 从文件 Load Storage State

Browser 库新增的 Save Storage State / Load Storage State 可以保存和恢复完整的会话状态(包括 cookies 和 localStorage),便于实现登录态复用。

十、截图与调试

功能 SeleniumLibrary Browser 库
截取页面截图 Capture Page Screenshot filename Take Screenshot filename
截取元素截图 Capture Element Screenshot locator Take Screenshot selector=xxx
测试录像 不支持 New Context recordVideo={'dir': 'videos'}
追踪调试 不支持 New Context 启用 tracing 功能
获取页面 PDF Get Pdf

Browser 库在调试和测试可观测性方面更强大,支持测试录像和 Playwright Trace Viewer,便于排查问题。

十一、JavaScript 执行

功能 SeleniumLibrary Browser 库
执行 JavaScript Execute Javascript code Execute JavaScript code
执行异步 JavaScript Execute Async Javascript code Execute JavaScript(支持 Promise)
获取 JavaScript 返回值 直接返回 Execute JavaScript code then value

Browser 库的 Execute JavaScript 函数参数可以是匿名函数或函数名,返回 Promise 时自动等待。

十二、网络拦截与 Mock

功能 SeleniumLibrary Browser 库
拦截请求 不支持 Route url handler
Mock 响应 不支持 Route url fulfill
继续请求 不支持 Route url continue
终止请求 不支持 Route url abort
等待请求/响应 不支持 Wait For Request / Wait For Response
获取网络日志 部分支持(需额外配置) Promise To Wait For Request

这是 Browser 库的独特功能,内置网络拦截和请求 Mock 能力,可以模拟 API 响应、测试网络错误场景,而 SeleniumLibrary 需要借助外部代理工具才能实现。

十三、总结与选择建议

选择 SeleniumLibrary 的场景:

  • 项目已有大量 SeleniumLibrary 测试用例,且运行稳定
  • 需要与 Selenium Grid 集成实现分布式测试
  • 团队对 Selenium 生态非常熟悉
  • 测试老旧浏览器版本(Playwright 仅支持较新版本)
  • 需要更丰富的第三方集成和社区资源

选择 Browser 库的场景:

  • 新项目,没有历史包袱
  • 测试 React、Vue 等现代框架(需处理 Shadow DOM)
  • 追求更快的执行速度和更高的稳定性
  • 需要录像、trace 等调试功能
  • 需要网络拦截/Mock 能力
  • 希望减少 flaky tests 和等待代码

迁移建议

如需从 SeleniumLibrary 迁移到 Browser 库,可以使用 robotframework-browser-migration 工具包:它包含一个分析脚本(统计项目中使用的 SeleniumLibrary 关键字)和一个迁移层库 SeleniumLibraryToBrowser,该库使用 Browser 库实现了约 80% 的 SeleniumLibrary 关键字,可以大幅降低迁移工作量。

http://www.jsqmd.com/news/678857/

相关文章:

  • 想找隔热膜专业生产厂家?雷迪斯图或许能满足需求 - 品牌企业推荐师(官方)
  • 告别一天一充!聊聊高通SDW4100平台如何让智能手表续航飙到一周
  • Windows 11轻松安装指南:用MediaCreationTool.bat解决硬件不兼容问题
  • COBS算法:高效字节填充技术解析与应用
  • 保姆级教程:在Unity中为你的游戏或工具软件添加“老板键”(一键最小化/隐藏)功能
  • 网络‘活地图’实战:用PyHPEcw7库+D3.js打造可点击的拓扑仪表盘
  • 2026酒吧专业舞台音响品质选型评测报告:学校音响/家庭影院音响/家庭音响/山水音响/特美声音响/舞台音响/选择指南 - 优质品牌商家
  • OAK-D vs OAK-D-Lite怎么选?从项目需求出发,聊聊我的选购心得和避坑指南
  • Thorium Reader技术解析:书籍信息面板的可复制性设计与实现机制
  • ArcGIS 10.2 里用Python工具箱(.pyt)写脚本工具,比传统方法香在哪?
  • 性价比高的长治专业改造厨房、卫生间的装修公司哪家好 - 品牌企业推荐师(官方)
  • STM32CubeIDE隐藏技能:用旧版.ioc文件创建工程,还能自由切换MCU固件库版本
  • 独立部署AI虚拟试衣间源码系统 带完整的搭建部署教程
  • 企业级Blazor微前端落地全景图,含模块联邦、样式隔离、跨框架状态同步——某金融头部客户已上线的6.2版本架构方案
  • Dislocker终极指南:在Linux/macOS上解密BitLocker加密磁盘的完整解决方案
  • 复数线性相位FIR滤波器设计原理与工程应用
  • MetaCloak-JPEG如何让你的照片不被拿去生成不可描述的图片?
  • 德州扑克GTO求解器Desktop Postflop:如何用开源工具提升你的扑克决策水平
  • 如何实现Adobe Illustrator到Photoshop的无缝矢量转换?Ai2Psd脚本全解析
  • DeepSeek系列大模型技术全解析:从V3到R1再到Coder V2的深度技术演进
  • 告别官方库!手把手教你为ESP32移植STM32的ST7735驱动(附完整代码)
  • 上海研倍新材:深耕铝合金3D打印全链条,赋能高端制造轻量化未来 - 品牌企业推荐师(官方)
  • FastLED LED动画库高效实战指南:专业级微控制器灯光控制方案
  • 告别.bat文件!用更稳定的环境变量法配置Abaqus2019子程序开发环境(VS2019+Intel Fortran)
  • 用argparse给你的Python脚本加个‘说明书’:让小白用户也能轻松上手
  • 影刀RPA多平台铺货实战:上架前的数据准备如何通过AI实现全自动化?
  • 从项目复盘看Jetson Xavier NX:我们踩过的散热、内存和缺货这些坑,以及应对方案
  • 用C++模拟操作系统:手把手教你实现四种进程调度算法(附完整可运行代码)
  • 【Docker跨架构构建终极指南】:20年DevOps专家亲授ARM/AMD64/Apple Silicon一键多平台镜像构建实战
  • 高校大学生论文查重工具全面测评