...
Table of Contents | ||
---|---|---|
|
前言
Selenium 使用以下命令直接调用浏览器它提供:
...
新的浏览器场景默认情况下使用 Selenium。可以将任何现有的浏览器场景(在 WebDriver 支持之前录制)配置为在 Selenium 中播放(正如所述将旧版浏览器录制重新配置为在 Selenium 中播放)。
Selenium 引擎不会自动使用 X 虚拟帧缓冲区(Xvfb),但可以手动配置。例如,通过 Xvfb,您可以在 Linux 上的自动化 soatestcli 作业中运行 Selenium 浏览器场景而无需显示。详细参见在 Linux 上使用 soatestcli 运行 Selenium WebDriver 浏览器场景。
迁移的笔记
- Legacy 浏览器录制可能包含 Selenium 引擎不支持的操作。 详细参见 重新配置旧版浏览器以录制 Selenium 回放 。
- 由于 Selenium WebDriver 引擎使用 32 位版本的 Internet Explorer,因此在使用 Selenium 引擎时,将不会应用任何自定义的 Internet Explorer 可执行路径设置(例如,从 Preferences> Browser> IE Executable Path)。
- 现在不建议使用“等待异步请求”等待条件。无法添加新的等待条件,现有条件将继续起作用,除非您将关联的场景转换为 Selenium 播放。你可以将这些等待条件替换为“等待没有流量的间隔时间”等待条件。确保间隔足够长,以便发生异步请求。
- _No_Name _:# 窗口格式标识符可以在旧版浏览器记录中用于标识窗口,但是Selenium WebDriver 框架不支持此格式。要迁移这些记录,请重新运行它们,然后将其打开并使用下拉菜单指定正确的窗口。您可以使用窗口名称或窗口索引来标识窗口。
不推荐使用的命令(以及其他可用选项)
- Fireevent: 不再需要,因为 Selenium WebDriver 使用本机事件来模拟用户行为。
- Keydown: 仅支持值为“ Shift”,“ Control”或“ Alt”的文本输入。由于 Selenium WebDriver 对用户行为的本机模拟,因此不需要其他关键修饰符。
- Keypress: 不再需要,因为 Selenium WebDriver 使用本机事件来模拟用户行为。
- Keyup: 仅支持值为“ Shift”,“ Control”或“ Alt”的文本输入。由于 Selenium WebDriver 对用户行为的本机模拟,因此不需要其他关键修饰符。
- Mousedown: 不再需要,因为 Selenium WebDriver 使用本机事件来模拟用户行为。
- Mousemove: 不再需要,因为 Selenium WebDriver 使用本机事件来模拟用户行为。
- Mouseover: 不再需要,因为 Selenium WebDriver 使用本机事件来模拟用户行为。
- Mouseup: 不再需要,因为 Selenium WebDriver 使用本机事件来模拟用户行为。
- New Browser: 在播放期间不再可能产生第二个浏览器。
- Other: 不再可能使用 Other 和 UserCustomizableOptions.js 编写自定义命令。
- Type (Without Focus): 不再需要,因为 Selenium WebDriver 使用本机事件来模拟用户行为。
- Type Password (Without Focus): 不再需要,因为 Selenium WebDriver 使用本机事件来模拟用户行为。
迁移与隐藏元素交互的动作
传统引擎可以与隐藏元素进行交互。但是,由于 Selenium 引擎尝试模拟真实用户,因此它仅与可见元素进行交互。因此,如果遗留场景与隐藏元素交互,可能需要添加中间步骤来显示隐藏元素,然后才能使用 elenium 成功运行该场景。最常见的方法是单击使隐藏元素变得可见的元素。
错误信息如 无法执行用户操作:
元素当前不可见
可能表明需要迁移(它还可能表明应用程序没有按照预期的方式运行)。
迁移验证 Use Relative URLs
为了验证 href
或 src
属性,如果在定位器中给出了相对路径,旧版驱动程序会提取 URL 的相对路径。但是,Selenium 引擎提取绝对路径而不是相对路径。例如,假设您在http://localhost:8080
域上有<a href=”xyz.html”>
内容浏览。验证将是:
...
要执行迁移,只需更新预期值。例如,如果遗留场景使用
您可以将其更新为
脚本对话框动作的弃用和迁移
以下处理对话框的操作仍然是允许的,但不能在录制期间创建:
...
新的录音将使用等效的 Selenium 命令(例如,“接受脚本对话框”,“关闭脚本对话框”,“键入脚本对话框”)。
在 IE、Chrome、Firefox 上迁移播放操作
如果使用了旧的脚本对话框操作(例如,Assertalert,Assertconfirmation,Assertprompt)并且选择了 Selenium 引擎进行播放,则无法应用“等待脚本对话框”。由于旧版引擎和 Selenium 引擎之间的差异,当使用 Selenium 播放这些旧版操作时,延迟打开的对话框将始终失败,并显示“无警报”错误(无论是否等待已添加到测试中脚本对话框等待条件)。
...
- 更新断言: 用接受脚本对话框替换 Assertalert。
- 更新确认:传统场景可能有 Assertconfirmation 用户操作;如果希望用户按“取消”, 他们可能还会执行选择取消再次确认。要迁移这些场景,请删除 Choosecancelonnextconfirmation 用户操作,然后将 Assertconfirmation 用户操作替换为 Accept Script 对话框或 Dismiss Script 对话框(取决于用户对话框中是按 “OK”还是 “Cancel”)。
- 更新提示:传统场景将具有 Assertprompt 用户操作;如果用户输入文本,他们可能还会有 Answeronnextprompt 操作。要迁移这些场景,请使用“接受脚本对话框”或“关闭脚本对话框”替换 Assertprompt(取决于用户对话框中是按 “OK”还是 “Cancel”)。如果旧场景包含 Answeronnextprompt,则应删除该用户操作,并应在“接受/关闭脚本对话框”用户操作之前立即添加“键入脚本对话框”。
- 更新附件/操作:附加到触发警报的操作(例如,单击“警报”)的任何浏览器验证工具或“等待异步请求”都应在该操作之后重新附加到“接受脚本对话框/关闭脚本对话框”。
迁移 Safari 上的播放操作
由于缺少等待条件,触发警报的操作附带的浏览器验证工具有时可能无法正常工作(由于使用了遗留脚本对话框操作并且选择了 Selenium 引擎,因此无法应用“等待脚本对话框”)。在这种情况下,将浏览器验证工具移至下一个操作。
Anchor | ||||
---|---|---|---|---|
|
兼容性问题
- Chrome 28+ 和 Selenium 的 chromedriver 与 RHEL/!CentOS 6.x.不兼容。尽管有警告报告,CentOS 7.0(64位)也可以工作。可以使用
setsebool -P unconfined_chrome_sandbox_transition 0
从命令行禁用此警告。
Selenium 脚本对话框问题
- Selenium WebDriver 无法随机接受脚本对话框。当测试尝试打开对话框并且“等待脚本对话框”报告错误,即在指定的超时时间内(默认为10秒)脚本对话框不存在时,会发生这种情况。可以通过增加等待时间来解决此问题。
- 在 Chrome 中,Selenium 无法与由于“导航”,“后退”或“前进”操作而打开的 onBeforeUnload 对话框进行交互。
- 在 Chrome 和 Internet Explorer 中,Selenium 无法与在唯一浏览器窗口上调用“关闭”时打开的 onBeforeUnload 对话框进行交互。
- Selenium WebDriver 无法接受在新窗口中打开的警报。
- SOAtest 的 Chrome 或 Safari Selenium WebDriver 框架当前不支持用 JavaScript 函数“ showModalDialog”打开的对话框。依赖此功能的 Web 应用程序应使用 Parasoft 的本机引擎或 Internet Explorer 或 Firefox。
其他问题
- 对于“ click”用户操作,由于 Selenium WebDriver 中的问题,仅在 Chrome 中支持键输入修饰符(“ Shift”,“ Ctrl”和“ Alt”)。详见https://code.google.com/p/selenium/issues/detail?id=4385.
- 通过一个用户操作打开多个窗口时,Selenium WebDriver 可能会为 Chrome 和 Internet Explorer 返回有顺序的错误的窗口处理程序。仅在未命名窗口的情况下可能会发生这种情况。解决方法是使用命名窗口
- 无法在 Safari 或 Internet Explorer 中单击区域元素。详见 https://code.google.com/p/selenium/issues/detail?id=2354.
- 在 Internet Explorer 中,如果应用程序使用新的实现覆盖元素上的默认“ fireEvent”实现,则 Selenium 将在对该元素执行操作时触发新的实现。这与默认的浏览器行为不同,在默认的浏览器行为中,即使 Web 应用程序更改了“ fireEvent”方法,也会调用默认的“ fireEvent”实现。
- Selenium 不支持以无头模式播放场景。如果选择无头模式,则场景仍将以可见模式播放。
Safari-Specific 问题
Anchor | ||||
---|---|---|---|---|
|
不支持的命令
Safari 中的 Selenium WebDriver 引擎不支持以下命令。这是由于 SafariDriver 中的限制(https://code.google.com/p/selenium/issues/detail?id=4136)
- DoubleClick
- Dragdrop
- Go Back
- Go Forward
- Hover
- Keydown
- Keyup
- Right-click
不支持的功能
由于 Selenium 的限制,以下 SOAtest 功能会受到影响:
- 播放场景时不录制流量。
- 不支持 NTLM /Digest/Basic 身份验证。
- 不支持配置和验证负载测试。
- 不支持将工具附加到 HTTP 通信。
- 在经过配置的时间间隔后,无论浏览器或服务器是否正在发送流量,“等待无流量间隔”等待条件将始终成功。
- “等待异步请求”等待条件不起作用。
- 不支持使用不受信任证书的站点。
其他问题
- 每次运行时 Safari 7 +,SafariDriver 不会在自动安装浏览器扩展程序,因为安装扩展程序需要钥匙串授权。解决方法是手动安装扩展。
- Safari 7.10(2014 年 9 月中旬发布),有必要进入 Safari 偏好设置并启用 WebDriver 插件。
- Safari 仅对导航操作支持等待页面加载超时。不支持 Safari 的 WebDriver pageloadTimeout。
- Safari 中的警报始终被禁止,不会作为异常报告(用户永远不会收到“意外脚本对话框”)。现有的接受脚本对话框/关闭脚本对话框和键入脚本对话框工具将始终成功。选择“接受”或“关闭脚本对话框”会产生确认对话框预期的效果,而“键入脚本对话框”会产生提示对话框预期的效果。 但这些对话框无法显示。
- 不支持设置文件输入的值。
- 如果您把焦点放在于文本输入元素(用JavaScript),更改其值,然后焦点到另一个元素,则不会触发“更改”事件。
- 如果启用了“阻止弹出窗口”,在 Safari 中播放场景时,无法用 window.open()打开窗口。您可以禁用“阻止弹出窗口”来解决此问题。
- 如果将 Safari 设置为请求带有片段的相同 URI,它将导致 WebDriver 挂起。
- 不支持RTF编辑器。传统引擎也是如此。
- 当调用 switchTo().window()时,Safari 浏览器实际上将切换到 GUI 中的窗口,这可能会令人迷惑。
Anchor | ||||
---|---|---|---|---|
|
使用 Selenium WebDriver 可以运行两个选项来运行旧版浏览器录制(在9.8之前创建):
...
注意旧场景可能包含不推荐使用的操作。 如果是这样,当您选择 Use Selenium for Playback 时,会打开一个警告对话框。看到此对话框后请查看场景并根据需要修改操作。有关更多详情,请查阅 关于 Selenium WebDriver 引擎 Selenium Known Bugs and Issues 。此外,如果任何旧场景触发了 beforeunload 事件,则您需要添加新的用户操作(例如,接受脚本对话框,关闭脚本对话框)以处理出现的对话框。
重新配置旧版浏览器来录制 Selenium 回放
Anchor | ||||
---|---|---|---|---|
|
要重新配置旧版 Web 场景以使用 Selenium WebDriver 引擎进行回放,请执行以下操作:
- 打开要转换的场景的测试套件。
- 打开 Browser Playback Options 选项卡,然后启用 Selenium WebDriver 播放引擎选项。
运行使用 Configuration 的测试配置
默认情况下,测试配置被设置为使用测试套件级别指定的回放引擎来播放 web 场景。这允许使用单个测试配置来指定 Selenium 配置的混合测试以及遗留引擎配置的测试。
...
不管在测试场景级别配置了什么引擎,使用此配置运行的任何测试都将使用 Selenium WebDriver 进行回放。
Anchor | ||||
---|---|---|---|---|
|
如果您希望在特定情况下使用旧版本机驱动程序:
- 使用旧版引擎的场景打开测试套件。
- 打开 Browser Playback Options 选项卡,然后启用 Parasoft native driver (legacy) 播放引擎选项。
另外,您可以创建并应用一个使用本机驱动程序运行 Web 场景的测试配置,而不管在测试场景级别配置了什么引擎。 此选项在 Execution> Functional 选项卡中设置。
手动升级到 Selenium WebDriver 的新版本
您可以先升级 SOAtest 的 Selenium WebDriver 版本,然后再发布新的 SOAtest 版本, 但是请注意,Parasoft 并未正式支持或测试使用比 SOAtest 随附的版本更高的 Selenium WebDriver 版本。因此,在运行较新版本的 Selenium WebDriver 时,您可能会遇到不兼容的情况。
...
- 更新 Selenium 客户端(这还将更新 WebDriver 对 Firefox 回放的支持)。无论您希望 WebDrive 使用哪种浏览器进行播放,都需要执行此步骤。有关更多详情,请查阅 关于 Upgrading Selenium WebDriver 引擎Client Libraries (Includes Updating WebDriver Support for Firefox)。
- 升级 WebDriver 对所需浏览器(Chrome,Internet Explorer 或 Safari)的播放支持。查看以下部分:
Table of Content Zone | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||
更新 Selenium 客户端库(包括更新对 Firefox 的 WebDriver 支持)无论您要使用哪种浏览器进行播放,以下始终都是更新 Selenium WebDriver 的第一步。在此过程中,升级 WebDriver 对 Firefox 的支持。
例如,这是在 Windows 上运行脚本以升级
完成上述步骤后,可以通过转到 Firefox 加载项页面并检查版本号来确认 Firefox 的 Selenium WebDriver 已升级。
要升级 WebDriver 对 Chrome 的支持,请按以下步骤更新 ChromeDriver:
要升级 WebDriver 对 Internet Explorer 的支持,请按以下步骤更新 update InternetExplorerDriver:
现在,SOAtest 将使用 InternetExplorerDriver 的较新版本进行播放。
Selenium 的 SafariDriver在 Safari 10及更高版本中已弃用。更新到最新版本的 Safari并使用 Apple 的 SafariDriver。如果无法升级 Safari,则可以按照以下步骤下载并安装最新的 Safari WebDriver Extension:
升级 WebDriver 对 Microsoft Edge 的支持(EdgeDriver)
|
在 Linux 上使用 soatestcli 运行 Selenium WebDriver 浏览器场景
Anchor | ||||
---|---|---|---|---|
|
SOAtest 运行浏览器测试时,它将作为单独的进程启动用于测试的浏览器(例如 Firefox或 Chrome)。在 Linux 上,浏览器进程必须连接到 X 显示器。在 UI 运行 SOAtest 时,因为浏览器使用的显示与 SOAtest 相同,所以它可以无缝运行。通过自动化操作或在未连接物理显示器的终端上运行 soatestcli 时,对于使用 Selenium WebDriver 播放引擎的浏览器场景,需要进行额外的设置。
启动虚拟 X 服务器(Xvfb)以创建显示
在要运行 soatestcli 的计算机上安装 Xvfb。(或者,您可以使用 SOAtest 打包的 Xvfb_Linux,但是您可能需要尝试一些选项才能使它们运行。详情参见 Getting Xvfb working independently of SOAtest)
使用 Xvfb 最简单的方法是启动一个进程,所有 SOAtest 运行都会使用这个进程。为此:
...
注意每次重新启动计算机时,都需要记住在运行任何 soatestcli 之前启动另一个 Xvfb 进程。可以根据需要使用脚本来启动和停止 Xvfb 以避免这种情况,。
设置 DISPLAY 环境变量
浏览器使用 DISPLAY 环境变量来确定要使用显示的哪个 X。
...