ocalizar elementos por texto de link e texto de link parcial no Selenium Webdriver

O que é o texto do link no Selenium?

PARA Texto do 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 os 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 ()

O acesso aos links usando o texto exato do link é feito através 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'); 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-

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 By.partialLinkText () método. 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'); WebDriver driver = new ChromeDriver(); driver.get(baseUrl); driver.findElement(By.partialLinkText('here')).click(); System.out.println('Title of page is: ' + 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 fazemos isso?

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 deles é o método 'By.partialLinkText ()' que acessará esses dois links separadamente, dependendo da capitalização dos caracteres. Veja o exemplo de código 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'); 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 o tags a serem colocadas dentro e fora das tags de 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'); 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á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 têm 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.