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

fcy6dtqo  于 2023-04-21  发布在  Perl
关注(0)|答案(7)|浏览(128)

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

crcmnpdw

crcmnpdw1#

这是一个XPath问题,而不是Perl问题。
这个问题在这里进行了详细的讨论和回答:http://kushalm.com/the-perils-of-xpath-expressions-specifically-escaping-quotes(断开的链接;检查WayBack Machine archive here
简而言之,修改您的xquery以使用concat()组装包含引号的字符串

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

rqdpfwrv2#

几个建议;希望至少有一个能起作用:

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

ruarlubt3#

我也遇到了同样的问题,谷歌没有给予我一个满意的解决方案。
我试着把这个子串化:value ='-以撇号结尾。
我的XPath看起来像这样:
"substring-after(., concat('value=', ''''))"
连续四个撇号。

deyfvvtc

deyfvvtc4#

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

Text = It's a problem

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

or

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

11dmarpk5#

有没有可能网页上的实际文本是一个 curl 的引号而不是一个直撇号?此外,你可能在跨度的开始和结束处有额外的空间,这样严格的相等对你的字符串将不匹配。

mrzz3bfm

mrzz3bfm6#

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

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

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

ujv3wf0j7#

转义xpath字符串文字中的撇号的解决方案是将撇号加倍,例如qq(span[text()='It''s a problem'])

相关问题