在測試一個網頁時,時常會有需要等待的時候,可能是等待網頁載入、等待 UI 顯示或等待搜尋結果等
pause()
在 Nightwatch.js 中,assert/verify 都有最多等待 5 秒的機制,但如果我們需要的結果可能超過 5 秒時,就可以先利用 pause 帶入時間來等待。
範例:
browser.pause(1000);
其中的參數為 ms,1000 即表示等待一秒
不過當測試的檔案很多時,有些可能需要等待較久,有些則不用,每項都個別寫等待秒數很不方便。
在 nightwatch 設定檔中,可以透過 nightwatchConfig 決定 globals 放置的位置,並管理全域變數。
// nightwatch.conf.js
const nightwatchConfig = {
"globals": {
"myGlobalVar" : "some value",
"otherGlobal" : "some other value"
}
}
當然,也可以移到另一個 js 檔案管理
// nightwatch.conf.js
const GLOBALS_PATH = path.join(process.cwd(), './globals.js');
const nightwatchConfig = {
globals_path: GLOBALS_PATH,
}
// global.js
module.exports = {
"myGlobalVar" : "some value",
"otherGlobal" : "some other value"
}
pauseLogin()
, pauseSearch()
接著就可以撰寫客製化指令,帶入 global variable 使 pause 變得更通用:
// global.js
module.exports = {
"LoginTime" : "5000",
"SearchTime" : "15000"
}
// pauseLogin.js
module.exports = {
command: async function(type) {
const { LoginTime } = this.globals;
this.pause(LoginTime)
}
}
// pauseSearch.js
module.exports = {
command: async function(type) {
const { LoginSearch } = this.globals;
this.pause(LoginSearch)
}
}
如此一來,撰寫測試檔案便能夠過 browser.pauseLogin()
更能清楚知道為什麼需要等待以及正在做什麼動作。
這篇大致說明了 pause()
的功用,不過實際上在測試時並不好用,如果只在相同機器、相同 server 或許夠用,但如果測試環境有分 develop 的環境、pre-production 環境等,可能因為環境不同,造成等待時間不夠並導致失敗。
比較好的做法是利用 waitForElementPresent()
, waitForElementVisible()
並等待對應的結果出現。下一篇再來寫關於這兩個,同時也說明他們的缺點與改善方法。