是否可以在SitePrism字段中找到具有不区分大小写的值的元素?

时间:2017-02-06 11:58:49

标签: cucumber capybara site-prism

我在SitePrism需要找到的对象的两个标签中有以下元素文本:

  • '更正日期'
  • '正确日期'

是否可以通过在SitePrism中使用不区分大小写的表达式来查找此类元素?我正在尝试以下但是我收到了一个错误:

  • 元素:correct_date,:field,“/ correct date / i”

  • 错误:无法找到字段“/ correct date / i”(Capybara :: ElementNotFound)

上述表达式甚至在完全匹配时失败,无论出于何种原因:S 知道我能尝试什么吗?

1 个答案:

答案 0 :(得分:0)

简答:否

更长的答案:Capybara定位器(与字段的选择器类型相关联的字符串)是字符串,不接受正则表达式。这是因为它们是通过XPath实现的,大多数(如果不是全部)浏览器只支持XPath 1.0,因此没有正则表达式支持。大多数选择器类型都支持:text选项但是应用于结果元素,而不是可用于查找结果元素的任何其他元素(在这种情况下,它将应用于字段元素而不是标签) 。因此,如果您正在寻找可以做的实际标签元素

element :correct_date_label, :label, nil, text: /correct_date/i

获得所需内容的一种可能方法是使用xpath选择器,使用当前的Capybara选择器来帮助或编写自己的自定义XPath,以匹配两个案例版本,这些都是

element :correct_date, :xpath, (Capybara::Selector.all[:field].call('Correct date') + Capybara::Selector.all[:field].call('correct date')).to_s   # might need to be | instead of +

element :correct_date, :xpath, ".//*[self::input | self::textarea | self::select][not(./@type = 'submit' or ./@type = 'image' or ./@type = 'hidden')][./@id = //label[(contains(normalize-space(string(.)), 'Correct date') or contains(normalize-space(string(.)), 'correct date'))]/@for] | .//label[(contains(normalize-space(string(.)), 'Correct date') or contains(normalize-space(string(.)), 'correct date'))]//.//*[self::input | self::textarea | self::select][not(./@type = 'submit' or ./@type = 'image' or ./@type = 'hidden')]"

但这开始变得有点复杂