Pregunta

Con ASP.NET, las ID de etiqueta son bastante volátiles, por lo que para que mis pruebas sean más robustas, quiero localizar elementos mediante los textos de sus etiquetas. He jugado algunos con Watin y lo hace perfectamente, pero ese proyecto parece un poco muerto hoy en día, así que pensé en buscar en Selenium antes de decidir un marco.

Tengo html que se parece a esto

<label for="ctl00_content_loginForm_ctl01_username">Username</label>:
<input type="text" id="ctl00_content_loginForm_ctl01_username" />

No quiero escribir:

selenium.Type("ctl00_content_loginForm_ctl01_username", "xxx");

Eso depende demasiado de la identificación. En Watin escribiría:

browser.TextField(Find.ByLabelText("Username")).TypeText("xxx");

¿Hay alguna forma de hacer esto en Selenium?

¿Fue útil?

Solución

Creo que puedes hacer esto con lo siguiente:

selenium.Type(selenium.getAttribute("//label[text()='Username']/@for"), "xxx");

El bit Text () = 'UserName' obtiene la etiqueta que desea por su InnerHtml, luego el /@para le devuelve el valor de su atributo "para".

Aviso: Esto no se prueba (¡disculpas por eso!) Pero creo que funcionará, basado en algunas herramientas en el complemento IDE

Otros consejos

Esto funciona:

//input[@id=(//label[text()="Username"]/@for)]

Explicación: ya que está buscando la entrada:

//input[@id=("ctl00_content_loginForm_ctl01_username")]

Reemplace el "CTL00_CONTENT_LOGINFORM_CTL01_USERNAME" por el valor del atributo de la etiqueta:

//label[text()="Username"]/@for

Ok, esto puede tener un año de edad, pero lo que oye. Esto seleccionará la primera entrada en una etiqueta que contiene el texto 'Nombre de usuario'.

//label[text()='Username']/input

Generalmente prefiero usar Contiene (), ya que encuentro que algunos navegadores están agregando espacios molestos al elemento ocasional:

//label[contains(., 'Username')]/input

Tenga en cuenta que el corte único antes de la entrada denota que solo se verá hacia abajo, donde la barra doble verificaría todos los niveles debajo de la etiqueta. Use XPather para Firefox para crear y verificar sus XPaths, es muy útil.

Sí, puede usar los localizadores XPATH, CSS o DOM para identificar su elemento. En este ejemplo, su XPath podría parecerse // lable [@for = 'ctl00_content_loginform_ctl01_username'] para identificar esa etiqueta en particular.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top