Texto de enlace y texto de enlace parcial en Selenium
¿Qué es el texto del enlace? Selenium?
A Enlace de texto en Selenium Se utiliza para identificar los hipervínculos en una página web. Se determina con la ayuda de una etiqueta de anclaje. Para crear hipervínculos en una página web, podemos utilizar una etiqueta de anclaje seguida del texto del enlace.
Enlaces que coinciden con un criterio
Se puede acceder a los enlaces utilizando una coincidencia exacta o parcial del texto del enlace. Los siguientes ejemplos proporcionan escenarios en los que existirían múltiples coincidencias y explicarían cómo WebDriver las manejaría.
En este tutorial, aprenderemos los métodos disponibles para buscar y acceder a los enlaces utilizando Webdriver. Además, discutiremos algunos de los problemas comunes que enfrentan al acceder a los enlaces y discutiremos más a fondo cómo resolverlos.
Texto completo del enlace en Selenium – Por.linkText()
El acceso a los enlaces utilizando su texto de enlace exacto se realiza mediante el método By.linkText(). Sin embargo, si hay dos enlaces que tienen el mismo texto, este método sólo accederá al primero. Considere el código HTML a continuación
Cuando intente ejecutar el código WebDriver a continuación, accederá al primer enlace "haga clic aquí"
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://demo.guru99.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(); } }
Así es como funciona-
Como resultado, se le dirigirá automáticamente a Google.
Complete el texto del enlace parcial en Selenium – Por.partialLinkText()
El acceso a los enlaces utilizando una parte del texto del enlace se realiza utilizando el Por.partialLinkText() método. Si especifica un texto de enlace parcial que tiene varias coincidencias, solo se accederá a la primera coincidencia. Considere el código HTML a continuación.
Cuando ejecute el código WebDriver a continuación, aún será dirigido a Google.
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://demo.guru99.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(); } }
Cómo obtener múltiples enlaces con el mismo texto de enlace
Entonces, ¿cómo solucionar el problema anterior? En los casos en los que hay varios enlaces con el mismo texto y queremos acceder a otros enlaces además del primero, ¿cómo lo hacemos?
En tales casos, generalmente se utilizan localizadores diferentes, a saber: By.xpath(), By.cssSelector() o By.tagName().
El método más utilizado es By.xpath(). Es el más confiable, pero también parece complejo y difícil de leer.
Sensibilidad entre mayúsculas y minúsculas para el texto del enlace
Los parámetros para Por.linkText() y Por.partialLinkText() Ambos distinguen entre mayúsculas y minúsculas, lo que significa que las mayúsculas son importantes. Por ejemplo, en Mercury En la página de inicio de Tours, hay dos enlaces que contienen el texto "egis": uno es el enlace "REGISTRARSE" que se encuentra en el menú superior y el otro es el enlace "Regístrese aquí" que se encuentra en la parte inferior derecha de la página.
Aunque ambos enlaces contienen la secuencia de caracteres "egis", uno de ellos es el método "By.partialLinkText()" que accederá a estos dos enlaces por separado dependiendo del uso de mayúsculas en los caracteres. Vea el código de muestra a continuación.
Código
public static void main(String[] args) { String baseUrl = "https://demo.guru99.com/test/newtours/"; System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get(baseUrl); String theLinkText = driver.findElement(By .partialLinkText("egis")) .getText(); System.out.println(theLinkText); theLinkText = driver.findElement(By .partialLinkText("EGIS")) .getText(); System.out.println(theLinkText); driver.quit(); }
Enlaces fuera y dentro de un bloque
El último estándar HTML5 permite que las etiquetas se coloquen dentro y fuera de etiquetas a nivel de bloque como , o . Los métodos “By.linkText()” y “By.partialLinkText()” pueden acceder a un enlace ubicado fuera y dentro de estos elementos a nivel de bloque. Considere el código HTML a continuación.
El siguiente código WebDriver accede a ambos enlaces utilizando el método By.partialLinkText().
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://demo.guru99.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(); } }
El resultado anterior confirma que se accedió correctamente a ambos enlaces porque los títulos de sus respectivas páginas se recuperaron correctamente.
Resumen
- Se accede a los enlaces mediante el método click().
- Además de los localizadores disponibles para cualquier WebElement, los enlaces también tienen localizadores basados en texto de enlace:
- Por.linkText() – localiza los enlaces basándose en la coincidencia exacta del texto del enlace proporcionado como parámetro.
- Por.partialLinkText() – localiza enlaces basándose en la coincidencia parcial del texto del enlace.
- Los dos localizadores anteriores distinguen entre mayúsculas y minúsculas.
- Si hay varias coincidencias, By.linkText() y By.partialLinkText() solo seleccionarán la primera coincidencia. En los casos en los que hay varios enlaces con el mismo texto de enlace, se utilizan otros localizadores basados en XPath y CSS.
- El método findElements() y By.tagName(“a”) encuentra todos los elementos en la página que coinciden con los criterios del localizador.
- Se puede acceder a los enlaces mediante By.linkText() y By.partialLinkText() ya sea que estén dentro o fuera de elementos a nivel de bloque.