我在SitePrism需要找到的对象的两个标签中有以下元素文本:
是否可以通过在SitePrism中使用不区分大小写的表达式来查找此类元素?我正在尝试以下但是我收到了一个错误:
元素:correct_date,:field,“/ correct date / i”
错误:无法找到字段“/ correct date / i”(Capybara :: ElementNotFound)
上述表达式甚至在完全匹配时失败,无论出于何种原因:S 知道我能尝试什么吗?
答案 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')]"
但这开始变得有点复杂