Как избежать апострофа в моем текстовом запросе XPath с помощью Perl и Selenium? - PullRequest
11 голосов
/ 26 июня 2010

У меня есть запрос XPath, который должен соответствовать некоторому тексту в атрибуте span следующим образом:

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

$sel->click_ok($perl_query);

Если в тексте нет апострофа, проблем нет.

I 'Мы попробовали следующее вместо «Это проблема»:

'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 ]

3 голосов
/ 17 января 2012

Это проблема 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"]);
2 голосов
/ 14 сентября 2012

У меня была та же самая проблема, и Google не дал мне удовлетворительного решения.

Я попытался подстроковать это: value = ' - заканчивается апострофом.

Мой XPath, который работает, выглядит следующим образом:

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

Итак, четыре апострофа подряд.

2 голосов
/ 26 июня 2010

пара предложений; надеюсь, что хотя бы один из них будет работать:

my $perl_query = qq!span[text()='It\\'s a problem']!;
my $perl_query = qq!span[text()="It's a problem"]!;
1 голос
/ 07 декабря 2016

Ну, пост довольно старый.Но вот мой рабочий ответ для тех, кто все еще бродит в поисках выхода из единственного апострофа и не может найти правильный ответ.

Text = It's a problem

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

or

Solution xpath = //div[contains(text(),\"It's a\")]
0 голосов
/ 20 сентября 2017

Чтобы избежать апострофов в строковых литералах xpath, нужно удвоить апостроф, например, qq (span [text () = 'Это проблема'])

0 голосов
/ 27 июня 2010

Подумайте над тем, чтобы разбить вашу строку:

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

# $perlQuery = span[text()='It's a problem']
0 голосов
/ 26 июня 2010

Возможно ли, что фактический текст на веб-странице является вьющейся цитатой, а не прямым апострофом? Кроме того, у вас может быть дополнительное пространство в начале и конце диапазона, так что строгое равенство с вашей строкой не будет совпадать.

...