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.dev.org.tw', 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.dev.org.tw' },
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.dev.org.tw",
"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 填入該值。

如果目前工作目錄中找到 .env 檔案,也會支援 Dotenv 檔案並將會使用。

以下是從產生的 nightwatch.conf.js 摘錄的範例

module.exports = {
  src_folders: [],
  
test_settings: { default: { launch_url: 'https://nightwatch.dev.org.tw' },
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" } } } }

進一步閱讀