首页 > 解决方案 > Capybara 测试是否看到一个字段,但两个字段具有相同的开头,这会导致问题

问题描述

在我的 Ruby on Rails 应用程序上,我想运行 Capybara 测试。有两种不同的用户组:intern_userextern_user。有一个包含两个输入字段的表单:'Comment''Comment for Interns'extern_user应该看到两个字段,应该intern_user只看到'Comment for Interns'

intern_user我想测试以下功能的情况下:And I do not see the Comment field对于 .rb 文件,我有以下代码:

 Then(/^I (do not )?see the comment field$/) do |not_visible|
  m = have_field('Comment')

  x = expect(page)
  not_visible ? x.not_to(m) : x.to(m)
end

但是Capybara只是寻找文本的开头,并且因为有一个字段被称为'Comment for Interns'测试失败。它的处理方式就像用户看到了该'Comment'字段,但实际上并没有,它只看到另一个字段,名称中具有相同的开头。

如何设置,Capybara 应该寻找一个字段,该字段完全具有给定的名称并且其中没有更多字符?

标签: ruby-on-railsrubystringcapybara

解决方案


默认情况下,Capybara 对标签内容中的定位器字符串进行子字符串匹配。要进行精确的定位器匹配,您应该能够通过该:exact选项

m = have_field('Comment', exact: true)

然后应该只对字段的标签内容进行完全匹配。


推荐阅读