章节目录:

前言

SOAtest 使用 Selenium WebDriver 进行 web 测试。Selenium WebDriver 可直接调用浏览器的 WebDriver,充分利用浏览器对自动化的原生支持。SOAtest 2020.1 及更早版本还配备了 Parasoft 旧版引擎,该引擎支持 Parasoft 专用实现,用于回放浏览器场景。旧版 Parasoft 引擎已在 SOAtest、Virtualize 和 CTP 2020.2 版本移除。如果您基于旧版本的 SOAtest 升级,那么在多数情况下,使用 Parasoft 旧版引擎录制和配置的用于回放的 web 场景仍可正常工作。不过,一些测试可能会失败,因此需要进行更新。主题提供了有关基于使用旧版 Parasoft 引擎的 SOAtest 版本升级后使用 Selenium WebDriver 引擎的信息。

升级注意事项

该部分介绍与使用 Selenium WebDriver 引擎相关的更改。    

常规注意事项

  • 不支持“等待异步请求”等待条件,应更改为“等待无通讯报文间隔”等待条件。应确保间隔时间足以等待异步请求出现。
  • 不支持 __No_Name_:# 窗口格式标识符。使用这种格式重新运行并打开录制的情景。通过下拉菜单指定正确的窗口。您可以使用窗口名称或窗口索引来标识窗口。

已弃用的浏览器命令 

下列命令可在 Parasoft 旧版引擎中使用,但已被 Selenium WebDriver 取代或已被弃用。

旧版命令替换命令

Fireevent

Mousedown

Mousemove

Mouseover

Mouseup

Type (Without Focus)

Type Password (Without Focus)

不适用 - Selenium WebDriver 使用原生事件来模拟用户行为。

Keydown

Keypress

Keyup

仅支持 SHIFT、CONTROL 和 ALT 文本输入值。没有必要使用其他键修饰符。

New Browser

不适用 - 不支持在回放过程中启动第二个浏览器。
Other不适用 - 不支持使用 Other 和 UserCustomizableOptions.js 编写自定义命令。

与隐藏元素交互

旧版引擎能够与隐藏元素交互。而 Selenium WebDriver 引擎则尝试模拟真实用户,只与可见元素进行交互。如果您的旧场景与隐藏元素交互,请添加中间步骤以显示隐藏元素,这样您就可以成功运行带有隐藏元素的场景。最常见的方法是点击一个元素,使隐藏的元素变得可见。

例如,“无法执行用户操作:元素当前不可见”之类的错误信息可能表明需要进行迁移(也可能表明应用程序行为不符合预期)。 

使用相对 URL 的验证

旧版引擎在验证 hrefsrc 属性时会提取相对路径。Selenium WebDriver 引擎则提取绝对路径。例如,假设您的 http://localhost:8080 域上存在包含 <a href=”xyz.html”>  的浏览器内容。验证结果将为 http://localhost:8080/sample/xyz.html(绝对路径)。

例如““href”属性验证失败:在‘http://localhost:8080/sample/xyz.html’页面上发现的实际值必须等于预期值‘xyz.html’”表明需要进行迁移。 

如果收到此消息,请更新预期值,例如:

脚本对话框操作

不支持以下操作:

  • Answeronnextprompt
  • Assertalert
  • Assertprompt
  • Assertconfirmation
  • Choosecancelonnextconfirmation

使用以下等效 Selenium 命令执行相同的操作:

  • Update Alerts:Accept Script Dialog 替换 Assertalert
  • Update Confirms:根据用户操作是在对话框中点击 OK 还是取消使用 Accept Script Dialog 或 Dismiss Script Dialog 来替换 AssertconfirmationChoosecancelonnextconfirmation 已删除,不再有使用的必要。
  • Update Prompts:根据用户操作是在对话框中点击 OK 还是 取消,使用 Accept Script Dialog 或 Dismiss Script Dialog 来替换 Assertprompt 和 Answeronnextprompt 用户操作。
  • Update Attached/Actions:任何与触发警告的操作(如点击‘alert’)关联的浏览器验证工具都应该与触发警告的操作发生之后的 Accept Script DialogDismiss Script Dialog 操作关联。

