2010-06-26 15 views
8

Mam kwerendy XPath, który wymaga, aby dopasować tekst w atrybucie zakresowy, co następuje:Jak mogę uniknąć apostrofu w moim zapytaniu tekstowym XPath z Perl i Selenium?

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

$sel->click_ok($perl_query); 

Jeżeli tekst ma apostrofu nie ma problemu.

Próbowałem następujące zamiast 'To jest problem':

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

pomysłów?

W innej notatce, jeśli nie mogę tego rozwiązać, byłbym zadowolony z dopasowania "problemu", ale nie wiem, jak zrobić dopasowanie do wyrażenia regularnego w XPath z Selenium.

Dzięki za wszelkie wskazówki

Odpowiedz

0

Czy to możliwe, że rzeczywisty tekst na stronie internetowej jest kręcone cytat, a nie prosto apostrof? Ponadto możesz mieć dodatkowe miejsce na początku i końcu zakresu, aby ścisła równość w stosunku do twojego ciągu nie była zgodna.

1

Kilka sugestii; mam nadzieję, że przynajmniej jeden z nich będzie działać:

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

Dzięki - ale żaden z nich nie działał ... (i to nie jest kręcony cytat). Tak więc na końcu przechwyciłem i przeliczyłem wszystkie wartości zakresu, następnie użyłem zwykłego wyrażenia perge, aby dopasować je do mojego ciągu, jak w: my $ text = $ sel-> get_text() #odepnij XPath do elementu span w parantezach #użyj każdego dnia, aby zobaczyć, czy tekst $ zawiera "To jest problem" – CColin

0

Rozważmy rozbijając jeśli to możliwe kryteria:

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

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

Po prostu miałem ten sam problem i google nie dało mi satysfakcjonującego rozwiązania.

Próbowałem podciąć to: wartość = ' - kończąc na apostrof.

Moja XPath, które działa wyglądać następująco:

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

So czterech apostrof w wierszu.

+0

To nie działa dla mnie. – Sagar007

0

Cóż, post jest dość stary. Ale oto moja robocza odpowiedź dla tych, którzy wciąż wędrują po okolicy szukając ucieczki od pojedynczego apostrofu i nie mogąc znaleźć właściwej odpowiedzi.

Text = It's a problem 

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

or 

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

Rozwiązaniem problemu unikania apostrofów w literałach ciągów znaków xpath jest dwukrotność apostrofu, np. qq (span [text() = 'To jest problem'])

Powiązane problemy