웹 테이블을 처리하는 방법 Selenium

⚡ 스마트 요약

Selenium 웹 테이블 처리를 통해 QA 엔지니어는 XPath, CSS 등을 사용하여 HTML 행과 열에서 표 형식 데이터를 읽을 수 있습니다. Selenium 4개의 상대 위치 지정자. 이 문서에서는 정적 테이블, 중첩 테이블, 속성 조건자 및 동적 그리드를 위한 AI 기술에 대해 살펴봅니다.

  • 🧱 XPath 구조: 모든 테이블 로케이터는 //table로 시작하며 술어를 사용하여 tbody, tr, td로 깊이 들어갑니다.
  • 🔁 동적 행: findElements는 WebElements의 목록을 반환하므로 루프를 통해 런타임에 행 수를 세고 셀을 읽을 수 있습니다.
  • 🪄 Selenium 4: 상대적 위치 지정자(위, 아래, 근처)를 사용하면 알려진 기준 요소 주변의 셀을 쉽게 타겟팅할 수 있습니다.
  • 🧠 AI 위치 추적기: 자체 복구 도구는 열 이동을 감지하고 수동 XPath 편집 없이 행 ID를 복구합니다.
  • 🛠️ 바로가기 검사: 브라우저 개발자 도구는 전체 XPath를 복사하는데, 안정성을 위해 첫 번째 표만 남도록 줄일 수 있습니다.

Selenium 웹 테이블 XPath 예제

웹 테이블이란? Selenium?

A 웹 테이블 in Selenium 웹 테이블은 데이터나 정보를 표 형식으로 표현하는 데 사용되는 웹 요소입니다. 표시되는 데이터는 정적이거나 동적일 수 있습니다. 웹 테이블의 셀과 행은 웹 요소 메서드와 로케이터를 조합하여 접근할 수 있습니다. 대표적인 예로는 전자상거래 상품 페이지에 표시되는 상품 사양 표가 있습니다.

HTML 웹 테이블 읽기

테스터는 HTML 테이블 내부에 있는 요소, 특히 텍스트 값에 접근해야 하는 경우가 많습니다. 하지만 웹 디자이너는 개별 셀에 id나 name 속성을 제공하는 경우가 드물기 때문에, `By.id()`, `By.name()`, `By.cssSelector()`와 같은 메서드는 제대로 작동하지 않는 경우가 많습니다. 이러한 상황에서 가장 신뢰할 수 있는 방법은 `By.xpath()`를 사용하는 것입니다. `By.xpath()`는 테이블 태그 내부의 부모-자식 관계를 탐색하기 때문입니다.

웹 테이블을 처리하는 방법 Selenium

웹 테이블을 처리하려면 아래 HTML 코드를 고려하세요. Selenium.

테이블에 대한 XPath를 작성하는 방법 Selenium

우리는 xpath "네 번째 셀"이라는 텍스트가 포함된 셀의 내부 텍스트를 가져옵니다.

테이블에 대한 XPath를 작성하는 방법 Selenium

1단계 – 상위 요소 설정(표)

WebDriver의 XPath 로케이터는 항상 이중 슬래시 "//"로 시작하고 그 뒤에 부모 요소가 옵니다.. 우리는 웹 테이블을 다루고 있기 때문에 Selenium, 상위 요소는 항상 꼬리표. 우리의 첫 번째 부분 Selenium 따라서 XPath 테이블 로케이터는 "//table"로 시작해야 합니다.

Selenium 웹 테이블 예

2단계 - 하위 요소 추가

바로 아래에 있는 요소 ~이다 , 그래서 는 ~의 자녀이다 반대로, 는 의 부모입니다. XPath에서 모든 자식 요소는 아래와 같이 슬래시(/) 하나로 구분되어 부모 요소의 오른쪽에 배치됩니다.

Selenium 웹 테이블 예

3단계 - 조건자 추가

그만큼 요소에는 두 개가 포함되어 있습니다. 태그. 이 두 개 태그는 하위 항목입니다. , 그래서 둘 다의 부모입니다. 요소들은 형제자매 관계입니다. 형제자매는 같은 부모를 공유하는 자식 요소입니다..