已知的 Selenium Bug 和问题

  • Chrome 28+ 和 Selenium 的 chromedriver 与 RHEL/!CentOS 6.x 不兼容。CentOS 7.0 (64-bit) 可以正常运行,但会发出警告。该警告可通过 setsebool -P unconfined_chrome_sandbox_transition 0 命令行禁用。
  • Selenium WebDriver 会不时出现无法接受脚本对话框的问题。当测试尝试打开对话框,而“等待脚本对话框”在指定超时(默认为 10 秒)内报告脚本对话框不存在的错误时,就会出现这个问题。该问题可通过增加等待时间解决。详情请参阅 https://groups.google.com/forum/#!topic/selenium-developer-activity/It-RyMNBrpw
  • 在 Chrome 浏览器中,Selenium 无法与通过导航、后退或前进操作打开的 onBeforeUnload 对话框进行交互。详情请参阅 https://code.google.com/p/chromedriver/issues/detail?id=29
  • 在 Chrome 浏览器中,Selenium 无法与在唯一的浏览器窗口上调用“关闭”时打开的 onBeforeUnload 对话框交互。
  • Selenium WebDriver 无法接受在新窗口中打开的警告。详情请参阅 https://code.google.com/p/selenium/issues/detail?id=7807
  • Chrome 浏览器不支持模态对话框(使用 JavaScript 函数“showModalDialog”打开的对话框)。依赖该功能的 web 应用程序应使用 Firefox 浏览器。 
  • 由于 Selenium WebDriver 中存在的一个问题,对于“点击”用户操作,仅在 Chrome 浏览器中支持键修饰符(SHIFT、CTRL 和 ALT)。详情请参阅 https://code.google.com/p/selenium/issues/detail?id=4385。 
  • 当一个用户操作打开多个窗口时,Selenium WebDriver 可能会返回错误的 Chrome 浏览器窗口处理程序顺序。只有在未命名窗口的情况下才会出现这种情况。使用命名的窗口可避免该问题。
  • Selenium 不支持在无头模式下回放场景。如果选择了无头模式,场景仍将在可见模式下回放。

已知的 Safari 问题

  • 回放场景时不会记录通讯报文。
  • 不支持 NTLM/Digest/Basic 身份验证。
  • 不支持配置和负载测试验证。
  • 不支持为 HTTP 通讯报文附加工具。
  • 无论浏览器或服务器是否正在发送通讯报文,“等待无通讯报文间隔”等待条件总是会在配置的间隔时间结束后成功。
  • “等待异步请求”等待条件不起作用。
  • 不支持使用不受信任证书的网站。
  • 在 Safari 中切换多个窗口或区域时,用户可能会遇到测试不稳定的问题。

手动升级到 Selenium WebDriver 新版本

您可以在 SOAtest 新版本发布之前升级 SOAtest 的 Selenium WebDriver 版本如果改用与 SOAtest 随附版本不同的 Selenium WebDriver 版本,由于Parasoft 未提供官方支持或进行测试,在运行较新版本的 Selenium WebDriver 时可能会遇到不兼容的问题。

要进行升级,您需要:

  1. 升级 Selenium 客户端,同时升级 Firefox 浏览器回放的 WebDriver 支持。无论您想要 WebDriver 使用哪种浏览器进行回放,都需要执行此步骤。详情请参阅:升级 Firefox 的 WebDriver 支持(GeckoDriver)
  2. 升级所需浏览器的 WebDriver 回放支持。请参阅以下部分:

升级 Firefox 的 WebDriver 支持(GeckoDriver)

要升级 Firefox 浏览器的 WebDriver 支持,请按以下步骤更新 GeckoDriver:

  1. 访问 GeckoDriver 下载页面  https://github.com/mozilla/geckodriver/releases
  2. 下载适用于您的架构的 GeckoDriver:
    1. Windows 64-bit 与 32-bit:geckodriver-<VERSION>-win64.zip
    2. Mac 64-bit:geckodriver-<VERSION>-macos.tar.gz
    3. Linux 64-bit:geckodriver-<VERSION>-linux64.tar.gz
  3. .zip 压缩包中提取 geckodriver 可执行文件。
  4. 在 SOAest 安装目录下,运行 update.bat 脚本(Windows)或 update 脚本(Linux 和 Mac),其中包含 –patch 参数和 geckodriver 可执行文件的路径。运行此脚本将使用 patch 参数引用的文件替换安装中的版本。它还会备份安装中被替换的文件,为文件添加 .bak 扩展名。
    • Windows:运行 update.bat –patch /path/to/geckodriver.exe
    • Linux 或 Mac:运行 ./update –patch /path/to/geckodriver

升级 Chrome 的 WebDriver 支持(ChromeDriver)

