逾時設定
WebdriverIO 中的每個命令都是非同步操作。請求會發送到 Selenium 伺服器(或像是 Sauce Labs 的雲端服務),其回應包含動作完成或失敗後的結果。
因此,時間是整個測試過程中至關重要的環節。當特定動作取決於不同動作的狀態時,您需要確保它們以正確的順序執行。在處理這些問題時,逾時設定扮演著重要的角色。
Selenium 逾時設定
工作階段腳本逾時
工作階段具有相關的工作階段腳本逾時,指定等待非同步腳本執行的時間。除非另有說明,否則為 30 秒。您可以像這樣設定此逾時設定
await browser.setTimeout({ 'script': 60000 })
await browser.executeAsync((done) => {
console.log('this should not fail')
setTimeout(done, 59000)
})
工作階段頁面載入逾時
工作階段具有相關的工作階段頁面載入逾時,指定等待頁面載入完成的時間。除非另有說明,否則為 300,000 毫秒。
您可以像這樣設定此逾時設定
await browser.setTimeout({ 'pageLoad': 10000 })
pageLoad
關鍵字是官方 WebDriver 規範的一部分,但可能不適用於您的瀏覽器 (支援)(先前的名稱是page load
)。
工作階段隱式等待逾時
工作階段具有相關的工作階段隱式等待逾時。這指定在使用 findElement
或 findElements
命令(當使用或不使用 WDIO 測試執行器執行 WebdriverIO 時,分別為 $
或 $$
)定位元素時,等待隱式元素定位策略的時間。除非另有說明,否則為 0 毫秒。
您可以透過以下方式設定此逾時設定
await browser.setTimeout({ 'implicit': 5000 })
WebdriverIO 相關的逾時設定
WaitFor*
逾時設定
WebdriverIO 提供了多個命令來等待元素達到特定狀態(例如,啟用、可見、存在)。這些命令接受一個選擇器引數和一個逾時設定數字,這決定了實例應等待該元素達到該狀態的時間長度。waitforTimeout
選項可讓您為所有 waitFor*
命令設定全域逾時設定,因此您無需一遍又一遍地設定相同的逾時設定。(請注意小寫的 f
!)
// wdio.conf.js
export const config = {
// ...
waitforTimeout: 5000,
// ...
}
在您的測試中,您現在可以執行此操作
const myElem = await $('#myElem')
await myElem.waitForDisplayed()
// you can also overwrite the default timeout if needed
await myElem.waitForDisplayed({ timeout: 10000 })
架構相關的逾時設定
您與 WebdriverIO 一起使用的測試架構必須處理逾時設定,尤其是在所有事物都是非同步的情況下。它可確保如果出現問題,測試程序不會卡住。
預設情況下,逾時設定為 10 秒,這表示單一測試不應花費超過該時間。
Mocha 中的單一測試看起來像這樣
it('should login into the application', async () => {
await browser.url('/login')
const form = await $('form')
const username = await $('#username')
const password = await $('#password')
await username.setValue('userXY')
await password.setValue('******')
await form.submit()
expect(await browser.getTitle()).to.be.equal('Admin Area')
})
在 Cucumber 中,逾時設定適用於單一步驟定義。但是,如果您想因為您的測試花費時間超過預設值而增加逾時設定,則需要在架構選項中設定它。
- Mocha
- Jasmine
- Cucumber
// wdio.conf.js
export const config = {
// ...
framework: 'mocha',
mochaOpts: {
timeout: 20000
},
// ...
}
// wdio.conf.js
export const config = {
// ...
framework: 'jasmine',
jasmineOpts: {
defaultTimeoutInterval: 20000
},
// ...
}
// wdio.conf.js
export const config = {
// ...
framework: 'cucumber',
cucumberOpts: {
timeout: 20000
},
// ...
}