如何搜索SitePrism部​​分的集合以查找符合特定条件的部分

时间:2016-10-12 13:42:49

标签: ruby-on-rails automated-tests capybara site-prism

我已将sections元素定义为包含用于建模数据表的各个元素的列表。 Sections集合的每个Section对应于表的一行,Sections定义的每个element对应于该行的一列。

我想在Sections集合中搜索对应于具有给定id的行的Section,然后单击该行的元素。

不幸的是,我无法找到一种搜索PageObjectClass.<sections_name>返回的Section对象数组的方法。

如果我将行集定义为elements,那么PageObjectClass.<elements_name>会返回一组Capybara元素,我可以在其中执行Capybara find但我无法使用SitePrism section.element语法。

使用elements.find语法似乎有代码味道,因为到目前为止,用于访问元素的CSS已经在PageObject类定义中被抽象掉了 - 现在我必须在测试中引用特定元素的CSS代码以便点击它。

我在这里缺少什么?为什么在SitePrism在线讨论中使用数据表的例子如此之少以及为什么还有更多的人遇到这个问题呢?

我所遇到的唯一参考是https://github.com/natritmeyer/site_prism/issues/91

这个建议有什么结果吗?

2 个答案:

答案 0 :(得分:0)

回答我自己的问题......

我提出的唯一方法是在页面对象类中添加一个方法来遍历各个部分,以找到与给定id匹配的元素。

至少这封装了页面对象中元素的CSS。

似乎应该有更好的方法,或者至少应该将这种方式定义为SitePrism gem的一部分?

答案 1 :(得分:0)

您将在原始通话中将水豚查询选择器与text: 'value'一起使用。

因此,如果您有5个ID为#foo的部分,则可以定义section :my_foo, #foo, text: 'fifth'

这只会返回一个部分,瞧。

您也可以使用#detect遍历它们,一旦找到第一个正匹配项,它将停止。所以你会做my_sections.detect { |section| section.text == 'First match' }