Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在SitePrism节集合中搜索与特定条件匹配的节_Ruby On Rails_Automated Tests_Capybara_Site Prism - Fatal编程技术网

Ruby on rails 如何在SitePrism节集合中搜索与特定条件匹配的节

Ruby on rails 如何在SitePrism节集合中搜索与特定条件匹配的节,ruby-on-rails,automated-tests,capybara,site-prism,Ruby On Rails,Automated Tests,Capybara,Site Prism,我定义了一个sections元素,该元素包含一个单独元素的列表,用于为数据表建模。Sections集合的每个部分对应于表中的一行,Sections定义的每个元素对应于行中的一列 我想在Sections集合中搜索对应于具有给定id的行的节,然后单击该行的元素 不幸的是,我找不到搜索PageObjectClass.返回的节对象数组的方法 相反,如果我将行集定义为elements,则PageObjectClass。返回一组Capybara元素,我可以在这些元素上执行Capybara查找,但无法使用Si

我定义了一个
sections
元素,该元素包含一个单独元素的列表,用于为数据表建模。Sections集合的每个部分对应于表中的一行,Sections定义的每个
元素
对应于行中的一列

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

不幸的是,我找不到搜索
PageObjectClass.
返回的节对象数组的方法

相反,如果我将行集定义为
elements
,则
PageObjectClass。
返回一组Capybara元素,我可以在这些元素上执行Capybara
查找,但无法使用SitePrism
节.element
语法

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

我错过了什么?为什么在SitePrism在线讨论中使用数据表的例子如此之少,为什么没有更多的人遇到这个问题

我唯一想到的是


这个建议有什么结果吗?

回答我自己的问题

我想到的唯一方法是向page对象类添加一个方法,以遍历各个部分,找到与给定id匹配的元素

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


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

来回答我自己的问题

我想到的唯一方法是向page对象类添加一个方法,以遍历各个部分,找到与给定id匹配的元素

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


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

您可以在原始调用中使用带有
文本:“value”的capybara查询选择器

因此,如果您有5个id为
#foo
的节,您可以定义
节:my#foo,#foo,text:'fifth'

这只会返回一个部分,瞧


或者,您可以使用
#detect
对它们进行迭代,一旦找到第一个正匹配项,它就会停止。因此,您可以执行
my_sections.detect{| section | section.text=='First match'}
您可以在原始调用中使用带有
text:'value'
的capybara查询选择器

因此,如果您有5个id为
#foo
的节,您可以定义
节:my#foo,#foo,text:'fifth'

这只会返回一个部分,瞧

或者,您可以使用
#detect
对它们进行迭代,一旦找到第一个正匹配项,它就会停止。因此,您将执行
my|u sections.detect{| section | section.text=='First match'}