Ruby on Rails水豚::模棱两可:模棱两可的比赛

Ruby on Rails Capybara::Ambiguous: Ambiguous match

我对Rails还是很陌生,并且仍然在学习它。现在,我收到了这样的测试失败消息:

1
2
3
4
5
1) LayoutLinks should have the right links on the layout
 Failure/Error: click_link("Help")
 Capybara::Ambiguous:
   Ambiguous match, found 2 elements matching link"Help"
 # ./spec/requests/layout_links_spec.rb:47:in `block (2 levels) in <top (required)>'

因为我的主页上有两个相同的"帮助"链接,但是测试似乎认为这是一个模棱两可的匹配项,我希望它以相同的方式测试它们,因为链接直接指向同一页面。

实际上,网站上有几种解决方案,但是由于我是新手,所以大多数解决方案对我来说都很复杂,所以有人可以给我最简单的解决方案吗?预先感谢。

已更新:

我的观点和规格没有什么复杂的。我仍在学习所有内容。

这是我的规格

1
2
3
4
5
6
7
8
        visit root_path
        expect(page).to have_title("Home")      
        click_link("About")
        expect(page).to have_title("About")
        click_link("Contact")
        expect(page).to have_title("Contact")
        click_link("Help")
        expect(page).to have_title("Help")

这是我的页眉部分在布局中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<header>
  <nav class="round">
   
<ul>

       
<li>
<%= link_to"Home", root_path %>
</li>

       
<li>
<%= link_to"Help", help_path %>
</li>

       
<li>
<%= link_to"Sign in","#" %>
</li>

   
</ul>

  </nav>
</header>

这是我的页脚部分在布局中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<footer>
  <nav class="round">
   
<ul>

       
<li>
<%= link_to"About", about_path %>
</li>

       
<li>
<%= link_to"Contact", contact_path %>
</li>

       
<li>
<%= link_to"Help", help_path %>
</li>

   
</ul>

  </nav>
</footer>

请注意,在两个部分中有两个独立的帮助链接,它们是相同的。


您可能想尝试以下任一方法

click_link("Help", :match => :first)
click_link("Help", :match => :smart)
click_link("Help", :match => :prefer_exact)
click_link("Help", :match => :one)

希望这会有所帮助。


要做的是通过指定周围的元素来澄清要单击的帮助按钮,从而使规格更加具体。仅当它们位于不同元素中时,此方法有效

基于您发布的html ...根据您要测试的链接,将click_link(" Help)替换为以下内容之一(在页眉或页脚中)

1
2
3
    within("header") do
        click_link"Help"
    end

1
2
3
    within("footer") do
        click_link"Help"
    end

或查看此解决方案->水豚歧义度解决方案