在水豚上点击 href

clicking href on capybara

我试图告诉 Capybara/Cucumber 单击 href,但尝试不同的选项失败。这是代码:

  <div>
   <h6 class="animation-visible tile-animation link-group color-white border-round bg-primary animated" data-animation-delay="1000" data-animation="cta-1">
      <label>Option 1</label>
      <a href="http://some.com/page1/">More</a>
   </h6>
   <h6 class="animation-visible tile-animation link-group color-white border-round bg-primary animated" data-animation-delay="1000" data-animation="cta-1">
      <label>Option 2</label>
      <a href="http://some.com/page2/">More</a>
   </h6>
   ... 
</div>

第一次尝试是 find_link('More')。单击 "link"。

within(all(.animation-visible.tile-animation.link-group.color-white.border-round.bg-primary.animated>a).[0]) do  
    find_link('More').click  
end 

那没用。我试过让它立即点击。

find(all('.animation-visible.tile-animation.link-group.color-white.border-round.bg-primary.animated>a')[0]).click 

那也没用。

想知道是否还有其他方法可以点击选项 1?还是选项 2?这些选项需要单独测试。

这些行不通吗?

第一个link

find_link("a[href$='page1/']").click

第二个link:

find_link("a[href$='page2/']").click

Translation of the css selector: Find the link that ends with XXX

假设元素在页面上可见(不确定 h6 元素上的动画 类 实际在做什么)那么您的第一次尝试不会成功,因为内部的选择器上有额外的 > a - 这意味着你已经找到 a 然后在里面说找到另一个 a。您的第二次尝试不会成功,因为 find 采用选择器类型和选择器(选择器类型默认为 css)来匹配元素,但所有 return 都是一个元素数组(您调用 find 到 return 一个元素或全部到 return 多个元素) - 以下应该可以代替

within(all('.animation-visible.tile-animation.link-group.color-white.border-round.bg-primary.animated')[0]) do  
  find_link('More').click  
end

在第一个 .animation-visible... 匹配元素中找到一个 link 和 'More' 作为其文本并单击它。也可以这样写

within(first('.animation-visible.tile-animation.link-group.color-white.border-round.bg-primary.animated', minimum: 1)) do  
  click_link('More')  
end

这基本上是一样的,除了最小值:1 选项会让它等到页面上至少有一个匹配元素(如果您之前的调用是 #visit 或者元素正在通过ajax 注意:您也可以在第一个示例中使用最小值:1(或您希望在页面上出现的任何元素数量)

另一个答案中建议的 find_link 调用将不起作用,因为 find_link 不采用 css 选择器,它需要一个字符串来匹配文本,id ,或 link 的标题。所以以下将起作用

find_link('More', href: 'http://some.com/page1/').click

click_link('More', href: 'http://some.com/page1/')