views:

45

answers:

3

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

A: 

Is it possible that the actual text on the web page is a curly quote and not a straight apostrophe? Also, you may have extra space at the beginning and end of the span, so that the strict equality against your string won't match.

Ned Batchelder
+1  A: 

A couple of suggestions; hopefully at least one of them will work:

my $perl_query = qq!span[text()='It\\'s a problem']!;
my $perl_query = qq!span[text()="It's a problem"]!;
mobrule
Thanks - but none of these worked... (and it isn't a curly quote either).So in the end I captured and looped through all span values, then used normal perl regex to match that to my string, as in:my $text = $sel->get_text() #insert XPath to span element in parantheses#use everyday perl to see if $text contains "It's a problem"
CColin
A: 

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