章节目录:
前言
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 的验证
旧版引擎在验证 href
或 src
属性时会提取相对路径。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
来替换Assertconfirmation
。Choosecancelonnextconfirmation
已删除,不再有使用的必要。 - Update Prompts:根据用户操作是在对话框中点击 OK 还是 取消,使用
Accept Script Dialog
或Dismiss Script Dialog
来替换Assertprompt
和Answeronnextprompt
用户操作。 - Update Attached/Actions:任何与触发警告的操作(如点击‘alert’)关联的浏览器验证工具都应该与触发警告的操作发生之后的
Accept Script Dialog
或Dismiss 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 时可能会遇到不兼容的问题。
要进行升级,您需要:
- 升级 Selenium 客户端,同时升级 Firefox 浏览器回放的 WebDriver 支持。无论您想要 WebDriver 使用哪种浏览器进行回放,都需要执行此步骤。详情请参阅:升级 Firefox 的 WebDriver 支持(GeckoDriver)。
- 升级所需浏览器的 WebDriver 回放支持。请参阅以下部分:
升级 Firefox 的 WebDriver 支持(GeckoDriver)
要升级 Firefox 浏览器的 WebDriver 支持,请按以下步骤更新 GeckoDriver:
- 访问 GeckoDriver 下载页面 https://github.com/mozilla/geckodriver/releases。
- 下载适用于您的架构的 GeckoDriver:
- Windows 64-bit 与 32-bit:geckodriver-<VERSION>-win64.zip
- Mac 64-bit:geckodriver-<VERSION>-macos.tar.gz
- Linux 64-bit:geckodriver-<VERSION>-linux64.tar.gz
- 从 .zip 压缩包中提取
geckodriver
可执行文件。 - 在 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
- Windows:运行
升级 Chrome 的 WebDriver 支持(ChromeDriver)
要升级 Chrome 浏览器的 WebDriver 支持,请按以下步骤更新 ChromeDriver:
- 如果尚未升级 Selenium 客户端库,请按照升级 Firefox 的 WebDriver 支持 (GeckoDriver) 中的说明进行升级。
- 访问 ChromeDriver下载页面 http://chromedriver.storage.googleapis.com/index.html。
- 下载最新版本(可点击 LATEST_RELEASE 链接查看最新版本)。
- 下载适用于您的架构的 ChromeDriver .zip 文件:
- Windows 64-bit 与 32-bit:chromedriver_win32.zip
- Mac 64-bit:chromedriver_mac64.zip
- Linux 64-bit:chromedriver_linux64.zip
- 从 .zip 压缩包中提取
chromedriver
可执行文件。 - 在 SOAtest 安装目录下,运行 update.bat 脚本(Windows)或 update 脚本(Linux 和 Mac),其中包含
–patch
参数和 chromedriver 可执行文件的路径。运行此脚本将使用patch
参数引用的文件替换安装中的版本。它还会备份安装中被替换的文件,为文件添加- Windows:运行
update.bat –patch /path/to/chromedriver.exe
- Linux 或 Mac:运行
./update –patch /path/to/chromedriver
- Windows:运行
升级 Microsoft Edge 的 WebDriver 支持(EdgeDriver)
要升级 Microsoft Edge 浏览器的 WebDriver 支持,请按以下步骤更新 EdgeDriver:
- 如果尚未升级 Selenium 客户端库,请按照升级 Firefox 的 WebDriver 支持 (GeckoDriver) 中的说明进行升级。
- 访问 Microsoft WebDriver 下载页面(https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)并为您的 Edge 版本下载驱动程序(有关版本支持的详细信息,请参阅浏览器支持)。
- 将驱动程序保存到相应操作系统的目录中:
- 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
- Windows:
在 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 运行使用的进程。操作步骤:
- 登录运行 soatestcli 的计算机(例如通过 ssh)。
运行命令,例如:
$ 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 任务。)操作步骤:
- 访问 Jenkins 网页。
- 登录。
- 点击运行 soatestcli 的 Jenkins 节点。
- 点击进行节点配置。
- 在“节点属性”部分,添加一个名为“DISPLAY”的环境变量和所需的值(如“:99”)。