Znajdź element za pomocą XPath w Selenium

⚡ Inteligentne podsumowanie

Znajdź element za pomocą XPath w Selenium jednoznacznie identyfikuje pojedynczy element internetowy na stronie, podczas gdy FindElements zwraca pełną listę pasujących elementów. Oba polecenia akceptują obiekt lokalizatora „By” obejmujący strategie ID, Name, Class Name i XPath.

  • Zasada główna: FindElement zwraca pierwszy pasujący WebElement; FindElements zwraca listę indeksowaną od zera, jak tablicę.
  • ⚠️ Obsługa wyjątków: FindElement zgłasza wyjątek NoSuchElementException, gdy nie istnieje żadne dopasowanie, natomiast FindElements zwraca pustą listę zamiast zakończyć się niepowodzeniem.
  • 🧭 Strategie lokalizacyjne: Wybierz spośród ID, nazwy, nazwy klasy, nazwy tagu, tekstu łącza, częściowego tekstu łącza i XPath.
  • 🧩 Cel wdrożenia: Niezawodne przekazywanie obiektu By z unikalną wartością lokalizatora do elementów docelowych w skryptach WebDriver.
  • 🚀 Praktyczne zastosowanie: Pracujący Java przykłady pokazują kliknięcie przycisku radiowego i iterację listy elementów na stronie demonstracyjnej.

Znajdź element za pomocą XPath w Selenium

In Selenium Sterownik sieciowy, Znajdź element oraz Znajdź elementy są podstawowymi poleceniami używanymi do lokalizowania elementów internetowych na stronie przed wykonaniem na nich jakiejkolwiek akcji, np. kliknięciem lub wprowadzeniem tekstu.

Dlaczego potrzebujesz polecenia Znajdź element(y)?

Interakcja ze stroną internetową wymaga od użytkownika wcześniejszego zlokalizowania elementu internetowego. Polecenie Znajdź element służy do jednoznacznej identyfikacji jednego elementu internetowego na stronie internetowej, natomiast polecenie Znajdź elementy służy do identyfikacji listy elementów internetowych. Element można zidentyfikować za pomocą wielu strategie lokalizacyjne takie jak ID, nazwa, nazwa klasy, tekst łącza, częściowy tekst łącza, nazwa tagu i XPath.

Składnia polecenia FindElement

Poniżej znajduje się składnia polecenia FindElement w Selenium Sterownik sieciowy:

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

Polecenie FindElement przyjmuje obiekt By jako parametr i zwraca pojedynczy obiekt typu WebElement. Obiekt By z kolei może być używany z różnymi strategiami lokalizacyjnymi, takimi jak ID, Nazwa, Nazwa klasy, XPath itp.

Strategia lokalizatora może przyjmować dowolną z następujących wartości:

  • ID
  • Imię i nazwisko
  • Nazwa klasy
  • Nazwa znacznika
  • link Text
  • Częściowy tekst linku
  • XPath

Wartość lokalizatora to unikalna wartość, za pomocą której można zidentyfikować element sieciowy. Obowiązkiem programistów i testerów jest upewnienie się, że elementy sieciowe są jednoznacznie identyfikowalne za pomocą określonych właściwości, takich jak identyfikator lub nazwa.

Przykład:

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

Przykład: Znajdź element w Selenium

Poniższa aplikacja demonstracyjna pokazuje działanie polecenia FindElement:

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

Scenariusz:

Krok 1: Otwórz AUT

Krok 2: Znajdź i kliknij przycisk opcji, a następnie kliknij przycisk Sprawdź

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();

}

}

Składnia polecenia FindElements

Jeśli potrzebujesz wszystkich elementów pasujących do lokalizatora, a nie tylko pierwszego, użyj funkcji FindElements. Poniżej znajduje się jej składnia:

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

Polecenie FindElements przyjmuje obiekt By jako parametr i zwraca listę elementów sieciowych. Zwraca pustą listę, jeśli nie znaleziono żadnych elementów przy użyciu podanej strategii i wartości lokalizatora.

Przykład:

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

Przykład: Znajdź elementy w Selenium

Ta sama aplikacja demonstracyjna służy do pokazania, w jaki sposób FindElements iteruje listę pasujących elementów.

Scenariusz:

Krok 1: Otwórz URL dla aplikacji testowanej

Krok 2: Znajdź tekst przycisków radiowych i wydrukuj go na konsoli wyjściowej

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"));
    }
  }
}

Znajdź element vs Znajdź elementy

Poniżej przedstawiono najważniejsze różnice między poleceniami Znajdź element i Znajdź elementy:

Znajdź element vs Znajdź elementy w Selenium

Znajdź element Znajdź elementy
Zwraca pierwszy element sieciowy, jeśli znaleziono wiele elementów sieciowych z tym samym lokalizatorem Zwraca listę elementów internetowych
Zgłasza wyjątek NoSuchElementException, jeśli nie ma elementów pasujących do strategii lokalizatora Zwraca pustą listę, jeśli nie ma elementów internetowych pasujących do strategii lokalizatora
Funkcja Znajdź element za pomocą XPath znajdzie tylko jeden element sieciowy Znajdzie zbiór elementów pasujących do strategii lokalizatora
Nie dotyczy Każdy element sieci jest indeksowany numerem zaczynającym się od 0, tak jak tablica

FAQ

Zastosowanie Selenium oczekiwania niejawne lub jawne Sterownik odpytuje więc stronę, aż element się pojawi. Jawne oczekiwanie z WebDriverWait i oczekiwane warunki to najpewniejsze podejście w przypadku dynamicznych stron obsługiwanych przez AJAX.

Identyfikator jest najszybszym i najpewniejszym lokalizatorem, ponieważ przeglądarki indeksują go bezpośrednio. Selektory CSS są zazwyczaj szybsze niż XPath, dlatego należy zarezerwować XPath na wypadek braku unikalnego identyfikatora, nazwy lub klasy.

Tak. Asystenci testujący wspomagani sztuczną inteligencją mogą analizować DOM i automatycznie sugerować stabilne lokalizatory XPath lub CSS, skracając czas ręcznej inspekcji. Revwygenerował lokalizatory pod kątem unikatowości przed dodaniem ich do produkcyjnych zestawów testów.

Platformy samonaprawiające wykorzystują sztuczną inteligencję do wykrywania awarii lokalizatora po zmianie interfejsu użytkownika i automatycznego zastępowania go najbliższym pasującym elementem. Zmniejsza to konieczność konserwacji testów spowodowaną częstymi zmianami atrybutów elementów.

Podsumuj ten post następująco: