XPath에서 FindElement를 사용하여 Selenium

⚡ 스마트 요약

XPath에서 FindElement를 사용하여 Selenium `By` 명령은 페이지에서 단일 웹 요소를 고유하게 식별하는 반면, `FindElements` 명령은 일치하는 요소의 전체 목록을 반환합니다. 두 명령 모두 ID, 이름, 클래스 이름 및 XPath 전략을 포함하는 `By` 로케이터 객체를 허용합니다.

  • 핵심 원칙: FindElement는 일치하는 첫 번째 WebElement를 반환합니다. FindElements는 배열처럼 0부터 시작하는 인덱싱 목록을 반환합니다.
  • ⚠️ 예외 처리: FindElement는 일치하는 요소가 없을 때 NoSuchElementException 예외를 발생시키는 반면, FindElements는 실패하는 대신 빈 목록을 반환합니다.
  • 🧭 위치 파악 전략: ID, 이름, 클래스 이름, 태그 이름, 링크 텍스트, 부분 링크 텍스트 및 XPath 중에서 선택하십시오.
  • 🧩 구현 초점: WebDriver 스크립트에서 대상 요소를 안정적으로 지정하려면 고유한 로케이터 값을 가진 By 객체를 전달하세요.
  • 🚀 적용하기: 일 Java 이 예제들은 데모 페이지에서 라디오 버튼을 클릭하고 요소 목록을 순회하는 방법을 보여줍니다.

XPath에서 FindElement를 사용하여 Selenium

In Selenium 웹드라이버, 요소 찾기 FindElements 웹 요소에서 클릭이나 텍스트 입력과 같은 작업을 수행하기 전에 웹 요소의 위치를 ​​찾는 데 사용되는 핵심 명령어입니다.

요소 찾기 명령이 필요한 이유는 무엇입니까?

웹 페이지와 상호 작용하려면 사용자는 먼저 웹 요소를 찾아야 합니다. '요소 찾기' 명령은 웹 페이지 내에서 하나의 웹 요소를 고유하게 식별하는 데 사용되는 반면, '요소 찾기' 명령은 웹 요소 목록을 식별하는 데 사용됩니다. 요소는 여러 가지 방법을 사용하여 식별할 수 있습니다. 위치 추적 전략 ID, 이름, 클래스 이름, 링크 텍스트, 부분 링크 텍스트, 태그 이름 등과 같은 정보 xpath.

FindElement 명령 구문

아래는 FindElement 명령의 구문입니다. Selenium 웹드라이버:

WebElement elementName = driver.findElement(By.LocatorStrategy("LocatorValue"));

FindElement 명령은 By 객체를 매개변수로 받아 WebElement 형식의 단일 객체를 반환합니다. By 객체는 ID, 이름, 클래스 이름, XPath 등과 같은 다양한 로케이터 전략과 함께 사용할 수 있습니다.

로케이터 전략은 다음 값 중 하나일 수 있습니다.

  • ID
  • 이름
  • 클래스 이름
  • 태그 이름
  • 링크 텍스트
  • 부분 링크 텍스트
  • xpath

로케이터 값은 웹 요소를 식별하는 데 사용되는 고유 값입니다. 개발자와 테스터는 ID 또는 이름과 같은 특정 속성을 사용하여 웹 요소를 고유하게 식별할 수 있도록 해야 합니다.

예:

WebElement loginLink = driver.findElement(By.linkText("Login"));

예: 다음에서 요소 찾기 Selenium

다음 데모 애플리케이션은 FindElement 명령의 작동 방식을 보여주기 위해 사용됩니다.

https://demo.guru99.com/test/ajax.html

시나리오 :

1 단계 : AUT 열기

2 단계 : 라디오 버튼을 찾아서 클릭한 다음, 확인 버튼을 클릭하세요.

package com.sample.stepdefinitions;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class NameDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub

