Texto do link e texto do link parcial em Selenium
O que é o texto do link 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 – Por.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
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 = "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(); } }
É assim que funciona-
Como resultado, você será automaticamente direcionado ao Google.
Texto do 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.
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 = "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(); } }
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, como… By.xpath(), By.cssSelector() ou By.tagName() são usados.
O 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 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, em Mercury Na página inicial da Tours, existem dois links que contêm o texto “egis” – um é o link “REGISTRO” encontrado no menu superior, e o outro é o link “Cadastre-se aqui” encontrado 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 código de exemplo abaixo.
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(); }
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.
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 = "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(); } }
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.