Los enlaces son uno de los elementos más importantes en cualquier aplicación web y dominarlos en Selenium WebDriver es esencial para automatizar flujos de navegación, menús, llamadas a la acción y pruebas de redirección.
En esta guía aprenderás qué son By.linkText() y By.partialLinkText(), cómo utilizarlos correctamente, qué limitaciones tienen y qué alternativas usar cuando existen múltiples enlaces con el mismo texto.
¿Qué es el Link Text en Selenium?
En Selenium, el link text se refiere al texto visible de un enlace HTML, es decir, al contenido entre las etiquetas <a> y </a>. Cuando usas los localizadores By.linkText() y By.partialLinkText(), Selenium busca el enlace basándose precisamente en ese texto.
Un enlace típico en HTML se ve así:
<a href="https://www.ejemplo.com">Haz clic aquí</a>
En este caso:
- El link text es:
Haz clic aquí. - Selenium podrá localizar este enlace usando exactamente ese texto, con sensibilidad a mayúsculas y minúsculas.
Estos localizadores son especialmente útiles cuando los enlaces tienen textos claros, únicos y estables, por ejemplo, “Iniciar sesión”, “Registrarse” o “Olvidé mi contraseña”.
Localizar enlaces con By.linkText(): coincidencia exacta
By.linkText() permite localizar un enlace a partir de una coincidencia exacta del texto del enlace. Es decir, el string que le pases debe ser idéntico al link text, incluyendo espacios y capitalización.
Ejemplo básico con coincidencia exacta
Supón una página con varios enlaces “click here”, donde todos comparten el mismo texto visible. Si escribes el siguiente código:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class MyClass {
public static void main(String[] args) {
String baseUrl = "https://cibered.com/test/link.html";
System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get(baseUrl);
driver.findElement(By.linkText("click here")).click();
System.out.println("title of page is: " + driver.getTitle());
driver.quit();
}
}
Puntos clave de este comportamiento:
- Selenium localizará el primer enlace que coincida con el texto
"click here". - Si hay varios enlaces con ese mismo texto, el resto se ignorará en esa llamada.
- Tras hacer clic, se navegará a la URL asociada a ese primer enlace, por ejemplo, Google u otra página de prueba.
Este comportamiento es importante a la hora de diseñar páginas y tests: si tu aplicación reutiliza el mismo texto en distintas partes, By.linkText() solo llegará al primer elemento encontrado.
Localizar enlaces con By.partialLinkText(): coincidencia parcial
By.partialLinkText() permite localizar un enlace utilizando una parte del texto del enlace. Es muy útil cuando:
- El link text es largo, pero contiene una palabra clave clara.
- El texto del enlace puede cambiar ligeramente, pero mantiene un fragmento reconocible.
- Quieres hacer tu código un poco más flexible ante pequeños cambios de copy.
Ejemplo de uso con coincidencia parcial
Imagina una página con textos como “click here to open Google” y otros enlaces con textos similares. El siguiente código:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class P1 {
public static void main(String[] args) {
String baseUrl = "https://cibered.com/test/accessing-link.html";
System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get(baseUrl);
driver.findElement(By.partialLinkText("here")).click();
System.out.println("Title of page is: " + driver.getTitle());
driver.quit();
}
}
Hace lo siguiente:
- Busca el primer enlace cuyo texto contenga la cadena
"here". - Hace clic en él y navega a la página asociada.
- Imprime el título de la página para confirmar que se ha llegado al destino correcto.
Al igual que con By.linkText(), si existen varios enlaces que contengan ese fragmento de texto, By.partialLinkText() solo seleccionará el primer enlace que coincida.
¿Cómo manejar múltiples enlaces con el mismo link text?
Una de las limitaciones de By.linkText() y By.partialLinkText() es que, cuando hay varias coincidencias, solo se selecciona la primera. ¿Qué ocurre si necesitas interactuar con el segundo, tercero o cualquier otro enlace que comparta el mismo texto?
En estos casos, las estrategias más comunes son:
- Usar otros localizadores:
By.xpath(),By.cssSelector()oBy.tagName("a"). - Trabajar con
findElements()en lugar defindElement()para obtener una lista de enlaces y acceder por índice. - Combinar partial link text con otros atributos (clases, IDs, estructura de DOM) usando XPaths o selectores CSS.
Aunque By.xpath() y By.cssSelector() pueden parecer más complejos, ofrecen mucha más precisión y control para casos donde el texto del enlace no es suficiente.
Enlaces dentro y fuera de elementos de bloque (block-level)
HTML5 permite que las etiquetas <a> estén tanto dentro como fuera de elementos de bloque como <div>, <p> o <h3>. La buena noticia es que By.linkText() y By.partialLinkText() funcionan igual en ambos casos: no importa si el enlace está anidado dentro de un bloque o no.
Imagina una página de prueba donde exista:
- Un enlace con texto “Inside” dentro de un
<div>. - Un enlace con texto “Outside” fuera de cualquier bloque.
El siguiente código accede a ambos enlaces usando By.partialLinkText():
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class MyClass {
public static void main(String[] args) {
String baseUrl = "https://cibered.com/test/block.html";
System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get(baseUrl);
driver.findElement(By.partialLinkText("Inside")).click();
System.out.println(driver.getTitle());
driver.navigate().back();
driver.findElement(By.partialLinkText("Outside")).click();
System.out.println(driver.getTitle());
driver.quit();
}
}
Aquí se comprueba que:
- Selenium puede localizar y hacer clic en enlaces independientemente de si están dentro de un
<div>u otro contenedor. - Tras cada clic, se puede validar el título de la página para confirmar que la navegación ha tenido éxito.
Buenas prácticas al usar link text en Selenium
Para que tus tests sean más fiables y mantenibles, conviene seguir una serie de recomendaciones al trabajar con By.linkText() y By.partialLinkText():
- Utiliza
By.linkText()cuando el enlace tenga un texto corto, único y poco cambiante (por ejemplo, “Login”, “Sign up”, “Logout”). - Opta por
By.partialLinkText()cuando solo te interese una parte del texto o cuando el copy pueda variar ligeramente, pero conserva una palabra clave. - Evita usar estos localizadores cuando existan muchos enlaces con el mismo texto, ya que solo se seleccionará el primero. En esos casos, combina con
By.xpath()oBy.cssSelector(). - Revisa siempre la capitalización: asegúrate de copiar el texto exactamente como aparece en la página (incluyendo espacios y mayúsculas/minúsculas).
- Considera usar
findElements(By.tagName("a"))para obtener todos los enlaces de una página cuando necesites inspeccionar o validar masivamente la navegación. - Añade aserciones después del clic (título de la página, URL, presencia de un elemento concreto) para comprobar que el enlace correcto ha sido activado.
Conclusión
Estos son los puntos clave que debes tener presentes sobre Link Text y Partial Link Text en Selenium:
- Los enlaces se interactúan mediante
click()después de localizarlos correctamente. By.linkText()localiza enlaces usando una coincidencia exacta del texto visible.By.partialLinkText()localiza enlaces usando una coincidencia parcial del texto.- Ambos son case-sensitive: las mayúsculas y minúsculas deben coincidir exactamente.
- Si hay múltiples enlaces que coinciden, solo se selecciona el primero; para los demás, usa otros localizadores como XPath o CSS.
- Los enlaces pueden localizarse por texto tanto si están dentro como fuera de elementos de bloque (
<div>,<p>,<h3>, etc.). findElements()combinado conBy.tagName("a")permite recuperar y procesar todos los enlaces de una página.
Dominar estos conceptos te permitirá escribir scripts de automatización más claros, robustos y alineados con la estructura real de tus aplicaciones web, optimizando tus pruebas end-to-end con Selenium WebDriver.
