operator examples and xpath

examples - xpath selenium



Xpath: seleccione div que contiene la clase AND cuyo elemento hijo especĂ­fico contiene texto (4)

Con la ayuda de esta pregunta SO , tengo una xpath casi operativa:

//div[contains(@class, ''measure-tab'') and contains(., ''someText'')]

Sin embargo, esto obtiene dos divs : en uno es el niño td que tiene algún texto, el otro es el span hijo.

¿Cómo puedo reducirlo a la que tiene el span ?

<div class="measure-tab"> <!-- table html omitted --> <td> someText</td> </div> <div class="measure-tab"> <-- I want to select this div (and use contains @class) <div> <span> someText</span> <-- that contains a deeply nested span with this text </div> </div>


Para encontrar un div de una determinada clase que contenga un span a cualquier profundidad que contenga cierto texto, intente:

//div[contains(@class, ''measure-tab'') and contains(.//span, ''someText'')]

Dicho esto, esta solución parece extremadamente frágil. Si la tabla contiene un span con el texto que está buscando, la div contiene la tabla también coincidirá. Yo sugeriría encontrar una forma más robusta de filtrar los elementos. Por ejemplo, mediante el uso de ID o estructura de documentos de nivel superior.


Podrías usar el xpath:

//div[@class="measure-tab" and .//span[contains(., "someText")]]

Entrada:

<root> <div class="measure-tab"> <td> someText</td> </div> <div class="measure-tab"> <div> <div2> <span>someText2</span> </div2> </div> </div> </root>

Salida:

Element=''<div class="measure-tab"> <div> <div2> <span>someText2</span> </div2> </div> </div>''


Puede cambiar su segunda condición para verificar solo el elemento span:

...and contains(div/span, ''someText'')]

Si el span no siempre está dentro de otra div también puedes usar

...and contains(.//span, ''someText'')]

Esto busca el lapso en cualquier lugar dentro de la div.


Puedes usar ancestor . Me parece que esto es más fácil de leer porque el elemento que está seleccionando en realidad está al final de la ruta.

//span[contains(text(),''someText'')]/ancestor::div[contains(@class, ''measure-tab'')]