是否可以在 SitePrism 字段中找到不区分大小写值的元素?
Is it possible to find elements in SitePrism fields with case insensitive values?
我需要使用 SitePrism 查找对象的两个标签中的以下元素文本:
- 'Correct date'
- 'correct date'
是否可以在SitePrism中使用不区分大小写的表达式找到这样的元素?我正在尝试以下操作,但出现错误:
元素 :correct_date, :field, "/correct date/i"
错误: 无法找到字段“/correct date/i” (Capybara::ElementNotFound)
无论出于何种原因,上面的表达式在完全匹配时甚至会失败:S
知道我可以尝试什么吗?
简答:否
更长的答案:水豚定位符(与 :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')]"
但这开始变得有点复杂
我需要使用 SitePrism 查找对象的两个标签中的以下元素文本:
- 'Correct date'
- 'correct date'
是否可以在SitePrism中使用不区分大小写的表达式找到这样的元素?我正在尝试以下操作,但出现错误:
元素 :correct_date, :field, "/correct date/i"
错误: 无法找到字段“/correct date/i” (Capybara::ElementNotFound)
无论出于何种原因,上面的表达式在完全匹配时甚至会失败:S 知道我可以尝试什么吗?
简答:否
更长的答案:水豚定位符(与 :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')]"
但这开始变得有点复杂