System.setProperty("webdriver.chrome.driver", "D:\\3rdparty\\chrome\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();

driver.get("https://demo.guru99.com/test/ajax.html");

// Find the radio button for “No” using its ID and click on it
driver.findElement(By.id("no")).click();

//Click on Check Button
driver.findElement(By.id("buttoncheck")).click();

}

}

FindElements 명령 구문

특정 로케이터와 일치하는 모든 요소를 ​​찾아야 할 때는 첫 번째 요소만 찾는 것이 아니라 FindElements를 사용합니다. 구문은 다음과 같습니다.

List<WebElement> elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));

FindElements 명령은 By 객체를 매개변수로 받아 웹 요소 목록을 반환합니다. 지정된 로케이터 전략과 로케이터 값을 사용하여 요소를 찾지 못한 경우 빈 목록을 반환합니다.

예:

List<WebElement> listOfElements = driver.findElements(By.xpath("//div"));

예: 요소 찾기 Selenium

FindElements 함수가 일치하는 요소 목록을 순회하는 방식을 보여주기 위해 동일한 데모 애플리케이션이 사용됩니다.

시나리오 :

1 단계 : 열기 URL 테스트 대상 애플리케이션

2 단계 : 라디오 버튼의 텍스트를 찾아서 출력 콘솔에 출력하세요.

package com.sample.stepdefinitions;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class NameDemo {

public static void main(String[] args) {

    System.setProperty("webdriver.chrome.driver", "X://chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("https://demo.guru99.com/test/ajax.html");
    List<WebElement> elements = driver.findElements(By.name("name"));
    System.out.println("Number of elements:" +elements.size());

    for (int i=0; i<elements.size();i++){
      System.out.println("Radio button text:" + elements.get(i).getAttribute("value"));
    }
  }
}

요소 찾기 vs 요소 찾기

아래는 '요소 찾기' 명령과 '요소 찾기' 명령의 주요 차이점입니다.

요소 찾기 vs 요소 찾기 Selenium

요소 찾기 요소 찾기
동일한 로케이터를 가진 웹 요소가 여러 개 발견된 경우, 첫 번째 웹 요소를 반환합니다. 웹 요소 목록을 반환합니다.
지정된 로케이터 전략과 일치하는 요소가 없는 경우 NoSuchElementException 예외를 발생시킵니다. 로케이터 전략과 일치하는 웹 요소가 없는 경우 빈 목록을 반환합니다.
XPath를 이용한 요소 찾기는 웹 요소를 하나만 찾습니다. 해당 기능은 위치 지정 전략과 일치하는 요소들의 모음을 찾습니다.
해당 사항 없음 각 웹 요소는 배열처럼 0부터 시작하는 숫자로 인덱싱됩니다.

자주 묻는 질문

Selenium 암묵적 또는 명시적 대기 따라서 드라이버는 요소가 나타날 때까지 페이지를 폴링합니다. WebDriverWait를 사용한 명시적 대기와 예상 조건은 동적 AJAX 기반 페이지의 경우 가장 안정적인 접근 방식입니다.

ID는 브라우저가 직접 인덱싱하기 때문에 가장 빠르고 안정적인 선택자입니다. CSS 선택자는 일반적으로 XPath보다 빠르므로, 고유한 ID, 이름 또는 클래스를 사용할 수 없는 경우에만 XPath를 사용하십시오.

네. AI 기반 테스트 도우미는 DOM을 분석하여 안정적인 XPath 또는 CSS 로케이터를 자동으로 제안함으로써 수동 검사 시간을 줄여줍니다. Rev생성된 로케이터를 프로덕션 테스트 스위트에 추가하기 전에 고유성을 확인하기 위해 검토했습니다.

자가 복구 프레임워크는 AI를 사용하여 UI 변경 후 로케이터가 깨지는 시점을 감지하고 가장 유사한 요소로 자동 대체합니다. 이를 통해 요소 속성이 자주 변경됨에 따라 발생하는 테스트 유지 관리 작업을 줄일 수 있습니다.

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