首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >水豚RSpec的匹配者在等待元素?

水豚RSpec的匹配者在等待元素?
EN

Stack Overflow用户
提问于 2019-04-09 15:16:14
回答 1查看 798关注 0票数 0

在使用Capybara + RSpec编写测试框架/测试时,我遇到了这样的建议,即测试不存在的元素:

代码语言:javascript
运行
复制
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_visibleexpect(page_object).not_to be_method_visible操作吗?

与之相反,必须在页面对象中编写两个单独的方法(除非not_to不会等待)

关于我在页面对象模型中的断言方法的一个例子,下面是检查“注销链接”的方法

代码语言:javascript
运行
复制
def logged_in?
    logout_text.visible?
end

private
def logout_text
    find 'a', text: 'Log Out'
end

然后在规范中我会说:expect(page_object).to be_logged_in

所以我会用类似的东西来处理其他元素。

EN

Stack Overflow用户

回答已采纳

发布于 2019-04-09 15:27:50

我不知道你是从哪里找到这个建议的(也许它真的很古老),但对于任何“最近”版本的Capybara (至少在过去4年),使用Capybara提供的匹配器是不正确的。

假设have_buttonhave_no_button是Capybara提供的匹配器(而不是RSpecs内置的have_xxx => has_xxx?匹配器,调用在页面对象上定义的has_button?方法),则给出两个示例

代码语言:javascript
运行
复制
expect(page).to have_no_button('Save')
expect(page).not_to have_button('Save')

会有同样的行为。它们将检查按钮是否存在,并在它不存在时返回,或者在Capybara.default_max_wait_time秒过去并且该按钮在页面上仍然可见时引发异常。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55596091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档