tutorial org openqa selenium selenium-rc xpath

org - Seleccionar un elemento con xpath y Selenium



selenium webdriver java (3)

Relacionar casos en los que el Sign in es directamente hijo de a hijo de otro elemento:

//a[contains(@class,''btnX'') and .//text()=''Sign in'']

quiero decir

<a class="btnX btnSelectedBG" href="#">Sign in</a>

y

<a class="btnX btnSelectedBG" href="#"><b>Sign in</b></a>

Tengo HTML que se ve básicamente como el siguiente:

... <a class="btnX btnSelectedBG" href="#"><span>Sign in</span></a> ...

El siguiente xpath en Selenium no puede encontrar un elemento :

//a[contains(text(), ''Sign in'') and contains(@class,''btnX'')]

Los siguientes xpaths en Selenium tienen éxito, pero no son lo suficientemente específicos para mí.

//a[contains(text(), ''Sign in'')] //a[contains(@class, ''btnX'')]

¿Por qué el xpath no encuentra un elemento y qué puedo hacer para que funcione?


Yaaa para mi ¡Creo que esta es la mejor respuesta, pero abierta a otras soluciones!

//a[contains(@class,''btnX'') and span[text()=''Sign in'']]


// a [contiene (@ clase, ''btnX'') y span [texto () = ''Iniciar sesión'']] no es una buena idea porque vas a buscar a través del DOM para cada ancla y luego intentas compararlo sus criterios de búsqueda.

Lo ideal es que teclee su XPath en el primer elemento ascendente que tenga una ID y luego avance por el árbol.

por ejemplo, si tu html es

<div id="foo"> <a class="btnX btnSelectedBG" href="#"><span>Sign in</span></a> </div>

Podrías usar:

//div[@id=''foo'']/a[contains(@class, ''btnX'')][span[.=''Sign in'']]

Desgraciadamente, no conozco el resto de la estructura de la página, así que no puedo darte nada más concreto que:

//a[contains(@class, ''btnX'')][span[.=''Sign in'']]

pero en realidad no es una muy buena xpath.

(El aspecto de mi XPath es ligeramente diferente a ti, porque lo he usado como un atajo para el texto () y un segundo conjunto de [] como un atajo para y)