링크 텍스트 및 부분 링크 텍스트로 요소 찾기 Selenium
링크 텍스트란? Selenium?
A 링크 텍스트 입력 Selenium 웹페이지의 하이퍼링크를 식별하는 데 사용됩니다. 앵커 태그를 사용하여 결정됩니다. 웹 페이지에 하이퍼링크를 만들기 위해 앵커 태그와 링크 텍스트를 사용할 수 있습니다.
기준과 일치하는 링크
링크 텍스트와 정확히 일치하거나 부분적으로 일치하는 것을 사용하여 링크에 액세스할 수 있습니다. 아래 예는 여러 일치 항목이 존재하는 시나리오를 제공하고 WebDriver가 이를 처리하는 방법을 설명합니다.
이 튜토리얼에서는 Webdriver를 사용하여 링크를 찾고 액세스하는 데 사용할 수 있는 방법을 알아봅니다. 또한 링크에 액세스할 때 직면하게 되는 몇 가지 일반적인 문제에 대해 논의하고 이를 해결하는 방법에 대해 자세히 논의할 것입니다.
링크 텍스트 완성 Selenium – By.linkText()
정확한 링크 텍스트를 사용하여 링크에 액세스하는 것은 By.linkText() 메서드를 통해 수행됩니다.. 그러나 동일한 링크 텍스트를 가진 두 개의 링크가 있는 경우 이 방법은 첫 번째 링크에만 액세스합니다. 아래 HTML 코드를 고려해보세요
아래 WebDriver 코드를 실행하려고 하면 첫 번째 “여기를 클릭하세요” 링크에 액세스하게 됩니다.
암호:
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(); } }
작동 방식은 다음과 같습니다.
결과적으로 자동으로 Google로 이동됩니다.
부분 링크 텍스트 완성 Selenium – By.partialLinkText()
링크 텍스트의 일부를 사용하여 링크에 액세스하려면 By.partialLinkText() 방법. 여러 일치 항목이 있는 부분 링크 텍스트를 지정하면 첫 번째 일치 항목에만 액세스됩니다. 아래 HTML 코드를 고려해보세요.
아래 WebDriver 코드를 실행하면 Google로 이동하게 됩니다.
암호:
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(); } }
동일한 링크 텍스트로 여러 링크를 얻는 방법
그렇다면 위의 문제를 어떻게 해결할 수 있을까요? 동일한 링크 텍스트가 있는 링크가 여러 개 있고 첫 번째 링크가 아닌 다른 링크에 액세스하려는 경우 어떻게 해야 합니까?
이러한 경우 일반적으로 By.xpath(), By.cssSelector() 또는 By.tagName()과 같은 다양한 로케이터가 사용됩니다.
가장 일반적으로 사용되는 것은 By.xpath()입니다. 가장 신뢰할 수 있는 방법이지만 복잡하고 읽기 어려워 보입니다.
링크 텍스트의 대소문자 구분
에 대한 매개변수 By.linkText() 와 By.partialLinkText() 둘 다 대소문자를 구분하므로 대문자 사용이 중요합니다. 예를 들어, Mercury Tours 홈페이지에는 "egis"라는 텍스트가 포함된 두 개의 링크가 있습니다. 하나는 상단 메뉴에 있는 "REGISTER" 링크이고 다른 하나는 페이지 오른쪽 하단에 있는 "Register here" 링크입니다.
두 링크 모두 "egis"라는 문자 시퀀스를 포함하지만, 하나는 "By.partialLinkText()" 메서드가 문자의 대문자 사용에 따라 이 두 링크에 개별적으로 액세스한다는 것입니다. 아래 샘플 코드를 참조하세요.
암호
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(); }
블록 외부 및 내부 링크
최신 HTML5 표준 에서는 태그를 , 또는 같은 블록 수준 태그 내부 및 외부에 배치할 수 있습니다 . "By.linkText()" 및 "By.partialLinkText()" 메서드는 이러한 블록 수준 요소 외부 및 내부에 있는 링크에 액세스할 수 있습니다. 아래 HTML 코드를 고려해보세요.
아래 WebDriver 코드는 By.partialLinkText() 메서드를 사용하여 이 두 링크에 모두 액세스합니다.
암호:
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(); } }
위 출력은 해당 페이지 제목이 올바르게 검색되었기 때문에 두 링크 모두 성공적으로 액세스되었음을 확인합니다.
요약
- 링크는 click() 메서드를 사용하여 액세스됩니다.
- WebElement에 사용할 수 있는 로케이터 외에도 링크에는 링크 텍스트 기반 로케이터도 있습니다.
- By.linkText() – 매개변수로 제공된 링크 텍스트와 정확히 일치하는 링크를 기반으로 링크를 찾습니다.
- By.partialLinkText() – 링크 텍스트의 부분적인 텍스트 일치를 기반으로 링크를 찾습니다.
- 위의 로케이터는 모두 대소문자를 구분합니다.
- 일치하는 항목이 여러 개 있는 경우 By.linkText() 및 By.partialLinkText()는 첫 번째 일치 항목만 선택합니다. 동일한 링크 텍스트를 가진 여러 링크가 존재하는 경우 xpath, CSS를 기반으로 하는 다른 로케이터가 사용됩니다.
- findElements() & By.tagName(“a”) 메소드는 페이지에서 로케이터 기준과 일치하는 모든 요소를 찾습니다.
- 링크는 블록 수준 요소 내부에 있든 외부에 있든 By.linkText() 및 By.partialLinkText()를 통해 액세스할 수 있습니다.