为什么即使找到了元素,assert_no_selector()也要等到等待时间结束



我正在使用assert_selectorassert_no_selector检查网页中的某个元素。

在一个上下文中,元素是存在的,而在其中一个上下文不存在。我的测试工作正常。但是,如果在页面上元素时使用assert_no_selector,则测试不会立即失败,而是等待助手文件中指定的default_max_wait_time,然后失败并继续进行下一个测试。例如

scenario 'expect element to appear' do
login(email, password)
assert_no_selector('a[id="elementID"]', minimum: 1)
end

我假设,如果运行此代码,并且元素实际上位于页面上,那么它将立即失败。为什么它要等到达到最大等待时间,即使元素可能很快就被找到了?有更好的方法吗?每当测试失败时,我希望避免让测试等待整个最长等待时间。

Capybaras断言中等待行为的目的是处理浏览器中的异步行为。如果你使用assert_no_selector,你会告诉capybara你希望页面没有该元素,所以在引发异常之前,它会等待该元素消失的最长等待时间(因为你告诉它你希望该元素不在那里,并且页面可能正在处理会导致该元素被删除的事情(。如果你想要立即检查,那么指定等待0,但一旦你在页面中有JS行为,这通常会导致不稳定的测试。

assert_no_selector('a#elementID', wait: 0)    

相关内容

最新更新