Alex Rivera | Logout

How do I escape an apostrophe in my XPath text query with Perl and Selenium?

Asked 2010-06-26T17:23:35.880
12

I have an XPath query which needs to match some text in a span attribute, as follows:

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

$sel->click_ok($perl_query);

Where the text has no apostrophe there is no problem.

I've tried the following instead of 'It's a 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.

Any ideas?

On a different note, if I can't solve this, I'd be happy enough matching 'a problem' but not sure how to do regex matching in XPath with Selenium.

Thanks for any pointers

Edit
Report

2 Answers

4

It's an XPath problem rather than the Perl problem.

The problem was discussed and answered here in great detail: http://kushalm.com/the-perils-of-xpath-expressions-specifically-escaping-quotes (broken link; check the WayBack Machine archive here)

In a nutshell, modify your xquery to assemble the quote-containing string using concat()

my $perl_query = qq(span[text\(\)=concat("It","'","s a problem"]);
answered 2012-01-17T16:39:29.680
0

Consider breaking up your string if possible:

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

# $perlQuery = span[text()='It's a problem']
answered 2010-06-27T11:03:50.673

Your Answer