在本章节中:

前言

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

为了验证 hrefsrc 属性,如果在定位器中给出了相对路径,旧版驱动程序会提取 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 脚本对话框问题

其他问题

  • 对于“ 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 通信。
  • 在经过配置的时间间隔后,无论浏览器或服务器是否正在发送流量,“等待无流量间隔”等待条件将始终成功。
  • “等待异步请求”等待条件不起作用。
  • 不支持使用不受信任证书的站点。

其他问题

使用 Selenium WebDriver 进行旧版浏览器录制

使用 Selenium WebDriver 可以运行两个选项来运行旧版浏览器录制(在9.8之前创建):

  • 将它们重新配置为使用 Selenium WebDriver,这涉及更改测试套件的配置。
  • 临时使用 Selenium WebDriver 运行它们-无需更改测试套件配置; 而是,在“测试配置”级别覆盖了播放引擎设置。

注意旧场景可能包含不推荐使用的操作。 如果是这样,当您选择 Use Selenium for Playback 时,会打开一个警告对话框。看到此对话框后请查看场景并根据需要修改操作。有关更多详情,请查阅 Selenium Known Bugs and Issues 。此外,如果任何旧场景触发了 beforeunload 事件,则您需要添加新的用户操作(例如,接受脚本对话框,关闭脚本对话框)以处理出现的对话框。

重新配置旧版浏览器来录制 Selenium 回放

要重新配置旧版 Web 场景以使用 Selenium WebDriver 引擎进行回放,请执行以下操作:

  1. 打开要转换的场景的测试套件。
  2. 打开 Browser Playback Options 选项卡,然后启用 Selenium WebDriver  播放引擎选项。
     

运行使用 Configuration 的测试配置

默认情况下,测试配置被设置为使用测试套件级别指定的回放引擎来播放 web 场景。这允许使用单个测试配置来指定 Selenium 配置的混合测试以及遗留引擎配置的测试。 

但是,在某些情况下,您可能想覆盖测试套件的播放引擎设置-例如,如果要在为 Selenium 重新配置旧的测试场景之前先查看它们如何与 Selenium 一起使用。在这些情况下,您可以运行配置为使用 Selenium WebDriver 播放引擎的任何测试配置。此选项在 Execution> Functional 选项卡中设置。

不管在测试场景级别配置了什么引擎,使用此配置运行的任何测试都将使用 Selenium WebDriver 进行回放。

使用旧版本机驱动程序

如果您希望在特定情况下使用旧版本机驱动程序:

  1. 使用旧版引擎的场景打开测试套件。
  2. 打开 Browser Playback Options 选项卡,然后启用 Parasoft native driver (legacy) 播放引擎选项。

     

另外,您可以创建并应用一个使用本机驱动程序运行 Web 场景的测试配置,而不管在测试场景级别配置了什么引擎。  此选项在 Execution> Functional 选项卡中设置。

手动升级到 Selenium WebDriver 的新版本

您可以先升级 SOAtest 的 Selenium WebDriver 版本,然后再发布新的 SOAtest 版本, 但是请注意,Parasoft 并未正式支持或测试使用比 SOAtest 随附的版本更高的 Selenium WebDriver 版本。因此,在运行较新版本的 Selenium WebDriver 时,您可能会遇到不兼容的情况。

要更新,您需要:

  1. 更新 Selenium 客户端(这还将更新 WebDriver 对 Firefox 回放的支持)。无论您希望 WebDrive 使用哪种浏览器进行播放,都需要执行此步骤。有关更多详情,请查阅 Upgrading Selenium Client Libraries (Includes Updating WebDriver Support for Firefox)
  2. 升级 WebDriver 对所需浏览器(Chrome,Internet Explorer 或 Safari)的播放支持。查看以下部分:

更新 Selenium 客户端库(包括更新对 Firefox 的 WebDriver 支持)

无论您要使用哪种浏览器进行播放,以下始终都是更新 Selenium WebDriver 的第一步。在此过程中,升级 WebDriver 对 Firefox 的支持。 

  1. 转到 http://search.maven.org
  2. 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



  3. 从每个下载的 jar 文件中删除版本后缀(例如{x.y.x})。例如,应将 selenium-api-2.45.0.jar 重命名为 selenium-api.jar
  4. 在 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 上运行脚本以升级  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:

  1. 如果尚未这样做,请按照 升级 Selenium 客户端库(包括更新 Firefox 的 WebDriver 支持)中所述升级 Selenium 客户端库。
  2. 转到 http://chromedriver.storage.googleapis.com/index.html.上的 ChromeDriver 下载页面。
  3. 下载最新版本(您可以单击 LATEST_RELEASE 链接以了解最新版本)。
  4. 下载适用于您的体系结构的 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
  5. 从这个 .zip 中提取 chromedriver.exe 文件。
  6. 在 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

升级对 Internet Explorer 支持的 WebDriver(InternetExplorerDriver)

要升级 WebDriver 对 Internet Explorer 的支持,请按以下步骤更新 update InternetExplorerDriver:

  1. 如果尚未这样做,请按照 升级 Selenium 客户端库(包括更新 Firefox 的 WebDriver 支持)中所述升级 Selenium 客户端库。
  2. 转到 Selenium 下载页面((http://www.seleniumhq.org/download/),然后在 Internet Explorer Driver Server下下载32 bit Windows IE 版本(即使您运行的是64 版本(即使您运行的是64 位 Windows)
  3. 从 .zip 中解压缩 IEDriverServer.exe文件。
  4. 在 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:

  1. 打开 Safari 浏览器,然后转到 Selenium 下载页面(http://www.seleniumhq.org/download/) 
  2. 在 SafariDriver 下,下载 SafariDriver.safariextz. 的最新版本。



  3. 单击下载的文件以安装 Safari WebDriver 扩展。

升级 WebDriver 对 Microsoft Edge 的支持(EdgeDriver)

  1. 如果尚未这样做,请按照 升级 Selenium 客户端库(包括更新 Firefox 的 WebDriver 支持)中所述升级 Selenium 客户端库。
  2. 转到 Microsoft WebDriver 下载页(https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/),然后下载适用于您的 Edge 版本的驱动程序(有关版本支持的详细信息,请参阅Browser Support)。
  3. 将驱动程序保存到以下目录:

    <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 运行都会使用这个进程。为此:

  1. 登录到运行 soatestcli 的计算机(例如,通过 ssh)。
  2. 运行以下命令:
    $ 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 作业。)为此:

  1. 浏览到 Jenkins 网页。
  2. 登录。
  3. 单击将在其中运行 soatestcli 的 Jenkins 节点。
  4. 单击以配置节点。
  5. 在“节点属性”部分中,添加名称为“ DISPLAY”和所需值(例如“:99”)的环境变量。
  • No labels