Localizar elementos por texto de link & Texto do link parcial no Selenium Webdriver

Índice:

Anonim

O que é o texto do link no Selenium?

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

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 em que existiriam várias 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 a fundo como resolvê-los.

Aqui está o que você aprenderá-

  • Acessando links usando correspondência exata de texto: By.linkText ()
  • Acessando links usando Partial Text Match: By.partialLinkText ()
  • Como obter vários links com o mesmo texto de link
  • Sensibilidade a maiúsculas e minúsculas para texto de link
  • Links fora e dentro de um bloco

Acessando links usando correspondência exata de texto: By.linkText ()

O acesso aos links usando o texto exato do link é feito por meio do método By.linkText () . No entanto, se houver dois links com o mesmo texto de link, esse método acessará apenas o primeiro. Considere o código HTML abaixo

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

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");Driver WebDriver = novo ChromeDriver ();driver.get (baseUrl);driver.findElement (By.linkText ("clique aqui")). click ();System.out.println ("o título da página é: + driver.getTitle ());driver.quit ();}}

É assim que funciona-

Como resultado, você será direcionado automaticamente para o Google.

Acessando links usando Partial Text Match: By.partialLinkText ()

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

Ao executar o código WebDriver abaixo, você ainda será direcionado ao 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 = "http://demo.guru99.com/test/accessing-link.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Driver WebDriver = novo ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText ("aqui")). click ();System.out.println ("O título da página é: + driver.getTitle ());driver.quit ();}}

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 os links diferentes do primeiro, como faremos?

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

Mais comumente usado é By.xpath (). É o mais confiável, mas também parece complexo e ilegível.

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

Os parâmetros para By.linkText () e By.partialLinkText () 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 "CADASTRE-SE" localizado no menu superior e o outro é o link "Cadastre-se aqui" localizado na parte inferior direita da página.

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

Código

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Driver WebDriver = novo ChromeDriver ();driver.get (baseUrl);String theLinkText = driver.findElement (por.partialLinkText ("egis")).getText ();System.out.println (theLinkText);theLinkText = driver.findElement (Por.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 das 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.

O código WebDriver abaixo acessa esses dois links usando o 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 = "http://demo.guru99.com/test/block.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Driver WebDriver = novo ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText ("Inside")). click ();System.out.println (driver.getTitle ());driver.navigate (). back ();driver.findElement (By.partialLinkText ("Fora")). 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ágina 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:
    • By.linkText () - localiza os links com base na correspondência exata do texto do link fornecido como parâmetro.
    • By.partialLinkText () - localiza links com base na correspondência de texto 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. Em tais casos, onde vários links com o mesmo texto de link estão presentes, outros localizadores baseados em xpath, 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.