Nightwatch 設定
nightwatch.conf.js
Nightwatch 測試執行器二進位檔預期會有一個設定檔,預設會使用目前工作目錄中的 nightwatch.conf.js
或 nightwatch.json
檔案。如果找到這兩個檔案,則 nightwatch.conf.js
會優先使用。
以下是一個範例設定檔,它使用 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.json
或 nightwatch.conf.js
檔案,則不會發生任何事情,也不會產生該檔案。
您可以隨意編輯此檔案並調整設定以符合您的需求。到目前為止,我們已包含對 Chrome、Firefox、Safari 和 Internet Explorer 的支援。
可以從 NPM 使用以下套件,如果已安裝,Nightwatch 將會自動偵測並設定測試執行器
- geckodriver – 用於在 Firefox 中執行測試
- chromedriver – 用於在 Chrome 中執行測試
- selenium-server – 用於使用 Selenium 伺服器
使用測試環境
您很可能會針對多個環境和/或不同的瀏覽器執行測試。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.js
或 nightwatch.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"
}
}
}
}