我试图告诉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?这些选项需要单独测试。
答案 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结尾