您似乎混淆了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
但是没有断言的测试有什么好处? –