도달하려면 "네 번째 셀"을 포함하는 해당 셀에 접근하려면 먼저 다음 항목에 접근해야 합니다. 첫 번째가 아닙니다. "//table/tbody/tr"만 작성하면 첫 번째 항목을 대상으로 합니다. 꼬리표.

그렇다면 두 번째에 어떻게 접근할 수 있을까요? 답은 사용하는 것입니다. 술어. 술어는 대괄호 "[ ]"로 묶인 숫자 또는 HTML 속성으로, 자식 요소를 형제 요소와 구분하는 역할을 합니다.우리가 필요한 행은 두 번째 행이므로 술어로 "[2]"를 사용합니다.

 Selenium 웹 테이블 예

조건자를 생략하면 XPath는 첫 번째 형제 요소를 반환합니다. 따라서 아래의 XPath 코드 중 어느 것을 사용하더라도 첫 번째 요소에 도달하게 됩니다. .

Selenium Xpath를 사용하는 웹 테이블

4단계 - 적절한 조건자를 사용하여 후속 하위 요소 추가

다음으로 필요한 요소는 두 번째입니다. 2단계와 3단계의 규칙을 적용하면 아래와 같은 XPath를 얻습니다.

웹 테이블 Selenium Xpath 사용

이제 올바른 XPath 로케이터를 얻었으므로 아래 코드를 사용하여 셀에 접근하고 내부 텍스트를 읽을 수 있습니다. 이 코드는 HTML 페이지를 C 드라이브에 "newhtml.html"이라는 이름으로 저장했다고 가정합니다.

웹 테이블 Selenium Xpath 사용

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/write-xpath-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

웹 테이블 Selenium Xpath 사용

중첩 테이블에 액세스

중첩 테이블에도 동일한 원칙이 적용됩니다. 중첩 테이블은 다른 테이블 안에 테이블이 있는 형태입니다.. 아래에 예가 나와 있습니다.

중첩된 테이블에 액세스하는 방법 Selenium

이전 섹션에서 설명한 부모/자식 및 조건자 개념을 사용하여 "4-5-6" 텍스트가 있는 셀에 접근하려면 아래와 같은 XPath를 작성할 수 있습니다.

중첩된 테이블에 액세스하는 방법 Selenium

아래 WebDriver 코드는 대상 셀의 내부 텍스트를 가져옵니다.

중첩된 테이블에 액세스 Selenium

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/accessing-nested-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

아래 출력은 내부 테이블에 성공적으로 액세스되었음을 확인합니다.

중첩된 테이블에 액세스 Selenium

속성을 조건자로 사용

만약 해당 요소가 HTML 깊숙한 곳에 위치하여 형제 요소를 세는 것이 어렵다면, 그 대신 해당 요소의 고유 속성을 사용할 수 있습니다.

아래 예시에서 "뉴욕에서 시카고까지" 셀은 깊숙이 숨겨져 있습니다. Mercury 투어 홈페이지.

Selenium 속성을 조건자로 사용하는 웹 테이블 예

Selenium 속성을 조건자로 사용하는 웹 테이블 예

테이블의 고유 속성(width="270")을 조건자로 사용할 수 있습니다. 속성은 앞에 @ 기호를 붙여서 조건자로 사용됩니다.위 예시에서 "뉴욕에서 시카고까지" 셀은 첫 번째 셀에 위치해 있습니다. 네 번째의 그러므로 우리의 XPath는 아래와 같아야 합니다.

Selenium 속성을 조건자로 사용하는 웹 테이블 예

XPath를 안에 넣을 때는 이 점을 기억하세요. Java"270"을 둘러싼 큰따옴표를 백슬래시로 이스케이프 처리하여 By.xpath() 문자열이 조기에 종료되지 않도록 합니다.

Selenium 속성을 조건자로 사용하는 웹 테이블 예

이제 아래 코드를 사용하여 해당 셀에 액세스할 준비가 되었습니다.

