我想知道Xpath是否使用'
或"
作为值?
我有要捕获的Web元素
<div class="has-error ng-scope ng-hide" ng-show="element['ServerValidationFailed']">Sorry, that isn't a valid number.</div>
通常Xpath应该具有这种模式Xpath=//tagname[@attribute='value']
但是当我尝试使用'
包围这些值时
//div[@ng-show='element['ServerValidationFailed']']
和
//div[text()='Sorry, that isn't a valid number.']
,
这些无效(Google Chrome开发者工具找不到网络元素)。
当我尝试"
来获得像这样的值
//div[@ng-show="element['ServerValidationFailed']"]
和
//div[text()="Sorry, that isn't a valid number."]
工作正常(Chrome开发者工具会找到匹配项)。
我现在有点困惑,是单引号'
还是双引号"
?
答案 0 :(得分:2)
xpath支持单引号和双引号来定义属性,但是在单引号转义的情况下,它不遵循一般的编程概念。因此,在单引号转义的情况下,始终将属性值放在双引号中。
答案 1 :(得分:2)
任何一种都可以正常工作。它取决于您要匹配的内容。
w3.org xpath abbreviated syntax中显示的示例建议使用双引号("
)。
原因是因为您可以使用"
转义\"
,但不能使用'
转义\'
。
如果要匹配的值包含'
字符,则应使用"
来包装值。
//div[@ng-show="element['ServerValidationFailed']"]
如果要匹配的值包含"
但不包含'
,则可以使用'
包装该值。
//div[@ng-show='element["ServerValidationFailed"]']
如果要匹配的值同时包含"
和'
,则必须使用"
来包装该值,并用{来转义"
{1}}。
\"
这将匹配类似
//div[@ng-show="element['ServerValidationFailed']==\"0\""]
不是说您应该这样做,只是为了以防万一。
答案 2 :(得分:1)
这是我在单引号和/或双引号这种特定条件下使用的内容。 尝试此操作,并检查您需要验证的文字。
if (!TextString.contains("'")) {
XPath = "//*[contains(text(), \"" + TextString + "\")]" + " | " + "//*[contains(normalize-space(), \"" + TextString + "\")]";
} else if (!Label.contains("\"")) {
XPath = "//*[contains(text(), '" + TextString + "')]" + " | " + "//*[contains(normalize-space(), '" + TextString + "')]";
} else {
XPath = "//*[contains(text()," + "concat('" + TextString.replace("'", "',\"'\",'") + "'))]" + " | " + "//*[contains(normalize-space()," + "concat('" + TextString.replace("'", "',\"'\",'") + "'))]";
}