我正在使用assert_selector
和assert_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)