Selenium 속성을 조건자로 사용하는 웹 테이블 예

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table[@width=\"270\"]/tbody/tr[4]/td"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Selenium 속성을 조건자로 사용하는 웹 테이블 예

바로 가기: Inspect 요소를 사용하여 테이블에 액세스 Selenium

요소의 인덱스나 속성을 얻기 어려운 경우, XPath를 생성하는 가장 빠른 방법은 최신 브라우저 개발자 도구의 요소 검사를 사용하는 것입니다.

아래 예시를 살펴보세요. Mercury 투어 홈페이지.

Selenium 속성을 조건자로 사용하는 웹 테이블 예

1단계

대상 셀을 마우스 오른쪽 버튼으로 클릭하고 '검사'를 선택하여 DOM 경로를 확인한 다음 전체 XPath를 복사합니다.

Selenium 속성을 조건자로 사용하는 웹 테이블 예

2단계

첫 번째 "테이블" 상위 요소를 찾아 그 왼쪽에 있는 모든 항목을 삭제합니다.

Selenium 속성을 조건자로 사용하는 웹 테이블 예

3단계

나머지 XPath 앞에 이중 슬래시(//)를 붙이고 웹드라이버 코드에 복사하여 붙여넣으세요.

Selenium 속성이 포함된 웹 테이블 예

아래 WebDriver 코드는 깊게 중첩된 요소의 내부 텍스트를 가져옵니다.

Selenium 속성이 포함된 웹 테이블 예

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table/tbody/tr/td[2]"
        + "//table/tbody/tr[4]/td/"
        + "table/tbody/tr/td[2]/"
        + "table/tbody/tr[2]/td[1]/"
        + "table[2]/tbody/tr[3]/td[2]/font"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

동적 웹 테이블에서 행과 열의 개수를 세는 방법

대시보드나 검색 결과와 같은 동적 웹 테이블은 로드할 때마다 다른 수의 행을 표시합니다. 이를 처리하려면 다음을 사용하십시오. findElements 모든 것을 가져오기 위해 리스트로 변환한 다음, 반복문을 통해 각 셀을 읽습니다. 아래 코드 조각은 ID가 "customers"인 테이블의 행 수를 세고 모든 셀을 읽습니다.

List<WebElement> rows = driver.findElements(
    By.xpath("//table[@id='customers']//tr"));
System.out.println("Total rows: " + rows.size());

for (int i = 1; i <= rows.size(); i++) {
    List<WebElement> cells = driver.findElements(
        By.xpath("//table[@id='customers']//tr[" + i + "]/td"));
    for (WebElement cell : cells) {
        System.out.println(cell.getText());
    }
}

위치 추적기를 감싸십시오 WebDriverWaitvisibilityOfAllElementsLocatedBy 테이블이 AJAX로 로드될 때 발생합니다. 이는 렌더링 속도가 느린 그리드에서 오래된 요소 참조가 발생하는 것을 방지합니다.

Selenium 웹 테이블을 위한 4가지 상대 위치 지정자

Selenium 4번째 버전에서는 시각적 위치를 기준으로 요소를 대상으로 하는 상대 로케이터가 도입되었습니다. 이는 행 순서가 변경되어 XPath 인덱스가 제대로 작동하지 않을 때 유용합니다. 해당 메서드는 다음과 같습니다. above(), below(), toLeftOf(), toRightOf()예산 및 near() 모두 앵커 웹 요소를 허용합니다.

import static org.openqa.selenium.support.locators.RelativeLocator.with;

WebElement emailHeader = driver.findElement(By.xpath("//th[text()='Email']"));
WebElement emailCell = driver.findElement(
    with(By.tagName("td")).below(emailHeader));
System.out.println(emailCell.getText());

상대 위치 지정자는 열 순서가 바뀌어도 가독성을 유지합니다. 데이터 기반 페이지에서 최상의 결과를 얻으려면 상대 위치 지정자와 명시적 대기 함수를 함께 사용하세요.

동적 웹 테이블 처리를 위한 AI 도구

AI 기반 테스트 플랫폼은 자주 변경되는 그리드에서 위치 추적기 유지 관리를 줄여줍니다. 다음과 같은 도구들이 있습니다. Testim, 마블예산 및 기능화 컴퓨터 비전과 DOM 모델을 사용하여 열 이동 및 자체 복구 로케이터를 감지합니다. 고정된 XPath 인덱스 대신 헤더 텍스트와 셀 유사성을 기반으로 행을 식별합니다.

순수한 Selenium 프로젝트, 라이브러리 등 힐레니움 WebDriver를 래핑하고 런타임에 손상된 로케이터를 다시 작성합니다. 이러한 도구를 WebDriverWait와 함께 사용하면 UI 변경 후 매번 선택기를 다시 작성하지 않고도 동적 테이블 스크립트를 안정적으로 유지할 수 있습니다.

제품 개요

  • By.xpath()는 웹 테이블의 셀에 접근하는 가장 확실한 방법입니다. Selenium.
  • 형제 요소를 세기 어려운 경우, @ 기호를 앞에 붙여 고유 속성을 조건자로 사용하세요.
  • findElements는 List를 반환합니다. 동적 테이블에서 행 개수 계산을 지원합니다.
  • Selenium 4개의 상대 위치 지정자(위, 아래, 근처)는 위치 기반 XPath에 대한 의존성을 줄입니다.
  • 개발자 도구의 요소 검사 기능을 사용하면 깊숙이 숨겨진 셀에 대한 XPath 생성 속도가 향상됩니다.
  • AI 도구 등 TestimMabl 및 Healenium은 그리드 변경을 위한 자체 복구 위치 찾기 도구입니다.

자주 묻는 질문

웹 테이블 Selenium `Table`은 행과 열로 표 형식의 데이터를 표시하는 웹 요소입니다. 정적일 수도 있고 동적일 수도 있습니다. 테이블은 개별 셀에 고유 ID를 노출하는 경우가 드물기 때문에 테스터는 XPath 또는 CSS 로케이터를 조합하여 `Table`의 셀에 접근합니다.

대부분의 테이블 셀에는 id 또는 name 속성이 없으므로 By.id() 및 By.name()은 작동하지 않습니다. XPath는 table, tbody, tr 및 td 요소의 부모-자식 구조를 탐색하므로 셀을 찾는 가장 신뢰할 수 있는 방법입니다.

행 수를 세려면 driver.findElements(By.xpath(“//table[@id='tbl']//tr”)).size()를 사용하고, 열 수를 세려면 //table[@id='tbl']//tr[1]/td를 사용하세요. findElements 메서드는 List를 반환합니다. 빠른 행 합계 계산을 위해 size() 함수를 지원합니다.

Selenium 버전 4에서는 above(), below(), toLeftOf(), toRightOf(), near()와 같은 상대 위치 지정자가 도입되었습니다. 이러한 지정자는 알려진 기준 셀 주변에 위치한 셀을 대상으로 지정하는 데 유용하며, 동적 테이블에서 XPath 인덱스가 변경될 때 특히 유용합니다.

findElements를 사용하여 행을 순회한 다음 getText()를 사용하여 각 셀의 텍스트를 읽습니다. //tr[“+i+”]/td[“+j+”]와 같이 문자열 연결을 사용하여 XPath를 동적으로 생성합니다. 값을 읽기 전에 WebDriverWait를 사용하여 테이블이 로드될 때까지 기다립니다.

네. AI 기반 도구는 다음과 같습니다. TestimMabl과 Functionize는 컴퓨터 비전과 DOM 모델을 사용하여 테이블 경계를 감지하고, 헤더를 추론하며, 열 위치가 변경될 때 로케이터를 자동으로 복구합니다. 이를 통해 동적 대시보드의 XPath 유지 관리 작업을 줄일 수 있습니다.

AI 모델은 이전 실행에서 얻은 행 패턴을 학습하고 고정된 인덱스 대신 텍스트 유사성을 사용하여 셀을 일치시킵니다. 행의 위치가 바뀌거나 열의 순서가 변경되더라도 AI 로케이터는 XPath를 다시 작성하지 않고도 대상을 찾아냅니다.

findElement는 단일 WebElement를 반환하며, WebElement가 없는 경우 NoSuchElementException 예외를 발생시킵니다. findElements는 List를 반환합니다. 일치하는 항목이 없으면 빈 목록을 반환합니다. 요소를 찾을 때는 findElements를 사용하세요.ping 테이블 행이나 열에 걸쳐.

이 게시물을 요약하면 다음과 같습니다.