2010-06-26 2 views
8

Ich habe eine XPath-Abfrage, die einen Text in einer Spanne Attribut übereinstimmen muss, wie folgt:Wie kann ich einen Apostroph in meiner XPath-Textabfrage mit Perl und Selenium umgehen?

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

$sel->click_ok($perl_query); 

Wo der Text keinen Apostroph hat es kein Problem ist.

Ich habe die folgenden statt versucht, 'Es ist ein 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. 

Irgendwelche Ideen?

Auf eine andere Anmerkung, wenn ich das nicht lösen kann, würde ich glücklich genug sein, "ein Problem" zu entsprechen, aber nicht sicher, wie Regex-Matching in XPath mit Selenium zu tun.

Danke für alle Hinweise

Antwort

0

Ist es möglich, dass der eigentliche Text auf der Webseite ein geschweifte Zitat ist und nicht eine gerade Apostroph? Außerdem können Sie am Anfang und am Ende des Bereichs zusätzlichen Abstand haben, sodass die strikte Gleichheit Ihrer Zeichenfolge nicht übereinstimmt.

1

Ein paar Vorschläge; hoffentlich zumindest einer von ihnen arbeiten:

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

Danke - aber keiner von diesen funktioniert ... (und es ist auch kein lockiges Zitat). Also habe ich am Ende alle span-Werte erfasst und durchgeschleift, dann normales perl regex verwendet, um das mit meinem String zu vergleichen, wie in: mein $ text = $ sel-> get_text() # XPath einfügen, um Element in Klammern zu überspannen #use täglichen Perl, um zu sehen, ob $ Text enthält "Es ist ein Problem" – CColin

0

Betrachten Sie Ihren String, wenn möglich Zerschlagung:

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

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

Ich hatte gerade das gleiche Problem und Google gab mir keine zufriedene Lösung.

Ich habe versucht, dieses Teil: Wert = ' - Ende mit einem Apostroph.

Meine XPath, die wie funktioniert aussehen:

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

So vier Apostrophe in einer Reihe.

+0

Es funktioniert nicht für mich. – Sagar007

0

Nun, der Beitrag ist ziemlich alt. Aber hier ist meine funktionierende Antwort für diejenigen, die immer noch herumlaufen und nach einem einfachen Apostroph suchen, um keine richtige Antwort zu finden.

Text = It's a problem 

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

or 

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

Die Lösung entweichende Apostrophe in XPath Stringliterale ist das Apostroph zu verdoppeln, z.B. qq (span [text() = 'Es ist ein Problem'])

Verwandte Themen