1. Selenium IDE 使用指南一(爬虫脚本录制器)
  2. Selenium IDE 使用指南二(命令行运行器)
  3. Selenium IDE 使用指南三(控制流)
  4. Selenium IDE 使用指南四(代码导出)
  5. Selenium IDE 使用指南五(常见问题)
  6. Selenium IDE 使用指南六(指令列表)
  7. Selenium IDE 使用指南七(参数定义)

现在,您可以在任何浏览器上并行运行所有 Selenium IDE 测试,甚至可以在 Grid 上运行,而无需编写任何代码。

只需安装 Selenium IDE 命令行运行器(Command Line Runner),获取必要的浏览器驱动程序(如果在本地运行测试),然后从命令提示符启动带有所需选项的运行器即可。

命令行运行器样本

先决条件

要使命令行运行器正常运行,需要以下依赖项:

  • node(Node.js 运行时环境):版本 810
  • npm(Node.js 包管理器):通常与 node 一同安装
  • selenium-side-runner(Selenium IDE 命令行运行器)
  • 所要使用的浏览器驱动程序(详见下一节)

安装示例:

brew install node
npm install -g selenium-side-runner
注意:您的系统配置可能与上面的示例不同(例如,macOS 上的 Homebrew)。如果是这样,请参阅 Node 包管理器安装文档,或直接从 Node 下载页面 下载适用于您操作系统的安装程序。

安装浏览器驱动程序

如果要在本地运行测试,每个浏览器都需要一些额外的设置。

Selenium 通过一个称为“浏览器驱动程序”的小型二进制应用程序与每个浏览器进行通信。每个浏览器都有对应的驱动程序,您可以手动下载并添加到系统路径,也可以使用包管理器安装最新版本的浏览器驱动程序(推荐)。

您还需要在计算机上安装对应的浏览器本身。

Chrome

对于 Chrome,您需要 ChromeDriver

npm install -g chromedriver

Edge

对于 Microsoft Edge,您需要在 Windows 上运行,并且还需要 EdgeDriver

npm install -g edgedriver

Firefox

对于 Firefox,您需要 geckodriver

npm install -g geckodriver

Internet Explorer

对于 Internet Explorer,您需要在 Windows 上运行,并且还需要 IEDriver

npm install -g iedriver

要使 IEDriver 工作,还需要一些其他设置。详细信息请参阅 此处

Safari

对于 Safari,您需要 SafariDriver

它附带在最新版本的 Safari 中。您只需采取几个步骤就可以在计算机上启用它。有关详细信息,请参见 SafariDriver 文档的这一部分

启动运行器

安装完 selenium-side-runner 及所有组件后,只需在命令行中调用测试,随后指定之前保存的项目文件路径即可运行测试(请参阅 使用指南一)。

