Localizadores relativos

Intermedio
Selenium
Selenium
Actualizado: 05/09/2025

¡Desbloquea el curso de Selenium completo!

IA
Ejercicios
Certificado
Entrar

Mira la lección en vídeo

Accede al vídeo completo de esta lección y a más contenido exclusivo con el Plan Plus.

Desbloquear Plan Plus

Qué son los localizadores relativos

Los localizadores relativos representan una de las innovaciones más significativas introducidas en Selenium 4, diseñada para resolver uno de los problemas más comunes en la automatización de pruebas: localizar elementos que no poseen identificadores únicos o atributos distintivos. Esta funcionalidad, conocida inicialmente como Friendly Locators, permite encontrar elementos basándose en su posición espacial relativa a otros elementos conocidos en la página.

La estrategia tradicional de localización en Selenium se basa en atributos estáticos del DOM como id, name, class, o selectores XPath y CSS. Sin embargo, muchas aplicaciones web modernas generan interfaces dinámicas donde los elementos pueden carecer de identificadores únicos o estos pueden cambiar frecuentemente. Los localizadores relativos abordan esta limitación permitiendo localizar elementos mediante su posición geométrica en relación con otros elementos de referencia.

Funcionamiento interno

Los localizadores relativos utilizan internamente la función JavaScript getBoundingClientRect() para determinar las coordenadas y dimensiones de los elementos en la página. Esta función devuelve un objeto que contiene información sobre la posición del elemento respecto al viewport, incluyendo propiedades como top, left, width y height.

// Sintaxis básica con RelativeLocator
WebElement referenceElement = driver.findElement(By.id("reference"));
WebElement targetElement = driver.findElement(
    RelativeLocator.with(By.tagName("input"))
        .above(referenceElement)
);

El proceso interno funciona de la siguiente manera: Selenium calcula las coordenadas del elemento de referencia, determina la región espacial donde debería encontrarse el elemento objetivo según la relación especificada, y finalmente busca elementos que coincidan con el selector base dentro de esa región.

Sintaxis y estructura

Los localizadores relativos se construyen utilizando la clase RelativeLocator junto con el método estático with(). La estructura básica requiere dos componentes principales: un selector base que define el tipo de elemento a buscar, y uno o más métodos de relación que especifican la posición espacial.

@Test
void testRelativeLocatorBasicSyntax() {
    // Elemento de referencia conocido
    WebElement loginButton = driver.findElement(By.id("login-btn"));
    
    // Localizar input que está arriba del botón de login
    WebElement usernameField = driver.findElement(
        RelativeLocator.with(By.tagName("input"))
            .above(loginButton)
    );
    
    usernameField.sendKeys("usuario@ejemplo.com");
}

La sintaxis alternativa utilizando withTagName() ofrece una forma más concisa para casos comunes:

WebElement element = driver.findElement(
    withTagName("button").below(referenceElement)
);

Casos de uso prácticos

Los localizadores relativos resultan especialmente útiles en formularios complejos donde los campos pueden no tener identificadores únicos pero mantienen una disposición visual consistente. Por ejemplo, en un formulario de registro donde cada campo está posicionado relativamente a una etiqueta o a otros campos.

@Test
void testFormWithRelativeLocators() {
    // Localizar campo de email basándose en la etiqueta
    WebElement emailLabel = driver.findElement(By.xpath("//label[text()='Email']"));
    WebElement emailInput = driver.findElement(
        RelativeLocator.with(By.tagName("input"))
            .toRightOf(emailLabel)
    );
    
    emailInput.sendKeys("test@example.com");
}

Otro escenario frecuente son las tablas dinámicas donde los datos pueden cambiar pero la estructura relativa se mantiene. Los localizadores relativos permiten navegar por celdas basándose en headers conocidos o celdas de referencia.

Limitaciones importantes

Es fundamental comprender que los localizadores relativos tienen limitaciones específicas que pueden afectar su efectividad. No funcionan correctamente con elementos que se superponen visualmente, ya que el cálculo de posiciones puede resultar ambiguo. Además, requieren que el elemento de referencia sea visible y esté renderizado en el DOM en el momento de la búsqueda.

La precisión de los localizadores relativos también depende del diseño responsivo de la aplicación. En diseños que cambian significativamente entre diferentes tamaños de pantalla, las relaciones espaciales pueden volverse impredecibles, afectando la fiabilidad de las pruebas.

Los localizadores relativos representan una evolución natural en las estrategias de localización, complementando los métodos tradicionales con capacidades espaciales que reflejan mejor cómo los usuarios perciben e interactúan con las interfaces web modernas.

Métodos above(), below(), toLeftOf(), toRightOf(), near()

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

Los cinco métodos principales de los localizadores relativos proporcionan un conjunto completo de relaciones espaciales para navegar por elementos web basándose en su posición visual. Cada método implementa una lógica específica de cálculo de coordenadas que determina qué elementos califican como candidatos válidos según su ubicación relativa.

Método above()

El método above() localiza elementos que se encuentran verticalmente por encima del elemento de referencia. Internamente, compara las coordenadas Y de los elementos candidatos con las del elemento de referencia, seleccionando aquellos cuya posición superior es menor.

@Test
void testAboveMethod() {
    WebElement submitButton = driver.findElement(By.id("submit-btn"));
    
    // Buscar el campo de contraseña que está arriba del botón submit
    WebElement passwordField = driver.findElement(
        RelativeLocator.with(By.tagName("input"))
            .above(submitButton)
    );
    
    passwordField.sendKeys("mi_contraseña_segura");
}

