Localize elementos por texto de link e texto de link parcial no Selenium

O que é o texto do link no Selenium?

A Texto do link em Selenium é usado para identificar os hiperlinks em uma página da web. É determinado com a ajuda de uma tag âncora. Para criar hiperlinks em uma página web, podemos usar uma tag âncora seguida do texto do link.

Links que correspondem a um critério

Os links podem ser acessados ​​usando uma correspondência exata ou parcial do texto do link. Os exemplos abaixo fornecem cenários onde existiriam múltiplas correspondências e explicariam como o WebDriver lidaria com elas.

Neste tutorial, aprenderemos os métodos disponíveis para localizar e acessar os Links usando o Webdriver. Além disso, discutiremos alguns dos problemas comuns enfrentados ao acessar links e discutiremos mais detalhadamente como resolvê-los.

Texto completo do link em Selenium – By.linkText()

O acesso aos links usando o texto exato do link é feito através do método By.linkText(). Porém, se houver dois links com o mesmo texto do link, este método acessará apenas o primeiro. Considere o código HTML abaixo

Texto do link em Selenium – By.LinkText()

Texto do link em Selenium – By.LinkText()

Ao tentar executar o código WebDriver abaixo, você acessará o primeiro link “clique aqui”

Texto do link em Selenium – By.LinkText()

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 = "http://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();			
    }		

}			

É assim que funciona-

Texto do link em Selenium – By.LinkText()

Como resultado, você será automaticamente direcionado ao Google.

Texto do link em Selenium – By.LinkText()

Texto de link parcial completo em Selenium – By.partialLinkText()

O acesso aos links usando uma parte do texto do link é feito usando o Por.partialLinkText() método. Se você especificar um texto de link parcial que tenha diversas correspondências, somente a primeira correspondência será acessada. Considere o código HTML abaixo.

Texto do link parcial em Selenium – By.partialLinkText()

Texto do link parcial em Selenium – By.partialLinkText()

Ao executar o código WebDriver abaixo, você ainda será direcionado ao Google.

Texto do link parcial em Selenium – By.partialLinkText()

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 = "http://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 do link parcial em Selenium – By.partialLinkText()

Como obter vários links com o mesmo texto de link

Então, como contornar o problema acima? Nos casos em que existem vários links com o mesmo texto de link e queremos acessar outros links que não o primeiro, como fazemos?

Nesses casos, geralmente, diferentes localizadores viz… By.xpath(), By.cssSelector() ou By.tagName() são usados.

O mais comumente usado é By.xpath(). É o mais confiável, mas parece complex e não legível também.

Sensibilidade a maiúsculas e minúsculas para texto do link

Sensibilidade a maiúsculas e minúsculas para texto do link

Os parâmetros para Por.linkText() e Por.partialLinkText() ambos diferenciam maiúsculas de minúsculas, o que significa que a capitalização é importante. Por exemplo, na página inicial da Mercury Tours, existem dois links que contêm o texto “egis” – um é o link “REGISTRO” encontrado no menu superior, e o outro é o link “Registre-se aqui” encontrado na parte inferior direita da página.

Sensibilidade a maiúsculas e minúsculas para texto do link

Embora ambos os links contenham a sequência de caracteres “egis”, um deles é o método “By.partialLinkText()” que acessará esses dois links separadamente, dependendo da capitalização dos caracteres. Veja o código de exemplo abaixo.

Sensibilidade a maiúsculas e minúsculas para texto do link

Code

public static void main(String[] args) {								
        String baseUrl = "http://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();			

    }

Links fora e dentro de um bloco

O padrão HTML5 mais recente permite que as tags sejam colocadas dentro e fora de tags em nível de bloco, como , ou . Os métodos “By.linkText()” e “By.partialLinkText()” podem acessar um link localizado fora e dentro desses elementos de nível de bloco. Considere o código HTML abaixo.

Links fora e dentro de um bloco

Links fora e dentro de um bloco

O código WebDriver abaixo acessa esses dois links usando o método By.partialLinkText().

Links fora e dentro de um bloco

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 = "http://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();			
    }		
}		

A saída acima confirma que ambos os links foram acessados ​​com sucesso porque seus respectivos títulos de páginas foram recuperados corretamente.

Resumo

  • Os links são acessados ​​usando o método click().
  • Além dos localizadores disponíveis para qualquer WebElement, os Links também possuem localizadores baseados em texto de link:
    • Por.linkText() – localiza os links com base na correspondência exata do texto do link fornecido como parâmetro.
    • Por.partialLinkText() – localiza links com base na correspondência parcial do texto do link.
  • Ambos os localizadores acima diferenciam maiúsculas de minúsculas.
  • Se houver várias correspondências, By.linkText() e By.partialLinkText() selecionarão apenas a primeira correspondência. Nos casos em que vários links com o mesmo texto de link estão presentes, outros localizadores baseados em XPath e CSS são usados.
  • O método findElements() & By.tagName(“a”) encontra todos os elementos na página que correspondem aos critérios do localizador
  • Os links podem ser acessados ​​por By.linkText() e By.partialLinkText(), estejam eles dentro ou fora de elementos de nível de bloco.