본문으로 건너뛰기
SDETRole
SDETRole

용어집 · UI 자동화

XPath

다른 이름: XPath 표현식, XPath expression, XPath 로케이터, XPath locator

정의

XML이나 HTML 문서에서 노드를 선택하는 쿼리 언어로, UI 자동화에서 구조·속성·텍스트로 요소를 찾는 데 사용합니다.

XPath(XML Path Language)는 문서 트리를 따라 원하는 노드까지 가는 경로를 기술합니다. 테스트 자동화에서는 로케이터를 작성하는 방법 중 하나이며, CSS에 비해 가장 큰 장점은 텍스트 내용으로 매칭할 수 있고 어느 방향으로든, 즉 위로는 부모, 옆으로는 형제, 아래로는 자손까지 이동할 수 있다는 점입니다. 브라우저는 XPath 1.0을 구현하므로 matches()나 lower-case() 같은 이후 버전의 함수는 쓸 수 없습니다.

예시

//button[normalize-space()='Sign in']
//input[@name='email']
//label[text()='Password']/following-sibling::input
//tr[td[normalize-space()='Order 1042']]//button[@aria-label='Cancel']
//a[contains(@href, '/invoices/')]

네 번째 줄은 사람들이 XPath를 찾는 이유를 보여 줍니다. 특정 셀을 포함하는 테이블 행을 찾은 다음, 그 행 안의 버튼을 찾는 것입니다.

WebElement cancel = driver.findElement(
    By.xpath("//tr[td[normalize-space()='Order 1042']]//button[@aria-label='Cancel']"));

절대 경로와 상대 경로

절대 XPath는 루트에서 시작하며(/html/body/div[2]/form/button), 감싸는 요소 하나만 바뀌어도 바로 깨집니다. 상대 XPath는 //로 시작하고 의미 있는 요소를 기준점으로 삼습니다. DevTools에서 “Copy full XPath”로 복사하면 절대 경로가 나오는데, 테스트에서 원하는 형태는 거의 아닙니다.

흔한 실수

  • (//div)[7] 같은 인덱스 기반 경로. 의미가 아니라 레이아웃을 담고 있습니다.
  • 중첩 마크업이 있는 요소에 text()를 쓰는 것. 라벨이 자식 <span> 안에 있으면 //button[text()='Save']는 실패합니다. normalize-space()(또는 .)는 전체 문자열 값을 사용합니다.
  • @class='btn'으로 클래스를 매칭하는 것. 이 방식은 속성 전체가 btn일 때만 매칭됩니다. contains(concat(' ', normalize-space(@class), ' '), ' btn ')를 쓰거나 CSS .btn으로 바꾸십시오.
  • 습관적으로 XPath부터 쓰는 것. Playwright에서는 getByRole과 getByText가 텍스트 기반 사례 대부분을 처리하며 가독성도 더 좋습니다.

SDETRole 전체에서 검색할 내용을 입력하세요.

Pagefind 전문 검색 · 브라우저에서 실행됩니다 검색 페이지 열기 →