Este método resulta especialmente útil en formularios verticales donde los campos se apilan uno encima del otro. La búsqueda considera todos los elementos que estén por encima, sin importar la distancia vertical específica.

Método below()

El método below() funciona de manera inversa a above(), localizando elementos posicionados verticalmente debajo del elemento de referencia. Compara las coordenadas Y seleccionando elementos cuya posición inferior es mayor que la del elemento de referencia.

@Test
void testBelowMethod() {
    WebElement titleElement = driver.findElement(By.tagName("h1"));
    
    // Encontrar el primer párrafo que aparece debajo del título
    WebElement firstParagraph = driver.findElement(
        RelativeLocator.with(By.tagName("p"))
            .below(titleElement)
    );
    
    String paragraphText = firstParagraph.getText();
    assertThat(paragraphText).isNotEmpty();
}

La utilidad de below() se manifiesta en estructuras de contenido donde elementos como párrafos, imágenes o secciones siguen un orden vertical predecible respecto a elementos de referencia como títulos.

Método toLeftOf()

El método toLeftOf() identifica elementos posicionados horizontalmente a la izquierda del elemento de referencia. La lógica compara las coordenadas X, seleccionando elementos cuya posición derecha es menor que la posición izquierda del elemento de referencia.

@Test
void testToLeftOfMethod() {
    WebElement searchButton = driver.findElement(By.className("search-btn"));
    
    // Localizar el campo de búsqueda que está a la izquierda del botón
    WebElement searchInput = driver.findElement(
        RelativeLocator.with(By.tagName("input"))
            .toLeftOf(searchButton)
    );
    
    searchInput.sendKeys("término de búsqueda");
    searchButton.click();
}

Este método es fundamental para interfaces horizontales como barras de herramientas, navegación o formularios en línea donde los elementos se organizan de izquierda a derecha.

Método toRightOf()

El método toRightOf() opera como el complemento de toLeftOf(), localizando elementos posicionados horizontalmente a la derecha del elemento de referencia. Compara coordenadas X seleccionando elementos cuya posición izquierda es mayor que la posición derecha del elemento de referencia.

@Test
void testToRightOfMethod() {
    WebElement usernameLabel = driver.findElement(By.xpath("//label[text()='Usuario:']"));
    
    // Buscar el campo de entrada que está a la derecha de la etiqueta
    WebElement usernameInput = driver.findElement(
        RelativeLocator.with(By.tagName("input"))
            .toRightOf(usernameLabel)
    );
    
    usernameInput.sendKeys("nombre_usuario");
}

La aplicación práctica de toRightOf() se evidencia en formularios horizontales donde las etiquetas preceden a los campos de entrada, o en interfaces donde botones de acción se posicionan a la derecha de elementos informativos.

Método near()

El método near() representa el más flexible de los localizadores relativos, identificando elementos dentro de un radio aproximado de 50 píxeles del elemento de referencia. Este método no considera direcciones específicas, sino proximidad general.

@Test
void testNearMethod() {
    WebElement profileImage = driver.findElement(By.className("profile-img"));
    
    // Encontrar el botón de edición cerca de la imagen de perfil
    WebElement editButton = driver.findElement(
        RelativeLocator.with(By.tagName("button"))
            .near(profileImage)
    );
    
    editButton.click();
}

El método near() resulta invaluable en interfaces complejas donde elementos relacionados se agrupan visualmente sin seguir patrones direccionales estrictos. Es particularmente útil para localizar controles auxiliares como botones de ayuda, iconos de información o menús contextuales.

Combinación de métodos

La verdadera versatilidad de los localizadores relativos emerge al combinar múltiples métodos para crear criterios de localización más precisos. Esta aproximación reduce la ambigüedad en interfaces densas donde un solo método podría devolver múltiples candidatos.

@Test
void testCombinedMethods() {
    WebElement referenceCell = driver.findElement(By.xpath("//td[text()='Referencia']"));
    
    // Buscar un botón que esté a la derecha Y arriba de la celda de referencia
    WebElement actionButton = driver.findElement(
        RelativeLocator.with(By.tagName("button"))
            .toRightOf(referenceCell)
            .above(referenceCell)
    );
    
    actionButton.click();
}

Consideraciones de rendimiento

Cada método de localización relativa implica cálculos geométricos que pueden impactar el rendimiento de las pruebas. Los métodos direccionales (above(), below(), toLeftOf(), toRightOf()) tienden a ser más eficientes que near(), ya que pueden descartar candidatos más rápidamente basándose en coordenadas específicas.

La estrategia óptima consiste en combinar localizadores relativos con selectores base específicos que limiten el conjunto inicial de elementos candidatos, reduciendo así el número de cálculos geométricos necesarios.

// Más eficiente: selector base específico
WebElement element = driver.findElement(
    RelativeLocator.with(By.className("form-input"))
        .above(referenceElement)
);

// Menos eficiente: selector base amplio
WebElement element = driver.findElement(
    RelativeLocator.with(By.tagName("*"))
        .above(referenceElement)
);

Aprendizajes de esta lección de Selenium

  • Comprender qué son los localizadores relativos y su propósito en Selenium 4.
  • Aprender la sintaxis básica y estructura para utilizar localizadores relativos.
  • Conocer los métodos principales: above(), below(), toLeftOf(), toRightOf() y near().
  • Aplicar localizadores relativos en casos prácticos como formularios y tablas dinámicas.
  • Identificar limitaciones y consideraciones de rendimiento al usar localizadores relativos.

Completa este curso de Selenium y certifícate

Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración