如何使用Perl和Selenium在我的XPath文本查询中转义撇号?

时间:2010-06-26 17:23:36

标签: regex perl xpath selenium apostrophe

我有一个XPath查询需要匹配span属性中的某些文本,如下所示:

my $perl_query = qq(span[text\(\)='It's a problem']);

$sel->click_ok($perl_query);

如果文字没有撇号,则没有问题。

我尝试了以下代替'这是一个问题':

'It\'s a problem'
'It&apos\;s a problem'
'It\${apos}s a problem'  #some thread on Stackoverflow suggested that this was a solution implemented by Selenium, but it doesn't work.

有什么想法吗?

另一方面,如果我无法解决这个问题,我会很乐意匹配“问题”,但不确定如何在XPath中使用Selenium进行正则表达式匹配。

感谢您的任何指示

7 个答案:

答案 0 :(得分:3)

这是一个XPath问题,而不是Perl问题。

这里讨论并解答了这个问题: http://kushalm.com/the-perils-of-xpath-expressions-specifically-escaping-quotes(断链)

简而言之,修改xquery以使用concat()组装包含引号的字符串

my $perl_query = qq(span[text\(\)=concat("It","'","s a problem"]);

答案 1 :(得分:2)

一些建议;希望其中至少有一个能够奏效:

my $perl_query = qq!span[text()='It\\'s a problem']!;
my $perl_query = qq!span[text()="It's a problem"]!;

答案 2 :(得分:2)

我遇到了同样的问题,谷歌没有给我一个满意的解决方案。

我试图对此进行子串: value =' - 以撇号结束。

我的XPath看起来像:

"substring-after(., concat('value=', ''''))"

连续四次罢工。

答案 3 :(得分:1)

这个帖子很老了。但是,对于那些仍然四处寻找逃避单撇号而无法找到正确答案的人来说,这是我的工作答案。

Text = It's a problem

Solution xpath = //div[text()=\"It's a problem\"]

or

Solution xpath = //div[contains(text(),\"It's a\")]

答案 4 :(得分:0)

网页上的实际文字是否可能是卷曲的引用而不是直的撇号?此外,您可能在跨度的开头和结尾有额外的空间,因此与字符串的严格相等将不匹配。

答案 5 :(得分:0)

如果可能,请考虑分解你的字符串:

my $spanValue = q/text()='It's a problem'/;
my $perlQuery = qq/span[$spanValue]/;

# $perlQuery = span[text()='It's a problem']

答案 6 :(得分:0)

在xpath字符串文字中转义撇号的解决方案是将撇号加倍,例如 qq(span [text()='这是一个问题'])