点击capybara上的href

时间:2015-11-16 04:28:08

标签: ruby selenium-webdriver cucumber 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(&#39;更多&#39;)。点击&#34;链接&#34;。

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?这些选项需要单独测试。

2 个答案:

答案 0 :(得分:1)

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

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

这是在第一个.animation-visible ...匹配元素内部找到一个链接&#39; More&#39;为其文本,然后单击它。这也可以写成

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或标题。所以以下工作

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

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

答案 1 :(得分:0)

这些工作不会吗?

第一个链接

self.sparse_rep

第二个链接:

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

find_link("a[href$='page2/']").click 选择器的翻译:   找到以XXX结尾

的链接