要升级 Chrome 浏览器的 WebDriver 支持,请按以下步骤更新 ChromeDriver:

  1. 如果尚未升级 Selenium 客户端库,请按照升级 Firefox 的 WebDriver 支持 (GeckoDriver) 中的说明进行升级。
  2. 访问 ChromeDriver下载页面 http://chromedriver.storage.googleapis.com/index.html
  3. 下载最新版本(可点击 LATEST_RELEASE 链接查看最新版本)。
  4. 下载适用于您的架构的 ChromeDriver .zip 文件:
    • Windows 64-bit 与 32-bit:chromedriver_win32.zip
    • Mac 64-bit:chromedriver_mac64.zip
    • Linux 64-bit:chromedriver_linux64.zip
  5. .zip 压缩包中提取 chromedriver 可执行文件。
  6. 在 SOAtest 安装目录下,运行 update.bat 脚本(Windows)或 update 脚本(Linux 和 Mac),其中包含 –patch 参数和 chromedriver 可执行文件的路径。运行此脚本将使用 patch 参数引用的文件替换安装中的版本。它还会备份安装中被替换的文件,为文件添加 .bak 扩展名。
    • Windows:运行 update.bat –patch /path/to/chromedriver.exe
    • Linux 或 Mac:运行 ./update –patch /path/to/chromedriver

升级 Microsoft Edge 的 WebDriver 支持(EdgeDriver)

要升级 Microsoft Edge 浏览器的 WebDriver 支持,请按以下步骤更新 EdgeDriver:

  1. 如果尚未升级 Selenium 客户端库,请按照升级 Firefox 的 WebDriver 支持 (GeckoDriver) 中的说明进行升级。
  2. 访问 Microsoft WebDriver 下载页面(https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)并为您的 Edge 版本下载驱动程序(有关版本支持的详细信息,请参阅浏览器支持)。
  3. 将驱动程序保存到相应操作系统的目录中:
    • Windows:<SOATEST_INSTALL>\plugins\com.parasoft.ptest.libs.web_<version>\root\browsers\webdriver\edge\windows\x86
    • Linux:<SOATEST_INSTALL>\plugins\com.parasoft.ptest.libs.web_<version>\root\browsers\webdriver\edge\linux\x86_64
    • MacOS:<SOATEST_INSTALL>\plugins\com.parasoft.ptest.libs.web_<version>\root\browsers\webdriver\edge\mac\x86_64

在 Linux 上使用 soatestcli 运行 Selenium WebDriver 浏览器场景

SOAtest 运行浏览器测试时会将用于测试的浏览器(例如 Firefox 或 Chrome)作为一个单独的进程启动。在 Linux 上,浏览器进程必须连接到 X 显示。在用户界面运行 SOAtest 时,由于浏览器使用与 SOAtest 相同的显示,因此可以无缝运行。通过自动化任务或在未连接物理显示器的终端中运行 soatestcli 时,需要额外对使用 Selenium WebDriver 回放引擎的浏览器场景进行设置。

启动虚拟 X 服务器 (Xvfb) 创建显示

Selenium 引擎不会自动使用 X 虚拟帧缓存(Xvfb),但可以手动配置。例如,Xvfb 无需显示即可在 Linux 上的自动 soatestcli 任务中运行 Selenium 浏览器场景。在运行 soatestcli 的计算机上安装 Xvfb。(或者,您也可以使用与 SOAtest 一起打包的 Xvfb_Linux,但可能需要对各选项进行试验才能使其正常工作。请参阅让 Xvfb 独立于 SOAtest 工作了解更多信息。)

使用 Xvfb 最简单方法是启动一个供所有 SOAtest 运行使用的进程。操作步骤:

  1. 登录运行 soatestcli 的计算机(例如通过 ssh)。
  2. 运行命令,例如:
    $ nohup Xvfb :99 > /dev/null 2>&1 &

在显示 :99 上启动 Xvfb。  所有日志信息都会被丢弃(发送到 /dev/null)。“nohup”命令可确保 Xvfb 进程在您注销后继续运行。

请注意,每次重启计算机时,都需要在运行 soatestcli 之前另外启动一个 Xvfb 进程。要想避免这种情况,可以使用脚本按需启动和停止 Xvfb。

设置 DISPLAY 环境变量

浏览器根据 DISPLAY 环境变量来决定使用哪种 X 显示。

如何设置环境变量取决于您如何配置自动化任务的运行方式。关键是将 DISPLAY 变量设置为与启动 Xvfb 时相同的值。在上述示例中,该值为“:99”。

如果已创建 shell 脚本,或者需要在服务器上临时运行 soatestcli,则可以直接在脚本中设置变量。例如,如果使用 bash: 

$ DISPLAY=:99 soatestcli ...options...

或:

$ export DISPLAY=:99
$ soatestcli ...options...

如果使用 Jenkins 运行自动化任务,则可以通过配置 Jenkins 节点的环境为任务设置 DISPLAY 变量。(请注意,这将会设置节点上运行的所有任务的变量,而不仅仅是您的 SOAtest 任务。)操作步骤:

  1. 访问 Jenkins 网页。
  2. 登录。
  3. 点击运行 soatestcli 的 Jenkins 节点。
  4. 点击进行节点配置。
  5. 在“节点属性”部分,添加一个名为“DISPLAY”的环境变量和所需的值(如“:99”)。
  • No labels