XPath에는 Selenium WebDriver의 형제, 조상 함수가 포함되어 있습니다.
간단한 XPath 가 테스트 스크립트를위한 복잡한 웹 요소를 찾을 수 없다면 XPath 1.0 라이브러리의 함수를 사용해야합니다. 이러한 함수를 조합하여 더 구체적인 XPath를 만들 수 있습니다. 그런 3 가지 기능에 대해 논의 해 보겠습니다.
- 내용
- 형제
- 선조
자세히 연구 해 봅시다.
포함 : XPath에서 'contains'함수를 사용하여 특정 텍스트 값과 일치하는 모든 요소를 추출 할 수 있습니다.
전의. 여기서 우리는 앵커를 찾고 있습니다. 텍스트는 'SAP M'으로 포함됩니다.
"// h4 / a [contains (text (), 'SAP M')]"
Sibling : 형제 키워드를 사용하여 다른 요소와 관련된 웹 요소를 가져올 수 있습니다.
예 : 'a'의 형제 요소를 기준으로 'h4'를 찾습니다.
"//div[@class='canvas- graph']//a[@href='/accounting.html'][i[@class='icon-usd']]/following-sibling::h4"
Ancestor : 부모 요소를 기반으로 요소를 찾으려면 XPath의 ancestor 특성을 사용할 수 있습니다.
예제를 사용하여이 3 가지 기능을 이해할 수 있습니다.
테스트 단계
참고 : 튜토리얼 제작 날짜 이후 Guru99 홈페이지가 업데이트되어 테스트를 실행하기 위해 데모 사이트를 사용하십시오.
- http://demo.guru99.com/test/guru99home/으로 이동 하십시오.
- '가장 인기있는 코스'섹션에서 텍스트가 'SELENIUM'인 WebElement의 형제 인 모든 웹 요소를 검색합니다.
- 우리는 contains, ancestor 및 형제 함수를 사용하여 요소를 찾습니다.
USING 포함 및 형제
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
public class SiblingAndParentInXpath {
@Test
public void testSiblingAndParentInXpath(){
WebDriver driver;
String driverPath = "C:\\geckodriver.exe";
System.setProperty("webdriver.firefox.marionette", driverPath);
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://demo.guru99.com/test/guru99home/");
// 'SELENIUM'컨트롤의 형제 인 'Popular course'내의 검색 요소. 먼저 'h2'라는 텍스트가 '가장 인기있는 코스'중 몇 가지를 찾은 다음 부모 요소 인 ' div '라고 입력하면이 div에서 텍스트가'SELENIUM '인 링크를 찾은 다음 마침내이 링크의 모든 형제 요소 ('SELENIUM ')를 찾습니다.
List <WebElement> dateBox = driver.findElements(By.xpath("//h2[contains(text(),'A few of our most popular courses')]/parent::div//div[//a[text()='SELENIUM']]/following-sibling::div[@class='rt-grid-2 rt-omega']"));
// '인기 코스'에서 'SELENIUM'으로 명명 된 요소의 형제 인 모두를 인쇄하십시오.
for (WebElement webElement : dateBox) {
System.out.println(webElement.getText());
}
driver.close();
}
}
출력은 다음과 같습니다.
조상 함수(Ancestor function) 사용하기
우리는 '조상'이라는 함수를 사용하여 동일한 기능을 수행 할 수 있습니다.
이제 'SELENIUM'이라는 앵커의 조상의 도움으로 '인기 코스'섹션의 모든 요소를 검색해야한다고 가정합니다.
여기에 우리의 xpath 쿼리는 다음과 같습니다.
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / following-sibling :: div"
완전한 코드
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
public class AncestorInXpath{
@Test
public void testAncestorInXpath(){
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://demo.guru99.com/test/guru99home/");
// '인기 코스'섹션의 모든 요소 검색
// 텍스트가 'SELENIUM'인 앵커의 조상의 도움으로
List <WebElement> dateBox = driver.findElements(By.xpath("//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div"));
// '인기 코스'에서 'SELENIUM'으로 명명 된 요소의 형제 인 모두를 인쇄하십시오.
for (WebElement webElement : dateBox) {
System.out.println(webElement.getText());
}
driver.quit();
}
}
출력은 다음과 같이 보입니다.
개요:
- 일반 xpath를 사용하여 요소를 찾을 수없는 경우가 있습니다. 이러한 상황에서 우리는 xpath 질의와 다른 함수가 필요하다.
- contains, parent, ancestors, following-sibling 등과 같은 몇 가지 중요한 xpath 함수가 있습니다.
- 이러한 함수의 도움으로 복잡한 xpath 표현식을 만들 수 있습니다.
'자동화테스트 > Selenium' 카테고리의 다른 글
TestNG : Selenium에서 XML 및 DataProvider를 사용하여 매개 변수화 (0) | 2018.12.04 |
---|---|
(selenium) 암시 적 대기 및 명시적인 셀레니움 대기 (0) | 2018.12.03 |
Selenium WebDriver의 Alert(경고창) & Popup Window(팝업창) Handling(다루기) (1) | 2018.11.30 |
명령 프롬프트에서 TestNG 프로젝트 및 실패한 테스트 케이스를 실행하는 방법 (0) | 2018.11.28 |
Selenium WebDriver 용 Eclipse에 TestNG를 설치하는 방법 (0) | 2018.11.26 |