selenium-side-runner /path/to/your-project.side
注意:如果您有多个 .side 文件,则可以使用通配符(例如 /path/to/*.side)。

当您运行此命令时,它将在多个浏览器窗口中并行启动测试,并跨 n 个进程分布(这里的 n 是计算机上可用 CPU 内核的数量)。

进程数可以在运行时通过提供的各种参数进行配置(除其他外)。

注意:并行执行在套件(Suite)级别自动发生。如果要并行执行套件中的测试,则需要更改一个设置。有关详细信息,请参见 套件中的测试并行化

运行时配置

使用运行器,您可以在运行时传递不同的配置参数。

在本地不同的浏览器上运行

此功能最常见的用途是为本地测试执行指定其他浏览器。

selenium-side-runner -c "browserName=chrome"
selenium-side-runner -c "browserName='internet explorer'"
selenium-side-runner -c "browserName=edge"
selenium-side-runner -c "browserName=firefox"
selenium-side-runner -c "browserName=safari"
注意:在本地运行测试时,每个浏览器都需要进行一些设置。有关详细信息,请参见 安装浏览器驱动程序

在 Selenium Grid 上运行

要在 Grid(例如您自己的 Grid 或诸如 Sauce Labs 的托管提供商)上运行测试,可以指定它以及其他功能(Capabilities)。

selenium-side-runner --server http://localhost:4444/wd/hub -c "browserName='internet explorer' version='11.0' platform='Windows 8.1'"

--server 指定 Grid 的 URL,-c 是您希望 Grid 使用的功能。

您可以 在此处查看 可用功能的完整列表。

指定并行进程数

在 Grid 上运行时,您可能需要控制正在运行的并行会话数。为此,您可以使用 -w n 命令标志(其中 n 是所需的进程数)。

selenium-side-runner -w 10 --server http://localhost:4444/wd/hub

运行器将自动将工作进程数量设置为计算机上可用的 CPU 核心数量。在大多数情况下,这是最佳选择。

Chrome 特定功能

如果您将 Chrome 安装在计算机的非标准位置,则可以指定路径,以便 ChromeDriver 知道要查找的位置。

selenium-side-runner -c "goog:chromeOptions.binary='/path/to/non-standard/Chrome/install'"

使用特定于 Chrome 的功能,您还可以轻松运行无头测试等。

selenium-side-runner -c "goog:chromeOptions.args=[disable-infobars, headless]"

便捷的框架特性

运行器还提供其他一些便利功能,即您期望在传统测试自动化框架中可以使用的东西。

更改基本 URL

通过指定其他基本 URL 的能力,您可以轻松地将测试指向不同的环境(例如,本地开发、测试、预发布、生产)。

selenium-side-runner --base-url https://localhost

筛选测试

您还可以选择使用 --filter target 命令标志(其中 target 是正则表达式值)运行测试的目标子集。包含给定搜索条件的测试名称将是唯一运行的测试名称。

selenium-side-runner --filter smoke

将测试结果输出到文件

如果需要将测试结果导出到文件中(例如,作为 CI 进程的一部分运行时),则可以使用 --output-directory--output-format 标志的组合。

  • --output-directory 定义放置测试结果文件的位置。它可以采用绝对路径或相对路径。
  • --output-format 定义用于测试结果文件的格式。它可以是 jest(例如,JSON)或 junit(例如,XML)。默认格式为 jest(例如,如果您未指定类型)。
selenium-side-runner --output-directory=results
# 在 ./results/projectName.json 输出 jest 格式的结果

selenium-side-runner --output-directory=results --output-format=jest
# 在 ./results/projectName.json 输出 jest 格式的结果

selenium-side-runner --output-directory=results --output-format=junit
# 在 ./results/projectName.xml 输出 junit 格式的结果

指定默认配置

您不必记住所有需要的命令行参数(这些参数可能很笨拙),而是可以将运行时参数存储在配置文件中。

您可以使用两种配置文件。

选项 1

在将要运行测试的目录中创建一个 .side.yml 文件。运行器将自动读取它。这是文件内容的示例:

capabilities:
  browserName: "firefox"
baseUrl: "https://www.seleniumhq.org"
server: "http://localhost:4444/wd/hub"

如果要忽略文件并改用命令行参数,请在运行时与其他命令一起使用 --no-sideyml

选项 2

除了使用 .side.yml 文件之外,您还可以在 YAML 文件中使用您选择的名称和位置指定运行时参数,然后在运行测试时指定其位置。

selenium-side-runner --config-file "/path/to/your/config.yaml"
注意:使用 --config-file 标志时,.side.yml 将被忽略。

Selenium IDE 配置

在套件中测试并行化

开箱即用,运行器并行执行套件,但是套件中的测试是顺序执行的。

要在给定套件中并行运行测试,您需要在 Selenium IDE 中更新该套件的设置。

  1. 切换到 Selenium IDE 中的 Test Suites 视图。
  2. 点击您要配置的套件名称旁边的下拉菜单,然后点击 Settings
  3. 单击复选框 Run in parallel
  4. 请点击 Submit
  5. 保存您的 Selenium IDE 项目文件。

要配置多个套件以这种方式运行,请在每个套件中重复步骤 1-4。完成后,请确保保存项目文件。

高级选项

其他参数

Selenium IDE 的插件可以指定自己的唯一运行时参数。您可以通过 --params 标志使用它们。

此选项采用各种选项的字符串(类似于您指定功能的方式)。

基本用法

您指定参数的名称及其值。最基本的方法是指定一个字符串值。

selenium-side-runner --params "a='example-value'"

嵌套参数

也可以使用点符号嵌套参数。

selenium-side-runner --params "a.b='another example-value'"

数组值

除了字符串,还可以指定字母数字值的数组。

selenium-side-runner --params "a.b.c=[1,2,3]"

多个参数

--params 只能被调用一次,但是您可以通过空格分隔来指定多个参数。

selenium-side-runner --params "a='example-value' a.b='another example-value' a.b.c=[1,2,3]"

使用代理服务器

您可以使用运行器中的以下选项将代理功能传递给浏览器。

直接代理 (Direct Proxy)

此选项将 WebDriver 配置为绕过所有浏览器代理。

在命令行中:

selenium-side-runner --proxy-type=direct

.side.yaml 中:

proxyType: direct

手动代理 (Manual Proxy)

手动配置浏览器代理。

在命令行中:

selenium-side-runner --proxy-type=manual --proxy-options="http=localhost:434 bypass=[http://localhost:434, http://localhost:8080]"

.side.yaml 中:

proxyType: manual
proxyOptions:
  http: http://localhost:434
  https: http://localhost:434
  ftp: http://localhost:434
  bypass:
    - http://localhost:8080
    - http://host:434
    - http://somethingelse:32

PAC 代理 (PAC Proxy)

配置 WebDriver 以使用给定 URL 处的 PAC 文件设置浏览器代理。

在命令行中:

selenium-side-runner --proxy-type=pac --proxy-options="http://localhost/pac"

.side.yaml 中:

proxyType: pac
proxyOptions: http://localhost/pac

SOCKS 代理

为 SOCKS 代理创建代理配置。

在命令行中:

selenium-side-runner --proxy-type=socks --proxy-options="socksProxy=localhost:434 socksVersion=5"

.side.yaml 中:

proxyType: socks
proxyOptions:
  socksProxy: localhost:434
  socksVersion: 5

系统代理 (System Proxy)

配置 WebDriver 以使用当前系统的代理。

在命令行中:

selenium-side-runner --proxy-type=system

.side.yaml 中:

proxyType: system

代码导出

如果您想学习如何将记录的测试转换为 WebDriver 代码,或者想要将记录的测试集成到现有的自定义测试框架中,则需要的是代码导出,现在可用于某些语言。您可以 在此处了解更多信息


说明:文中提到的 Node.js 版本(8 或 10)可能已过时,建议参考官方最新文档确认兼容性。