在使用Capybara + RSpec编写测试框架/测试时,我遇到了这样的建议,即测试不存在的元素:
expect(page).to have_no_button('Save') # OK
expect(page).not_to have_button('Save') # Bad我不明白为什么,直到我看到这句话:
使用应该使用have_no_*版本的RSpec匹配器,因为should_not have_*不会等待驱动程序超时。
这是真的吗?如果没有.如果存在<element> (我通常使用.visible?),那么有一个检查和返回方法是否更有意义?您可以使用rspec匹配器执行expect(page_object).to be_method_visible或expect(page_object).not_to be_method_visible操作吗?
与之相反,必须在页面对象中编写两个单独的方法(除非not_to不会等待)
关于我在页面对象模型中的断言方法的一个例子,下面是检查“注销链接”的方法
def logged_in?
logout_text.visible?
end
private
def logout_text
find 'a', text: 'Log Out'
end然后在规范中我会说:expect(page_object).to be_logged_in
所以我会用类似的东西来处理其他元素。
发布于 2019-04-09 15:27:50
我不知道你是从哪里找到这个建议的(也许它真的很古老),但对于任何“最近”版本的Capybara (至少在过去4年),使用Capybara提供的匹配器是不正确的。
假设have_button和have_no_button是Capybara提供的匹配器(而不是RSpecs内置的have_xxx => has_xxx?匹配器,调用在页面对象上定义的has_button?方法),则给出两个示例
expect(page).to have_no_button('Save')
expect(page).not_to have_button('Save')会有同样的行为。它们将检查按钮是否存在,并在它不存在时返回,或者在Capybara.default_max_wait_time秒过去并且该按钮在页面上仍然可见时引发异常。
https://stackoverflow.com/questions/55596091
复制相似问题