如何告诉Capybara找到第1,第2或第3个按钮?

时间:2013-05-14 01:37:15

标签: ruby-on-rails capybara

我的应用中有一个订阅屏幕。有5种不同的选择,因此有5个不同的按钮。它是数据驱动的,所以可能有1或10或其他。 n个选择。

在编写请求规范时,我发现我不知道如何指出这些。我知道我可以将match: :first设置为click_button消息的参数,但还有另一种方法可以任意调用其中一个吗?

2 个答案:

答案 0 :(得分:1)

Capybara提供all method。此方法返回Capybara::Result的实例。该类包括Enumerable,因此提供了#[]等方法。

all(selector)[n]将返回符合定位符的页面上的第n个元素。它将是Capybara::Node::Element的一个实例,您可以使用clickset等方法自由使用。

缺点是all不会等待元素出现。如果需要,可以使用以下同步:

page.should have_css('#id') # wait for some element that appears at the same time or after the element that you click at the next row
all(locator)[n].click

答案 1 :(得分:1)

幸运的是,你有几个不同的选择。您可以通过第n个孩子调用,您可以执行(.class)[2],或者如果您正在寻找第一个,您可以使用元素=第一个(.css),然后通过类似元素之类的元素与元素进行交互。点击。如果你正在做页面对象模型,你肯定应该定义你的对象