Localizar elementos por texto de enlace & Texto de enlace parcial en Selenium Webdriver

Tabla de contenido:

Anonim

¿Qué es el texto de enlace en selenio?

Se utiliza un texto de enlace en Selenium para identificar los hipervínculos en una página web. Se determina con la ayuda de una etiqueta de anclaje. Para crear los hipervínculos en una página web, podemos usar 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 ejemplos a continuación proporcionan escenarios en los que existirían múltiples coincidencias y explicarían cómo WebDriver los trataría.

En este tutorial, aprenderemos los métodos disponibles para buscar y acceder a los enlaces usando Webdriver. Además, analizaremos algunos de los problemas comunes que se enfrentan al acceder a los enlaces y analizaremos cómo resolverlos.

Esto es lo que aprenderá:

  • Acceder a enlaces usando la Coincidencia de texto exacta: By.linkText ()
  • Accediendo a enlaces usando Partial Text Match: By.partialLinkText ()
  • Cómo obtener varios enlaces con el mismo texto de enlace
  • Distinción de mayúsculas y minúsculas para el texto del enlace
  • Vínculos dentro y fuera de un bloque

Acceder a enlaces usando la Coincidencia de texto exacta: By.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 de enlace, este método solo 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;importar org.openqa.selenium.WebDriver;importar org.openqa.selenium.chrome.ChromeDriver;public class MyClass {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/link.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Controlador WebDriver = nuevo ChromeDriver ();driver.get (baseUrl);driver.findElement (By.linkText ("haga clic aquí")). click ();System.out.println ("el título de la página es: + driver.getTitle ());driver.quit ();}}

Así es como funciona-

Como resultado, se le dirigirá automáticamente a Google.

Accediendo a enlaces usando Partial Text Match: By.partialLinkText ()

El acceso a los enlaces mediante una parte del texto del enlace se realiza mediante el método By.partialLinkText () . 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 de WebDriver a continuación, seguirá siendo llevado a Google.

Código:

import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;importar org.openqa.selenium.chrome.ChromeDriver;clase pública P1 {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/accessing-link.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Controlador WebDriver = nuevo ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText ("aquí")). click ();System.out.println ("El título de la página es: + driver.getTitle ());driver.quit ();}}

Cómo obtener varios 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 del enlace y queremos acceder a otros enlaces distintos al primero, ¿cómo lo hacemos?

En tales casos, generalmente, se utilizan diferentes localizadores a saber… By.xpath (), By.cssSelector () o By.tagName ().

El más utilizado es By.xpath (). Es el más confiable, pero también parece complejo y no legible.

Distinción de mayúsculas y minúsculas para el texto del enlace

Los parámetros de By.linkText () y By.partialLinkText () distinguen entre mayúsculas y minúsculas, lo que significa que las mayúsculas son importantes. Por ejemplo, en la página de inicio de Mercury Tours, hay dos vínculos que contienen el texto "egis": uno es el vínculo "REGISTRARSE" que se encuentra en el menú superior y el otro es el vínculo "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 es el método "By.partialLinkText ()" que accederá a estos dos enlaces por separado dependiendo de las mayúsculas de los caracteres. Vea el código de muestra a continuación.

Código

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Controlador WebDriver = nuevo ChromeDriver ();driver.get (baseUrl);Cadena theLinkText = driver.findElement (Por.partialLinkText ("egis")).getText ();System.out.println (theLinkText);theLinkText = driver.findElement (Por.partialLinkText ("EGIS")).getText ();System.out.println (theLinkText);driver.quit ();}

Vínculos dentro y fuera 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 mediante el método By.partialLinkText ().

Código:

import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;importar org.openqa.selenium.chrome.ChromeDriver;public class MyClass {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/block.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Controlador WebDriver = nuevo ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText ("Inside")). click ();System.out.println (driver.getTitle ());driver.navigate (). back ();driver.findElement (By.partialLinkText ("Afuera")). click ();System.out.println (driver.getTitle ());driver.quit ();}}

El resultado anterior confirma que se accedió a ambos enlaces correctamente porque sus respectivos títulos de página 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:
    • By.linkText (): ubica los enlaces según la coincidencia exacta del texto del enlace proporcionado como parámetro.
    • By.partialLinkText (): localiza enlaces según la coincidencia de texto parcial del texto del enlace.
  • Ambos 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, CSS.
  • El método findElements () & By.tagName ("a") encuentra todos los elementos de 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.