如何在使用Perl和Selenium进行XPath文本查询时转义单引号?

12
我有一个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个回答

4

2
希望以下几点建议中的至少一点能够起作用:
my $perl_query = qq!span[text()='It\\'s a problem']!;
my $perl_query = qq!span[text()="It's a problem"]!;

谢谢 - 但这些都没有起作用...(也不是弯引号)。所以最后我捕获并循环遍历了所有的span值,然后使用普通的Perl正则表达式将其与我的字符串匹配,如下所示: my $text = $sel->get_text() #在括号中插入XPath到span元素 #使用日常Perl来查看$text是否包含"It's a problem" - CColin
这个很好用,因为在Chrome中我需要已经将整个xpath放在引号中: $x("//div[.="我的朋友的值在这里?"]/../ul/li") - Charlie S

2

我遇到了同样的问题,但在谷歌上没有找到满意的解决方案。

我尝试截取这个字符串:value=' - 以撇号结尾。

我的XPath代码如下:

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

所以要输入四个撇号。


1

这篇文章相当老了。但是,对于那些仍然四处徘徊寻找逃避单个撇号并找不到正确答案的人,以下是我的可行答案。

Text = It's a problem

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

or

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

0

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

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

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

0

网页上的实际文本可能是弯引号而不是直撇号,这种情况是否可能?此外,您的span开头和结尾可能有额外的空格,导致严格相等运算符无法匹配您的字符串。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接