我需要使用 SitePrism 找到的对象的两个标签中包含以下元素文本:
- '正确日期'
- '正确的日期'
是否可以通过在 SitePrism 中使用不区分大小写的表达式来找到这样的元素?我正在尝试以下操作,但出现错误:
元素:正确日期,:字段,“/正确日期/i”
错误:无法找到字段“/正确日期/i”(Capybara::ElementNotFound)
上面的表达式在完全匹配时甚至会失败,无论出于何种原因:S 知道我可以尝试什么吗?
我需要使用 SitePrism 找到的对象的两个标签中包含以下元素文本:
是否可以通过在 SitePrism 中使用不区分大小写的表达式来找到这样的元素?我正在尝试以下操作,但出现错误:
元素:正确日期,:字段,“/正确日期/i”
错误:无法找到字段“/正确日期/i”(Capybara::ElementNotFound)
上面的表达式在完全匹配时甚至会失败,无论出于何种原因:S 知道我可以尝试什么吗?
简短的回答:没有
更长的答案:Capybara 定位器(与 :field 的选择器类型相关联的字符串是字符串)是字符串,不接受正则表达式。这是因为它们是通过 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')]"
但这开始有点复杂了