2010-06-26 9 views
8

que tienen una consulta XPath, que debe coincidir con algún texto en un atributo palmo, de la siguiente manera:¿Cómo puedo escapar de un apóstrofo en mi consulta de texto XPath con Perl y Selenium?

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

$sel->click_ok($perl_query); 

Cuando el texto no tiene apóstrofe no hay ningún problema.

He probado los siguientes en lugar de 'Es un problema':

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

¿Alguna idea?

En otro orden de cosas, si no puedo solucionar esto, yo estaría feliz coincidencia suficiente 'un problema' pero no sabe cómo hacerlo coincidencia de expresiones regulares en XPath con selenio.

Gracias por cualquier punteros

Respuesta

0

¿Es posible que el texto real de la página web es una cita rizado y no una comilla recta? Además, puede tener espacio adicional al principio y al final del intervalo, de modo que la igualdad estricta con respecto a su cadena no coincida.

1

Un par de sugerencias; esperemos que al menos uno de ellos trabajará:

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

Gracias - pero ninguno de estos trabajado ... (y no es una cita rizado tampoco). Así que al final capturé y recorrí todos los valores de span, luego usé la expresión normal de perl para unir eso a mi cadena, como en: my $ text = $ sel-> get_text() #introducir XPath al elemento span en parantheses #use perl diario para ver si $ texto contiene "Es un problema" – CColin

0

Considere romper la cadena si es posible:

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

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

yo sólo tenía el mismo problema y Google no me dio una solución satisfecha.

Intenté subscribir esto: value = ' - que termina con un Apostrophe.

Mi XPath que trabaja parezca:

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

Así cuatro apóstrofes en una fila.

+0

No funciona para mí. – Sagar007

0

bien el post es bastante antiguo. Pero aquí va mi respuesta de trabajo para aquellos que todavía vienen deambulando en busca de un solo apóstrofo e incapaces de encontrar la respuesta adecuada.

Text = It's a problem 

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

or 

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

La solución a apóstrofes escapan en literales de cadena XPath es duplicar el apóstrofe, por ejemplo qq (SPAN [Texto() = 'Es un problema'])

Cuestiones relacionadas