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

Vincular texto en Seleniumโ€“Por.LinkText()

Vincular texto en Seleniumโ€“Por.LinkText()

Cuando intente ejecutar el cรณdigo WebDriver a continuaciรณn, accederรก al primer enlace "haga clic aquรญ"

Vincular texto en Seleniumโ€“Por.LinkText()

Code:

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-

Vincular texto en Seleniumโ€“Por.LinkText()

Como resultado, serรกs llevado automรกticamente a Google.

Vincular texto en Seleniumโ€“Por.LinkText()

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.

Texto de enlace parcial en Selenium โ€“ Por.partialLinkText()

 Texto de enlace parcial en Selenium โ€“ Por.partialLinkText()

Cuando ejecute el cรณdigo WebDriver a continuaciรณn, seguirรก siendo redirigido a Google.

 Texto de enlace parcial en Selenium โ€“ Por.partialLinkText()

Code:

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();			
    }		
}

Texto de enlace parcial en Selenium โ€“ Por.partialLinkText()

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

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.

Sensibilidad entre mayรบsculas y minรบsculas para el texto del enlace

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.

Sensibilidad entre mayรบsculas y minรบsculas para el texto del enlace

Code

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.

Enlaces fuera y dentro de un bloque

Enlaces fuera y dentro de un bloque

El siguiente cรณdigo WebDriver accede a ambos enlaces utilizando el mรฉtodo By.partialLinkText().

Enlaces fuera y dentro de un bloque

Code:

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.

Resumir este post con: