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