我的应用程序中有一个订阅屏幕。有 5 种不同的选择,因此有 5 个不同的按钮。它是数据驱动的,所以可能有 1 个或 10 个或其他。n
选择。
在编写请求规范时,我发现我不知道如何指出这些。我知道我可以设置match: :first
为click_button
消息的参数,但是还有另一种方法可以任意调用其中一个吗?
我的应用程序中有一个订阅屏幕。有 5 种不同的选择,因此有 5 个不同的按钮。它是数据驱动的,所以可能有 1 个或 10 个或其他。n
选择。
在编写请求规范时,我发现我不知道如何指出这些。我知道我可以设置match: :first
为click_button
消息的参数,但是还有另一种方法可以任意调用其中一个吗?
Capybara 提供了一种all
方法。此方法返回一个Capybara::Result
. 此类包括 Enumerable ,因此提供了类似#[]
.
all(selector)[n]
将返回页面上符合定位器的第 n 个元素。这将是一个Capybara::Node::Element
您可以使用 , 等方法自由使用click
的set
实例。
一个缺点是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
幸运的是,您有几个不同的选择。您可以通过第 n 个孩子调用,您可以执行 (.class)[2] ,或者如果您正在寻找第一个,您可以使用 element = first (.css) 然后通过类似 element.click 的方式与元素交互. 如果你正在做页面对象模型,你肯定应该定义你的对象