当xpath中的内容只含有单引号或只含有双引号时,处理都是比较简单的
例:
只含有单引号的处理:
title内容为:a'a
slenium.isElementPresent("//tr/td[@title=\"a'a\"]");
只含有双引号的处理:
title内容为:a"a
slenium.isElementPresent("//tr/td[@title='a\"a']");
即用单引号包含双引号,双引号包含单引号,另外如果有多层时,注意使用\"的方式转义;
如果内容同时包含单引号及双引号时,处理的方式同只有单引号或只有双引号相似;
但注意使用xpath中的函数concat进行连接;
例:
title内容为:'"(即一个单引号,一个双引号)
slenium.isElementPresent("//tr/td[@title=concat(\"'\",'\"')]");
重点是:concat(\"'\",'\"'),因为外层还有一个双引号嵌套,所以concat中的双引号要使用\"
简单看为:concat(" ' ",' " ')……这样看应该比较容易理解点:)
当属性内容比较多时
例:
title内容为:aa'aa"aa
slenium.isElementPresent("//tr/td[@title=concat(\"aa'\",'aa\"aa')]");
也可以用:
slenium.isElementPresent("//tr/td[@title=concat('aa',\"'\",'aa','\"','aa')]");
灵活应用哦。。。
http://hi.baidu.com/ligq/blog/item/9195d03f6c0200c57d1e71df.html
这篇文章中有一个函数对xpath中的单引号、双引号进行处理
{
queryStr = queryStr.replace("\"", "[\"]");
queryStr = queryStr.replace("'", "',\"'\",'");
queryStr = queryStr.replace("[\"]", "','\"','");
queryStr = "concat('" + queryStr + "')";
return queryStr;
}
之前使用replaceAll,未使用replace,所以替换后的结果不正确;
因为replaceAll函数的第一个参数是正则表达式,即中括号会被当成正则中的特殊字符处理(解决该方法,可用"\\["代替"[",中括号的后一半"]"没有影响)
当然也可以用别的特殊符号代替中括号,中括号主要起到分隔符的作用;
另:曾尝试使用"代替双引号,'代替单引号,虽然xpath不会报语法错误,但并不能找到相匹配的element,似乎xpath不能对"及'等进行转义;
concat()是目前找到的唯一能处理单引号、双引号同时存在的方法;
如果有其它更好的办法,麻烦各位告知哦。。。