11

我有一个 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 进行正则表达式匹配。

感谢您的任何指点

4

7 回答 7

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"]);
于 2012-01-17T16:39:29.680 回答
2

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

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

我的 XPath 看起来像:

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

所以连续四个撇号。

于 2012-09-14T12:35:37.867 回答
2

几个建议;希望其中至少有一个可以工作:

my $perl_query = qq!span[text()='It\\'s a problem']!;
my $perl_query = qq!span[text()="It's a problem"]!;
于 2010-06-26T18:02:31.217 回答
1

好吧,帖子很老了。但是,对于那些仍然四处寻找转义单撇号并且无法找到正确答案的人来说,这是我的工作答案。

Text = It's a problem

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

or

Solution xpath = //div[contains(text(),\"It's a\")]
于 2016-12-07T10:27:31.933 回答
0

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

于 2010-06-26T17:44:41.157 回答
0

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

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

# $perlQuery = span[text()='It's a problem']
于 2010-06-27T11:03:50.673 回答
0

The solution to escaping apostrophes in xpath string literals is to double the apostrophe, e.g. qq(span[text()='It''s a problem'])

于 2017-09-20T18:15:10.610 回答