Utilizo XPather Browser para comprobar mis expresiones XPATH en una página HTML.
Mi objetivo final es usar estas expresiones en Selenium para probar mis interfaces de usuario.
Obtuve un archivo HTML con un contenido similar a este:
<tr> <td> abc </td> <td> & nbsp; </td> </tr>
Quiero seleccionar un nodo con un texto que contenga la cadena "
".
Con una cadena normal como "abc" no hay problema. Yo uso un XPATH similar a //td[text()="abc"]
.
Cuando intento con un XPATH como, //td[text()=" "]
no devuelve nada. ¿Existe una regla especial para los textos con " &
"?
Respuestas:
Parece que OpenQA , los chicos detrás de Selenium, ya han abordado este problema. Definieron algunas variables para hacer coincidir explícitamente los espacios en blanco. En mi caso, necesito usar un XPATH similar a
//td[text()="${nbsp}"]
.Reproduje aquí el texto de OpenQA sobre este tema (que se encuentra aquí ):
fuente
\u00a0
. Lo que funcionó para mí fue escribir un espacio sin interrupciones, en macAlt+Shift+Space
. La búsqueda web diceAlt+0160
en Windows.Descubrí que puedo hacer la coincidencia cuando ingreso un espacio sin ruptura codificado (U + 00A0) escribiendo Alt + 0160 en Windows entre las dos comillas ...
funcionó para mí con el char especial.
Por lo que entendí, el estándar XPath 1.0 no maneja el escape de caracteres Unicode. Parece que hay funciones para eso en XPath 2.0, pero parece que Firefox no lo admite (o no entendí algo). Entonces tienes que ver con la página de códigos local. Feo, lo sé.
En realidad, parece que el estándar se basa en el lenguaje de programación que usa XPath para proporcionar la secuencia de escape Unicode correcta ... Entonces, de alguna manera, hice lo correcto.
fuente
$col = $xpath->query("//p[text()=\"\xC2\xA0\"]");
Intente usar la entidad decimal en
 
lugar de la entidad nombrada. Si eso no funciona, debería poder usar simplemente el carácter Unicode para un espacio que no se rompa en lugar del
entidad.(Nota: no probé esto en XPather, pero lo probé en Oxygen).
fuente
Tenga en cuenta que un procesador XML compatible con los estándares se han sustituido las referencias a entidades distintas de las estándar de cinco XML (
&
,>
,<
,'
,"
) con el carácter correspondiente en la codificación de destino en el momento se evalúan las expresiones XPath. Dado ese comportamiento, las sugerencias de PhiLho y jsulak son el camino a seguir si desea trabajar con herramientas XML. Cuando ingresa 
la expresión XPath, debe convertirse a la secuencia de bytes correspondiente antes de aplicar la expresión XPath.fuente
No puedo obtener una coincidencia usando Xpather, pero lo siguiente funcionó para mí con archivos XML y XSL simples en el Bloc de notas XML de Microsoft:
El valor devuelto es 1, que es el valor correcto en mi caso de prueba.
Sin embargo, tuve que declarar nbsp como una entidad dentro de mi XML y XSL usando lo siguiente:
No estoy seguro de si eso le ayuda, pero yo era capaz de realmente encontrar nbsp utilizando una expresión XPath.
Editar: mi ejemplo de código contiene los caracteres "& nbsp;" pero el resaltado de sintaxis de JavaScript lo convierte al carácter de espacio. ¡No se deje engañar!
fuente
Buscar
o solonbsp
: ¿intentaste esto?fuente
Según el HTML que ha proporcionado:
Para localizar el nodo con la cadena
, puede usar cualquiera de los siguientesxpath soluciones basadas:Usando
text()
:Usando
contains()
:Sin embargo, lo ideal sería evitar el carácter de ESPACIO SIN ROTURA y utilizar cualquiera de las siguientes Estrategias de localización :
Usando el
<tr>
nodo padre yfollowing-sibling
:Usando
starts-with()
:Usando el
<td>
nodo anterior y elfollowing
node and
siguiente hermano`:Referencia
Puede encontrar una discusión detallada relevante en:
usando seleniotl; Dr
Carácter Unicode 'ESPACIO SIN INTERRUPCIÓN' (U + 00A0)
fuente
Puede usar, XPath Contiene, Sibling, Ancestor Functions en Selenium WebDriver para ubicar elementos que no tienen propiedades únicas para ser identificados.
Para obtener más detalles, lea esta página: https://www.guru99.com/using-contains-sbiling-ancestor-to-find-element-in-selenium.html
fuente