Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

XPath로 n번째 하위 요소를 찾는 방법 – 인덱스와 position() 함수 활용법

Selenium 자동화 테스트에서 XPath를 사용하면 특정 위치에 있는 n번째 하위 요소를 정확하게 식별할 수 있습니다. 대표적인 방법은 다음 두 가지입니다.

  • 대괄호([ ]) 안에 인덱스를 추가하는 방식
  • position() 메서드를 활용하는 방식

방법 1: position() 메서드 사용

XPath의 position() 함수를 사용하면 조건을 만족하는 요소 중에서 원하는 순번의 요소를 선택할 수 있습니다. 아래 예제는 페이지에서 type 속성이 'text'인 첫 번째 input 요소를 찾아 클릭하는 코드입니다.

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class SubElement {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        String url = "https://www.tutorialspoint.com/index.htm";
        driver.get(url);
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        // position()을 사용하여 type이 text인 첫 번째 요소 지정
        driver.findElement(By.xpath("//input[@type='text'][position()=1]"))
        .click();

        driver.close();
    }
}

방법 2: 대괄호에 인덱스 추가

XPath 경로 끝에 [n] 형태로 인덱스를 붙이면 해당 위치의 요소를 직접 지정할 수 있습니다. 아래 예제는 테이블의 2행(tr[2])에 있는 모든 td 셀 데이터를 가져와 개수를 출력하는 코드입니다.

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
import java.util.List;

public class RowCount {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        String url = "https://www.tutorialspoint.com/plsql/plsql_basic_syntax.htm";
        driver.get(url);
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        // 인덱스를 붙여 테이블 2행의 데이터 추출
        List<WebElement> rows =
        driver.findElements(By.xpath("//table/tbody/tr[2]/td"));

        System.out.println("2행의 데이터 개수는: " + rows.size());

        driver.close();
    }
}

정리

두 방식 모두 동일한 결과를 얻을 수 있지만, 상황에 따라 적합한 방법이 다릅니다.

  • 인덱스 방식: 구조가 단순하고 위치가 고정된 경우 간결하게 사용할 수 있습니다.
  • position() 방식: 조건과 함께 조합하거나 last(), first() 등의 표현식과 함께 사용하면 더 유연한 로케이터 작성이 가능합니다.

참고로 XPath 인덱스는 프로그래밍 언어와 달리 1부터 시작한다는 점도 함께 기억해 두면 좋습니다.