nightwatch.conf.js

Nightwatch 测试运行器二进制文件需要一个配置文件,默认情况下使用当前工作目录中的 nightwatch.conf.jsnightwatch.json 文件。如果两个文件都存在,则 nightwatch.conf.js 优先。

从 Nightwatch 2 开始,您还可以指定配置文件以返回一个 Promise,测试运行器将等待它解析。

以下是一个示例配置文件,它使用 Firefox 作为目标浏览器,并假设已安装 geckodriver NPM 包。

module.exports = {
  // An array of folders (excluding subfolders) where your tests are located;
  // if this is not specified, the test source must be passed as the second argument to the test runner.
  src_folders: [],
  
webdriver: { start_process: true, port: 4444, server_path: require('geckodriver').path, cli_args: [ // very verbose geckodriver logs // '-vv' ] },
test_settings: { default: { launch_url: 'https://nightwatch.node.org.cn', desiredCapabilities : { browserName : 'firefox' } } } };

自动生成的配置

从版本 **1.3** 开始,Nightwatch 将在第一次运行或未找到其他配置文件时,根据操作系统和现有驱动程序包生成 nightwatch.conf.js 配置文件。如果在当前文件夹中找到 nightwatch.jsonnightwatch.conf.js 文件,则不会发生任何操作,并且不会生成该文件。

请随意编辑此文件并根据需要调整设置。到目前为止,我们已包含对 Chrome、Firefox、Safari 和 Internet Explorer 的支持。

以下包可以使用 NPM,如果安装,Nightwatch 将自动检测和配置测试运行器

使用测试环境

您可能会针对多个环境和/或不同的浏览器运行测试。Nightwatch 提供了一个用于定义不同环境的概念,您可以在其中设置特定的测试设置。

环境位于配置文件中的 "test_settings" 字典下。始终需要一个 default 环境,其他环境将从中继承设置。您可以根据需要覆盖每个环境的任何测试设置。

自动生成的 nightwatch.conf.js 包含几个预定义的测试环境,用于针对几个不同的浏览器(Firefox、Chrome、Safari)运行测试,以及使用 Selenium 服务器或流行的云测试提供商 Browserstack 运行测试。

这是一个摘录

module.exports = {
  src_folders: [],
  
test_settings: { default: { launch_url: 'https://nightwatch.node.org.cn' },
safari: { desiredCapabilities : { browserName : 'safari', alwaysMatch: { acceptInsecureCerts: false } }, webdriver: { port: 4445, start_process: true, server_path: '/usr/bin/safaridriver' } },
firefox: { desiredCapabilities : { browserName : 'firefox' },
webdriver: { start_process: true, port: 4444, server_path: require('geckodriver').path } } } }

考虑到此设置,要运行测试,例如,针对 Safari,我们将运行以下命令行

nightwatch --env safari

请参考 定义测试环境 页面以了解有关如何使用测试环境的更多信息。

使用测试全局变量

Nightwatch 提供的另一个有用概念是测试全局变量。以最简单的形式,它是在配置文件中定义的名值对字典。

全局变量可以定义为 "globals" 属性,也可以定义为外部文件,该文件指定为 "globals_path" 属性。

以下是在 nightwatch.json 中使用 "globals" 属性的示例定义

{
  "src_folders": [],
  
"test_settings": { "default": { "launch_url": "https://nightwatch.node.org.cn",
"globals": { "myGlobalVar" : "some value", "otherGlobal" : "some other value" } } } }

launch_url 属性一样,globals 对象直接在传递给测试的 Nightwatch api 上可用。

module.exports = {
  'Demo test' : function (browser) {
    
console.log(browser.globals.myGlobalVar); // myGlobalVar == "some value" } };

请参考 使用测试全局变量 页面以了解有关如何使用测试全局变量的更多信息。

使用 Env 变量

nightwatch.conf.jsnightwatch.json 中的任何配置值都可以指定为环境变量的名称。如果找到,Nightwatch 将自动从 process.env 中填充该值。

Dotenv 文件也受支持,如果在当前工作目录中找到 .env 文件,则将使用该文件。

以下是从生成的 nightwatch.conf.js 中的示例

module.exports = {
  src_folders: [],
  
test_settings: { default: { launch_url: 'https://nightwatch.node.org.cn' },
browserstack: { webdriver: { start_process: false },
selenium: { host: 'hub-cloud.browserstack.com', port: 443 },
desiredCapabilities: { browserName: 'chrome', 'bstack:options' : { userName: '${BROWSERSTACK_USER}', accessKey: '${BROWSERSTACK_KEY}', } } } } }

手动配置

此时,您应该至少安装了一个 WebDriver 包在您的项目中。有关详细信息,请参考 WebDriver 安装 部分。在项目的根文件夹中创建 nightwatch.json

假设您已下载或安装了 ChromeDriver 服务,最简单的 nightwatch.json 文件将如下所示,其中 node_modules/.bin/chromedriver 是安装 ChromeDriver 的路径

{
  "src_folders" : ["tests"],
  
"webdriver" : { "start_process": true, "server_path": "node_modules/.bin/chromedriver", "port": 9515 },
"test_settings" : { "default" : { "desiredCapabilities": { "browserName": "chrome" } } } }

进一步阅读