您似乎混淆了assertions的目的,或者濫用了它們,特別是在您的示例中。您應該只使用斷言,當你有確定性要驗證事情(WebElement
,text
,attribute
元素等)包含了預期類型的值(您返回到您的assert
,或expect
聲明爲最終驗證=>輸出是所需的一個)。
斷言驗證靜態值,它們不輪詢DOM。這就是爲什麼你有像.waitForVisible()
,waitForText()
,或更重要的是.waitUntil()
(它提供了更多的靈活性)的工具。
誠然,通過ChaiJS提供可能有一個令人困惑的詞彙的expect
斷言式(expect
可能被斷章取義的:它期待的WebElement
的是可見的)。只需使用它們來驗證不同命令的輸出,而不是使用WebElements
或其他動態/更改元素的狀態。
話雖這麼說,作爲一個最佳實踐,你應該始終包裹您的命令(例如:.click()
)爲.waitUntil()
塊和保證WebElement
爲你準備好即將在行動執行:
- 是否呈現在DOM中由前端邏輯? (使用
.isExisting()
)
- 是不是可見在DOM中? (你*不能點擊在
viewport
中不可見的元素)
- 是不是可點擊? (或者您想對其執行的其他操作...)
最後,一個習慣動作(在我們的例子.click()
)應該是這樣的:
browser.waitUntil(() => {
browser.isExisting(locator);
}, timeout, "Oups! An error occured.\nReason: element ('" + locator + "') does not exist");
browser.waitUntil(() => {
browser.isVisible(locator);
}, timeout, "Oups! An error occured.\nReason: element ('" + locator + "') is not visible");
browser.waitUntil(() => {
browser.click(locator);
}, timeout, "Oups! An error occured.\nReason: element ('" + locator + "') could not be clicked");
你可以用整個事情變成custom-command並使用它瓦特/ E您想。告別片狀測試! :)
*硒是一種以用戶爲中心網絡的自動化工具,從而爲如果用戶將(用戶不能在元素不可見,用戶單擊所有操作都進行不能同時點擊多個元素,或通過輸入整個單詞或整個段落等來填寫input
字段)
只是刪除斷言...正如你所說,這是多餘的。 – JeffC
但是沒有斷言的測試有什麼好處? –