在本章节中:
前言
Selenium 使用以下命令直接调用浏览器它提供:
- 在所录制场景中更忠实于用户操作
- 支持 Safari
- 支持 HTML 5
新的浏览器场景默认情况下使用 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”>
内容浏览。验证将是:
- 旧版:
xyz.html
(文字属性 href) - Selenium: 绝对路径
http://localhost:8080/sample/xyz.html
一个错误消息,例如 属性“href”验证失败:
在页面http://localhost:8080/sample/xyz.html”上找到的实际值必须等于期望值"xyz.html”
表示需要迁移。
要执行迁移,只需更新预期值。例如,如果遗留场景使用
您可以将其更新为
脚本对话框动作的弃用和迁移
以下处理对话框的操作仍然是允许的,但不能在录制期间创建:
- Answeronnextprompt
- Assertalert
- Assertprompt
- Assertconfirmation
- Choosecancelonnextconfirmation
新的录音将使用等效的 Selenium 命令(例如,“接受脚本对话框”,“关闭脚本对话框”,“键入脚本对话框”)。
在 IE、Chrome、Firefox 上迁移播放操作
如果使用了旧的脚本对话框操作(例如,Assertalert,Assertconfirmation,Assertprompt)并且选择了 Selenium 引擎进行播放,则无法应用“等待脚本对话框”。由于旧版引擎和 Selenium 引擎之间的差异,当使用 Selenium 播放这些旧版操作时,延迟打开的对话框将始终失败,并显示“无警报”错误(无论是否等待已添加到测试中脚本对话框等待条件)。
如果您使用的是 Selenium 引擎和较新的脚本对话框操作(接受脚本对话框、关闭脚本对话框),则“等待脚本对话框”将按预期方式运行。
您可以按照以下步骤迁移到较新的脚本对话框操作:
- 更新断言: 用接受脚本对话框替换 Assertalert。
- 更新确认:传统场景可能有 Assertconfirmation 用户操作;如果希望用户按“取消”, 他们可能还会执行选择取消再次确认。要迁移这些场景,请删除 Choosecancelonnextconfirmation 用户操作,然后将 Assertconfirmation 用户操作替换为 Accept Script 对话框或 Dismiss Script 对话框(取决于用户对话框中是按 “OK”还是 “Cancel”)。
- 更新提示:传统场景将具有 Assertprompt 用户操作;如果用户输入文本,他们可能还会有 Answeronnextprompt 操作。要迁移这些场景,请使用“接受脚本对话框”或“关闭脚本对话框”替换 Assertprompt(取决于用户对话框中是按 “OK”还是 “Cancel”)。如果旧场景包含 Answeronnextprompt,则应删除该用户操作,并应在“接受/关闭脚本对话框”用户操作之前立即添加“键入脚本对话框”。
- 更新附件/操作:附加到触发警报的操作(例如,单击“警报”)的任何浏览器验证工具或“等待异步请求”都应在该操作之后重新附加到“接受脚本对话框/关闭脚本对话框”。
迁移 Safari 上的播放操作
由于缺少等待条件,触发警报的操作附带的浏览器验证工具有时可能无法正常工作(由于使用了遗留脚本对话框操作并且选择了 Selenium 引擎,因此无法应用“等待脚本对话框”)。在这种情况下,将浏览器验证工具移至下一个操作。
Selenium 已知的错误和问题
兼容性问题
- 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 问题
不支持的命令
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 中的窗口,这可能会令人迷惑。
使用 Selenium WebDriver 进行旧版浏览器录制
使用 Selenium WebDriver 可以运行两个选项来运行旧版浏览器录制(在9.8之前创建):
- 将它们重新配置为使用 Selenium WebDriver,这涉及更改测试套件的配置。
- 临时使用 Selenium WebDriver 运行它们-无需更改测试套件配置; 而是,在“测试配置”级别覆盖了播放引擎设置。
注意旧场景可能包含不推荐使用的操作。 如果是这样,当您选择 Use Selenium for Playback 时,会打开一个警告对话框。看到此对话框后请查看场景并根据需要修改操作。有关更多详情,请查阅 Selenium Known Bugs and Issues 。此外,如果任何旧场景触发了 beforeunload 事件,则您需要添加新的用户操作(例如,接受脚本对话框,关闭脚本对话框)以处理出现的对话框。
重新配置旧版浏览器来录制 Selenium 回放
要重新配置旧版 Web 场景以使用 Selenium WebDriver 引擎进行回放,请执行以下操作:
- 打开要转换的场景的测试套件。
- 打开 Browser Playback Options 选项卡,然后启用 Selenium WebDriver 播放引擎选项。
运行使用 Configuration 的测试配置
默认情况下,测试配置被设置为使用测试套件级别指定的回放引擎来播放 web 场景。这允许使用单个测试配置来指定 Selenium 配置的混合测试以及遗留引擎配置的测试。
但是,在某些情况下,您可能想覆盖测试套件的播放引擎设置-例如,如果要在为 Selenium 重新配置旧的测试场景之前先查看它们如何与 Selenium 一起使用。在这些情况下,您可以运行配置为使用 Selenium WebDriver 播放引擎的任何测试配置。此选项在 Execution> Functional 选项卡中设置。
不管在测试场景级别配置了什么引擎,使用此配置运行的任何测试都将使用 Selenium WebDriver 进行回放。
使用旧版本机驱动程序
如果您希望在特定情况下使用旧版本机驱动程序:
- 使用旧版引擎的场景打开测试套件。
- 打开 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 Client Libraries (Includes Updating WebDriver Support for Firefox)。
- 升级 WebDriver 对所需浏览器(Chrome,Internet Explorer 或 Safari)的播放支持。查看以下部分:
更新 Selenium 客户端库(包括更新对 Firefox 的 WebDriver 支持)
无论您要使用哪种浏览器进行播放,以下始终都是更新 Selenium WebDriver 的第一步。在此过程中,升级 WebDriver 对 Firefox 的支持。
- 转到 http://search.maven.org。
- 从 maven.org 搜索并下载以下文件(使用每个文件的 jar 下载链接)。
- selenium-api-{x.y.z}.jar
- selenium-chrome-driver-{x.y.z}.jar
- selenium-firefox-driver-{x.y.z}.jar
- selenium-ie-driver-{x.y.z}.jar
- selenium-edge-driver- {x.y.z}.jar
- selenium-java-{x.y.z}.jar
- selenium-remote-driver-{x.y.z}.jar
- selenium-safari-driver-{x.y.z}.jar
- selenium-support-{x.y.z}.jar
- 从每个下载的 jar 文件中删除版本后缀(例如{x.y.x})。例如,应将
selenium-api-2.45.0.jar
重命名为selenium-api.jar
。 - 在 SOAtest 安装目录中,运行带有
–patch
参数的update.bat
脚本(Windows)或update
脚本(Linux 和 Mac),以及在先前步骤中下载并重命名的每个 jar 的路径。运行此脚本将用patch
参数引用的文件替换安装中的版本。通过在文件中附加.bak
扩展名,它还将备份安装中替换的文件。- 对于 Windows:运行
update.bat –patch /path/to/[name_of_file].jar
- 对于 Linux or Mac: Run
./update –patch /path/to/[name_of_file].jar
.请注意在某些版本的 Mac 上,您可能需要手动复制 Selenium 驱动程序。
- 对于 Windows:运行
例如,这是在 Windows 上运行脚本以升级 selenium-java.jar
文件并将文件下载到 %DOWNLOADS%
目录时的脚本输出:
c:\Program Files\Parasoft\SOAtest\9.9>update -patch %DOWNLOADS%\selenium-java.jar INFO: Patching file: C:\Program Files\Parasoft\SOAtest\9.9\eclipse\plugins\com.parasoft.xtest.libs.web_9.9.0.20141024\root\lib-java\org.seleniumhq.selenium\selenium-java.jar Update completed successfully
完成上述步骤后,可以通过转到 Firefox 加载项页面并检查版本号来确认 Firefox 的 Selenium WebDriver 已升级。
升级 WebDriver 对 Chrome 的支持(ChromeDriver)
要升级 WebDriver 对 Chrome 的支持,请按以下步骤更新 ChromeDriver:
- 如果尚未这样做,请按照 升级 Selenium 客户端库(包括更新 Firefox 的 WebDriver 支持)中所述升级 Selenium 客户端库。
- 转到 http://chromedriver.storage.googleapis.com/index.html.上的 ChromeDriver 下载页面。
- 下载最新版本(您可以单击 LATEST_RELEASE 链接以了解最新版本)。
- 下载适用于您的体系结构的 ChromeDriver .zip 文件:
- Windows 64 位和 32 位:chromedriver_win32.zip
- Mac 64-bit and 32-bit: chromedriver_mac32.zip
- Linux 64-bit: chromedriver_linux64.zip
- Linux 32-bit: chromedriver_linux32.zip
- 从这个 .zip 中提取
chromedriver.exe
文件。 - 在 SOAtest 安装目录中,用带有
–patch
参数和chromedriver.exe
文件路径运行update.bat
脚本(Windows)或update
脚本(Linux 和 Mac)。运行此脚本将用patch
参数引用的文件替换安装中的版本。通过在文件中附加.bak
扩展名,它还将备份安装中替换的文件。- Windows:运行
update.bat –patch /path/to/chromedriver.exe
- Linux or Mac: 运行
./update –patch /path/to/chromedriver
- Windows:运行
升级对 Internet Explorer 支持的 WebDriver(InternetExplorerDriver)
要升级 WebDriver 对 Internet Explorer 的支持,请按以下步骤更新 update InternetExplorerDriver:
- 如果尚未这样做,请按照 升级 Selenium 客户端库(包括更新 Firefox 的 WebDriver 支持)中所述升级 Selenium 客户端库。
- 转到 Selenium 下载页面((http://www.seleniumhq.org/download/),然后在 Internet Explorer Driver Server下下载32 bit Windows IE 版本(即使您运行的是64 版本(即使您运行的是64 位 Windows)。
- 从 .zip 中解压缩
IEDriverServer.exe
文件。 - 在 SOAtest 安装目录中,运行带有
–patch
参数和您下载的IEDriverServer.exe
文件的路径的update.bat
脚本(例如update.bat –patch /path/to/IEDriverServer.exe
)。运行此脚本会将安装中的版本替换为patch
参数指向的文件。通过在文件中附加.bak
扩展名,它还将备份安装中替换的文件。
现在,SOAtest 将使用 InternetExplorerDriver 的较新版本进行播放。
升级 WebDriver 对 Safari 的支持(SafariDriver)
Selenium 的 SafariDriver在 Safari 10及更高版本中已弃用。更新到最新版本的 Safari并使用 Apple 的 SafariDriver。如果无法升级 Safari,则可以按照以下步骤下载并安装最新的 Safari WebDriver Extension:
- 打开 Safari 浏览器,然后转到 Selenium 下载页面(http://www.seleniumhq.org/download/)
- 在 SafariDriver 下,下载
SafariDriver.safariextz.
的最新版本。 - 单击下载的文件以安装 Safari WebDriver 扩展。
升级 WebDriver 对 Microsoft Edge 的支持(EdgeDriver)
- 如果尚未这样做,请按照 升级 Selenium 客户端库(包括更新 Firefox 的 WebDriver 支持)中所述升级 Selenium 客户端库。
- 转到 Microsoft WebDriver 下载页(https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/),然后下载适用于您的 Edge 版本的驱动程序(有关版本支持的详细信息,请参阅Browser Support)。
- 将驱动程序保存到以下目录:
<SOATEST_INSTALL>\eclipse\plugins\com.parasoft.xtest.libs.web_<version>\root\browsers\webdriver\edge\x86\
在 Linux 上使用 soatestcli 运行 Selenium WebDriver 浏览器场景
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 的计算机(例如,通过 ssh)。
运行以下命令:
$ nohup Xvfb :99 > /dev/null 2>&1 &
启动Xvfb将显示:99。 所有日志录制信息都将被丢弃(发送到/ dev / null)。“ nohup”命令确保注销后 Xvfb 进程将继续运行。
注意每次重新启动计算机时,都需要记住在运行任何 soatestcli 之前启动另一个 Xvfb 进程。可以根据需要使用脚本来启动和停止 Xvfb 以避免这种情况,。
设置 DISPLAY 环境变量
浏览器使用 DISPLAY 环境变量来确定要使用显示的哪个 X。
如何设置环境变量将取决于您如何配置要运行的自动化作业。重要的是将 DISPLAY 变量设置为与启动 Xvfb 时使用的值相同。对于上面的示例,该值为“:99”。
如果创建了 Shell 脚本,或者需要在服务器上临时运行 soatestcli,则可以直接在脚本中设置变量。 例如,如果使用 bash:
$ DISPLAY=:99 soatestcli ...options...
Or:
$ export DISPLAY=:99
$ soatestcli ...options...
如果使用 Jenkins 运行自动化作业,则可以通过配置 Jenkins 节点的环境来为作业设置 DISPLAY 变量。(请注意,这将为该节点上运行的 所有作业设置变量,而不仅仅是您的 SOAtest 作业。)为此:
- 浏览到 Jenkins 网页。
- 登录。
- 单击将在其中运行 soatestcli 的 Jenkins 节点。
- 单击以配置节点。
- 在“节点属性”部分中,添加名称为“ DISPLAY”和所需值(例如“:99”)的环境变量。