Localizadores en Selenium
โก Resumen inteligente
Localizadores en Selenium Son comandos que dirigen al motor de automatizaciรณn para identificar elementos de la interfaz grรกfica de usuario (GUI), como cuadros de texto, botones y casillas de verificaciรณn. Esta referencia explica los tipos de localizadores ID, Nombre, Texto de enlace, DOM y XPath con ejemplos prรกcticos, reglas de sintaxis y estrategias de selecciรณn para scripts de automatizaciรณn web fiables.
ยฟQuรฉ son los localizadores en Selenium?
Un localizador es un comando que dirige Selenium IDE o Selenium WebDriver al elemento GUI correcto, como un cuadro de texto, botรณn, enlace o casilla de verificaciรณn, en el que se debe realizar una acciรณn. Identificar el elemento GUI correcto es un requisito previo para crear cualquier script de automatizaciรณn confiable. Sin embargo, la identificaciรณn precisa es mรกs difรญcil de lo que parece. A veces, puede terminar interactuando con el elemento incorrecto o con ningรบn elemento en absoluto. Para abordar esto, Selenium Ofrece diversas estrategias de localizaciรณn que permiten apuntar con precisiรณn a los elementos de la interfaz grรกfica de usuario.
Si bien algunos comandos, como el comando โabrirโ, no requieren un localizador, la mayorรญa de Selenium Los comandos dependen de los localizadores de elementos. La elecciรณn del localizador depende en gran medida de la aplicaciรณn que se estรก probando (AUT). En este tutorial, alternaremos entre Facebook y el Mercury Sitio de demostraciรณn de tours (newtours.demoaut), en funciรณn de los localizadores que admita cada aplicaciรณn. Asimismo, en su propio sitio de demostraciรณn de tours (newtours.demoaut), segรบn los localizadores que admita cada aplicaciรณn. las pruebas proyecto, seleccionarรก un localizador de elementos en Selenium WebDriver basado en la estructura de su aplicaciรณn.
Localizar por DNI
Este es el mรฉtodo mรกs comรบn para localizar elementos, ya que los ID deben ser รบnicos para cada elemento de una pรกgina. Siempre que exista un atributo ID, deberรญa ser la primera opciรณn para obtener scripts de prueba rรกpidos, estables y fรกciles de leer.
Target Formato: id=id del elemento
Para este ejemplo, utilizaremos una pรกgina de demostraciรณn de Facebook porque Mercury Tours no utiliza atributos de ID para los campos principales de su formulario.
Paso 1) Utilice esta pรกgina de demostraciรณn https://demo.guru99.com/test/facebook.html para realizar pruebas. Inspeccione el cuadro de texto "Correo electrรณnico o telรฉfono" utilizando las herramientas para desarrolladores integradas de su navegador (presione F12 en Chrome, Edge o Firefox) y anote su ID. En este caso, el ID es โemailโ.
Paso 2) Lanza Selenium IDE e ingrese โid=emailโ en el Target cuadro. Haga clic en el botรณn Buscar y observe que el cuadro de texto "Correo electrรณnico o telรฉfono" estรก resaltado en amarillo con un borde verde, lo que indica que Selenium El IDE ha localizado el elemento correctamente.
Localizar por nombre
Localizar elementos por nombre es similar a localizarlos por ID, excepto que usamos el โnombre=โ En su lugar, utilice un prefijo. Este mรฉtodo resulta รบtil cuando los elementos carecen de un ID pero tienen un atributo de nombre definido.
Target Formato: nombre=nombre del elemento
Para la siguiente demostraciรณn, utilizaremos Mercury Tours porque todos los elementos importantes del formulario en el sitio tienen un atributo de nombre.
Paso 1) Navegue a https://demo.guru99.com/test/newtours/ y utilice las herramientas para desarrolladores del navegador para inspeccionar el cuadro de texto "Nombre de usuario". Anote su atributo de nombre.
Aquรญ, el nombre del elemento es โuserNameโ.
Paso 2) In Selenium IDE, ingrese "nombre = nombre de usuario" en el Target cuadro y haga clic en el botรณn Buscar. Selenium El IDE deberรญa localizar el cuadro de texto Nombre de usuario resaltรกndolo.
Cรณmo localizar elementos por nombre usando filtros
Los filtros son รบtiles cuando varios elementos comparten el mismo atributo de nombre. Los filtros son atributos adicionales que se utilizan para distinguir elementos que comparten el mismo nombre. Sin filtros, Selenium Por defecto, solo se seleccionarรก el primer elemento coincidente.
Target Formato: nombre=nombre_del_elemento filtro=valor_del_filtro
Veamos un ejemplo.
Paso 1) Ingrese a Mercury Excursiones.
Registrarse en Mercury Para realizar recorridos, utilice "tutorial" como nombre de usuario y contraseรฑa. Deberรญa aparecer la pรกgina del buscador de vuelos, como se muestra a continuaciรณn.
Paso 2) Utilice las herramientas para desarrolladores para inspeccionar los atributos VALUE.
Observe que los botones de opciรณn Viaje de ida y vuelta y Solo ida comparten el mismo nombre, "tripType". Sin embargo, tienen atributos VALUE diferentes, por lo que podemos usar cada valor como filtro.
Paso 3) Haz clic en la primera fila del editor.
- Primero accederemos al botรณn de opciรณn Unidireccional. Haga clic en la primera lรญnea del Selenium Editor IDE.
- En el cuadro de comandos, introduzca el comando โclickโ.
- En la secciรณn Target En la casilla, introduzca โname=tripType value=onewayโ. La parte โvalue=onewayโ funciona como filtro.
Paso 4) Haga clic en el botรณn Buscar.
Darse cuenta de Selenium El IDE resalta en verde el botรณn de opciรณn "One Way" (Una direcciรณn), lo que confirma que se ha accedido correctamente al elemento a travรฉs de su atributo VALUE.
Paso 5) Seleccione el botรณn de opciรณn "Unidireccional".
Pulse la tecla "X" del teclado para ejecutar el comando de clic. Ahora estรก seleccionado el botรณn de opciรณn "Unidireccional".
Puedes realizar la misma acciรณn en el botรณn de opciรณn Viaje de ida y vuelta, esta vez usando โname=tripType value=roundtripโ como destino.
Localizaciรณn por texto de enlace
Esta estrategia de localizaciรณn se aplica รบnicamente a los textos de los hipervรญnculos. Accedemos al enlace anteponiendo el prefijo โlink=โ al texto visible del hipervรญnculo. Este mรฉtodo es muy legible y funciona bien para las pruebas de navegaciรณn.
Target Formato: enlace=enlace_texto
En el siguiente ejemplo, accederemos al enlace โREGISTRARSEโ que se encuentra en el Mercury Pรกgina de inicio de excursiones.
Paso 1)
- Primero, asegรบrese de haber cerrado sesiรณn en Mercury Excursiones.
- Navegue a la pestaรฑa Mercury Pรกgina de inicio de excursiones.
Paso 2)
- Utilice las herramientas para desarrolladores para inspeccionar el enlace "REGISTRARSE". El texto del enlace aparece entre las etiquetas de anclaje de apertura y cierre.
- En este caso, el texto del enlace es โREGISTRARSEโ. Copie el texto del enlace.
Paso 3) Copia el texto del enlace y pรฉgalo en el Selenium IDE Target caja. Aรฑรกdele el prefijo โlink=โ.
Paso 4) Haga clic en el botรณn Buscar. Selenium El IDE resaltarรก correctamente el enlace REGISTRAR.
Paso 5) Para verificar mรกs, ingrese โclickAndWaitโ en el cuadro de comando y ejecรบtelo. Selenium IDE harรก clic correctamente en el enlace REGISTRARSE y le llevarรก a la pรกgina de registro que se muestra a continuaciรณn.
Localizaciรณn por DOM (modelo de objetos de documento)
El Modelo de objetos de documento (DOM)En tรฉrminos sencillos, describe cรณmo se estructuran los elementos HTML como un รกrbol de nodos. Selenium El IDE puede navegar por este รกrbol para acceder a los elementos de la pรกgina. Al utilizar este mรฉtodo, el Target La caja siempre comienza con โdom=documentโฆโ. El prefijo โdom=โ normalmente se omite porque Selenium El IDE interpreta automรกticamente cualquier valor que comience con "document" como una ruta DOM.
Hay cuatro formas bรกsicas de localizar un elemento a travรฉs del DOM en Selenium:
- getElementById
- obtenerElementosPorNombre
- dom:nombre (se aplica sรณlo a elementos dentro de un formulario con nombre)
- dominio: รญndice
Localizaciรณn por DOM โ getElementById
Primero exploremos el mรฉtodo getElementById del DOM en SeleniumEste mรฉtodo devuelve un รบnico elemento haciendo coincidir su atributo ID.
Sintaxis
document.getElementById("id of the element")
- El ID del elemento es el valor del atributo ID del elemento al que se desea acceder. Este valor siempre debe ir entre comillas.
Paso 1) Utilice esta pรกgina de demostraciรณn https://demo.guru99.com/test/facebook.htmlNavegue hasta allรญ y use las Herramientas para desarrolladores para inspeccionar la casilla de verificaciรณn "Mantener la sesiรณn iniciada". Anote su ID.
El ID que debemos usar es โpersist_boxโ.
Paso 2) Abra Selenium IDE y en el Target En el cuadro ingrese document.getElementById(โpersist_boxโ), luego haga clic en Buscar. Selenium El IDE localizarรก la casilla de verificaciรณn "Mantener la sesiรณn iniciada". Aunque no puede resaltar el interior de la casilla, la rodea con un borde verde brillante, como se muestra a continuaciรณn.
Localizaciรณn por DOM โ getElementsByName
El mรฉtodo getElementById accede a un solo elemento a la vez, concretamente al elemento con el ID especificado. El mรฉtodo getElementsByName funciona de forma diferente. Devuelve un array de elementos que comparten el nombre especificado. Se accede a cada elemento mediante un รญndice numรฉrico que comienza en 0.
Sintaxis
document.getElementsByName("name")[index]
- nombre = nombre del elemento definido por su atributo 'nombre'
- รญndice = un nรบmero entero que indica quรฉ elemento dentro de la matriz getElementsByName se utilizarรก.
Paso 1) Navegue a la pestaรฑa Mercury Acceda a la pรกgina principal de Tours e inicie sesiรณn con el nombre de usuario y la contraseรฑa "tutorial". El navegador cargarรก la pantalla del buscador de vuelos.
Paso 2) Utilice las herramientas para desarrolladores para inspeccionar los tres botones de opciรณn en la parte inferior de la pรกgina (Clase econรณmica, Clase ejecutiva y Primera clase). Observe que todos comparten el mismo nombre: "servClass".
Paso 3) Primero, accedamos al botรณn de opciรณn "Clase econรณmica". De los tres botones de opciรณn, este elemento aparece primero, por lo que su รญndice es 0. En Selenium IDE, escriba document.getElementsByName(โservClassโ)[0] y haga clic en el botรณn Buscar. Selenium El IDE identificarรก correctamente el botรณn de opciรณn de clase econรณmica.
Paso 4) Cambia el nรบmero de รญndice a 1, de modo que tu Target se convierte en document.getElementsByName(โservClassโ)[1]. Haga clic en el botรณn Buscar y Selenium El IDE resaltarรก el botรณn de opciรณn "Clase empresarial" como se muestra a continuaciรณn.
Localizaciรณn por DOM โ dom:nombre
Como se mencionรณ anteriormente, este mรฉtodo solo se aplica si el elemento al que se accede estรก contenido dentro de un formulario con nombre. La ruta del localizador comienza en el formulario y luego desciende hasta el elemento de destino por su nombre.
Sintaxis
document.forms["name of the form"].elements["name of the element"]
- nombre del formulario = el valor del atributo nombre de la etiqueta del formulario que contiene el elemento al que desea acceder
- nombre del elemento = el valor del atributo de nombre del elemento al que desea acceder
Paso 1) Navegue a Mercury Pรกgina de inicio de excursiones https://demo.guru99.com/test/newtours/ y utilice las Herramientas para desarrolladores para inspeccionar el cuadro de texto Nombre de usuario. Observe que estรก contenido en un formulario llamado โhomeโ.
Paso 2) In Selenium En el IDE, escriba document.forms[โhomeโ].elements[โuserNameโ] y haga clic en el botรณn Buscar. Selenium El IDE accederรก al elemento correctamente.
Localizaciรณn por DOM โ dom:index
Este mรฉtodo se aplica incluso cuando el elemento no se encuentra dentro de un formulario con nombre, ya que utiliza el รญndice del formulario en lugar de su nombre. Esto resulta รบtil para pรกginas antiguas o formularios generados automรกticamente donde no es posible asignar nombres.
Sintaxis
document.forms[index of the form].elements[index of the element]
- รndice del formulario = el nรบmero de รญndice (que comienza en 0) del formulario con respecto a toda la pรกgina.
- รญndice del elemento = el nรบmero de รญndice (que comienza en 0) del elemento con respecto al formulario que lo contiene.
Accederemos al cuadro de texto โTelรฉfonoโ en el Mercury Pรกgina de registro para tours. El formulario de esta pรกgina no tiene ni nombre ni ID, por lo que sirve como buen ejemplo.
Paso 1) Navegue a la pestaรฑa Mercury Acceda a la pรกgina de registro de tours e inspeccione el cuadro de texto del telรฉfono. Observe que el formulario circundante no tiene atributos de ID ni de nombre.
Paso 2) Introduzca document.forms[0].elements[3] en el Selenium IDE Target cuadro y haga clic en el botรณn Buscar. Selenium El IDE accederรก correctamente al cuadro de texto del telรฉfono.
Paso 3) Alternativamente, puede usar el nombre del elemento en lugar de su รญndice para obtener el mismo resultado. Ingrese document.forms[0].elements[โphoneโ] en el Target El cuadro de texto del telรฉfono seguirรก resaltado.
Localizaciรณn por XPath
XPath es el lenguaje de consulta utilizado para navegar por los nodos XML (Lenguaje de Marcado Extensible). Dado que HTML puede considerarse una implementaciรณn de XML, XPath Tambiรฉn puede localizar elementos HTML. Es una de las estrategias de localizaciรณn mรกs potentes en Selenium.
- Ventaja: Puede acceder a casi cualquier elemento, incluidos aquellos que no tienen atributos de clase, nombre o ID.
- Desventaja: Es la estrategia de localizaciรณn mรกs compleja debido a sus numerosas reglas y variaciones sintรกcticas.
Las herramientas para desarrolladores de navegadores modernos pueden generar automรกticamente expresiones XPath. En Chrome, Edge o FirefoxHaz clic con el botรณn derecho en un elemento del panel Elementos y selecciona Copiar > Copiar XPath. En el siguiente ejemplo, accederemos a una imagen que no se puede localizar utilizando los mรฉtodos descritos anteriormente.
Paso 1) Navegue a la pestaรฑa Mercury Vaya a la pรกgina principal de Tours y utilice las Herramientas para desarrolladores para inspeccionar el rectรกngulo naranja a la derecha del cuadro amarillo "Enlaces", como se muestra a continuaciรณn.
Paso 2) Haz clic con el botรณn derecho en el cรณdigo HTML del elemento y, a continuaciรณn, selecciona la opciรณn "Copiar XPath".
Paso 3) In Selenium IDE, escriba una sola barra inclinada hacia adelante โ/โ en el Target En el cuadro, pegue la ruta XPath copiada en el paso anterior. La entrada en el Target El cuadro ahora debe comenzar con dos barras diagonales โ//โ.
Paso 4) Haga clic en el botรณn Buscar. Selenium El IDE resaltarรก el cuadro naranja, como se muestra a continuaciรณn.
Por quรฉ es importante elegir el localizador adecuado
Seleccionar la estrategia de localizaciรณn correcta es una de las decisiones mรกs influyentes en Selenium La automatizaciรณn es fundamental porque impacta directamente en la estabilidad del script, la velocidad de ejecuciรณn y el costo de mantenimiento a largo plazo. Un localizador mal elegido puede provocar pruebas inestables, falsos fallos y retrabajos frecuentes cada vez que cambia la interfaz de usuario de la aplicaciรณn. El orden de preferencia recomendado por ingenieros de automatizaciรณn experimentados es: primero el ID, luego el Nombre, seguido del Selector CSS, el Texto del Enlace y, finalmente, la Ruta XPath.
Los localizadores basados โโen ID son los mรกs rรกpidos porque la bรบsqueda del navegador estรก optimizada para identificadores รบnicos. Los localizadores basados โโen nombres son casi igual de eficientes cuando los nombres son รบnicos. Los selectores CSS y XPath ofrecen flexibilidad, pero tienden a ser mรกs lentos y menos propensos a errores cuando los desarrolladores modifican el DOM. El texto de enlace es excelente para enlaces de navegaciรณn, pero su reutilizaciรณn es limitada.
La automatizaciรณn estable tambiรฉn depende de la colaboraciรณn con los desarrolladores. Cuando los evaluadores solicitan atributos de ID o data-* consistentes y significativos durante las revisiones de cรณdigo, la durabilidad de los localizadores mejora considerablemente. Evite depender de ID generados automรกticamente (como los que producen los frameworks), ya que pueden cambiar entre compilaciones. Al priorizar los localizadores legibles y orientados a la intenciรณn, los equipos pueden mantener los conjuntos de pruebas y reducir la deuda tรฉcnica a medida que la aplicaciรณn evoluciona.
Mejores prรกcticas para escribir localizadores confiables
Los localizadores fiables son la base de un sistema mantenible. Selenium Conjunto de pruebas. Las siguientes prรกcticas ayudan a reducir los fallos en los scripts, mejoran la legibilidad y hacen que las pruebas sean resistentes a los cambios en la interfaz de usuario.
- Preferiblemente identificadores รบnicos: Comprueba siempre primero el atributo ID. Los ID estรกn diseรฑados para ser รบnicos dentro de una pรกgina y son la opciรณn que ofrece el mejor rendimiento.
- Utilice los atributos semรกnticos Name y data-*: Anime a los desarrolladores a agregar atributos de prueba estables, como data-testid o data-qa. Estos se mantienen consistentes incluso cuando cambian las clases CSS.
- Evite usar XPath absoluto: Las rutas absolutas como /html/body/div[2]/div[3]/span se rompen fรกcilmente. Utilice expresiones XPath relativas con atributos como //input[@name='userName'].
- Combine atributos para mayor precisiรณn: Cuando un solo atributo no es รบnico, combine varios atributos (por ejemplo, //button[@type='submit' y @name='login']) para apuntar al elemento correcto.
- Utilice el texto con prudencia: Los localizadores que dependen del texto visible pueden presentar fallos en diferentes idiomas. Utilice localizadores basados โโen texto รบnicamente cuando el contenido sea estable y monolingรผe.
- Centralizar los localizadores: Almacene los localizadores en una clase Page Object Model (POM) para que las actualizaciones se puedan realizar en un solo lugar en lugar de en varios scripts de prueba.
- Validar en Herramientas para desarrolladores: Antes de agregar un localizador a un script, pruรฉbelo en la consola del navegador usando $x(โ//xpathโ) para XPath o document.querySelector para CSS para confirmar que devuelve exactamente un elemento.
- Evite los localizadores basados โโen รญndices siempre que sea posible: Las posiciones de รญndice como [3] dependen del orden de los elementos. Incluso cambios menores en el diseรฑo pueden desplazar el รญndice y provocar fallos en el script.
Al aplicar estas prรกcticas de forma consistente, los ingenieros de automatizaciรณn crean conjuntos de pruebas que se adaptan a diferentes equipos y sobreviven a las frecuentes actualizaciones de la interfaz de usuario con un mantenimiento mรญnimo.






























