我需要在我的xpath表达式中使用撇号('),我需要使用它来查找使用webdriver的元素
我需要使用Xpath表达式
//input[@text="WE'd like to hear from you"]
在find元素函数中使用上面的表达式时,我用单引号替换双引号
driver.findelements(By.xpath("//input[@text='WE'd like to hear from you']"))
答案 0 :(得分:19)
使用xpath,如下所示:
driver.findElements(By.xpath("//input[contains(@text,\"WE'd\")]"));
希望这有帮助。
答案 1 :(得分:4)
您必须使用双引号作为 XPath字符串文字分隔符,因为XPath 1.0并未提供转义引号的方法。除此之外,您可以在Java中转义双引号,以避免它与您的 Java字符串分隔符冲突,后者也使用双引号:
driver.findelements(By.xpath("//input[@text=\"WE'd like to hear from you\"]"))
答案 2 :(得分:1)
Escape字符用法无法达到目的。我尝试了连接功能,它就像一个魅力。请参阅下面的xpath。
tag:li工作流程发起人经理/ li
连接函数并将字符串拆分为 -
concat('Manager of Workflow Initiator',"'",'s Manager')
单引号保留在双引号中,而其他字符保存在单引号中。
所以XPath看起来像 -
//li[.=concat('Manager of Workflow Initiator',"'",'s Manager')]
答案 3 :(得分:1)
如果上述解决方案不起作用,则使用转义序列使用以下解决方案。
xpath: //li[.=\"Manager of Workflow Initiator's Manager\"]
这里我们使用转义字符
将整个文本视为字符串答案 4 :(得分:0)
我遇到了类似的情况,我需要为如下所示的元素编写一个xpath:
元素:
<img src="webwb/pzspacer.gif!!.gif" class="inactvIcon" data-ctl="["DatePicker"]" style="cursor:pointer;">
我能够使用Xpath下的grep元素,在其中我使用反斜杠来转义字符[和“。
Xpath ://img[@data-ctl='\[\"DatePicker\"\]']
希望这会有所帮助。
答案 5 :(得分:0)
以上方法都没有涵盖 Quote 和 Apostrophe cos 存在的情况。我为此创建了一个函数,
driver.findElements(By.xpath(String.format("//input[contains(@text,%s))]"),escapeQuotes(textVal));
转义引语的实现。
private String escapeQuotes(String text) {
// If we don't have any Quote then enquote string in Quote
if (!text.contains("\"")) {
return String.format("\"%s\"", text);
}
// If we have some Quote but no Apostrophe then enquote in Apostrophe
if (!text.contains("'")) {
return String.format("'%s'", text);
}
// If input is like Administr"ati'on then we have both " and ' in the string so must use Concat
// we will be building the xPath like below and let the browser xPath evaluation to handle the concatenation
// output : concat('Administr\"',\"ati'on\")
StringBuilder sb = new StringBuilder("concat(");
// Looking for " as they are LESS likely than '
int lastPos = 0;
int nextPos = text.indexOf("\"");
while (nextPos != -1) {
// If this is not the first time through the loop then seperate arguments with ,
if (lastPos != 0) {
sb.append(",");
}
sb.append(String.format("\"%s\",'\"'", text.substring(lastPos, nextPos - lastPos)));
lastPos = ++nextPos;
// Find next occurrence
nextPos = text.indexOf("\"", lastPos);
}
sb.append(String.format(",\"%s\")", text.substring(lastPos)));
return sb.toString();
}