Jak obsługiwać tabelę internetową w Selenium

⚡ Inteligentne podsumowanie

Selenium Obsługa tabel internetowych umożliwia inżynierom ds. zapewnienia jakości odczytywanie danych tabelarycznych z wierszy i kolumn HTML przy użyciu XPath, CSS i Selenium 4 lokalizatory względne. W tym artykule omówiono tabele statyczne, tabele zagnieżdżone, predykaty atrybutów i techniki sztucznej inteligencji dla siatek dynamicznych.

  • 🧱 Anatomia XPath: Każdy lokalizator tabeli zaczyna się od //table i przechodzi do tbody, tr i td przy użyciu predykatów.
  • 🔁 Dynamiczne wiersze: findElements zwraca listę elementów WebElements, dzięki czemu pętle mogą zliczać wiersze i odczytywać komórki w czasie wykonywania.
  • 🪄 Selenium 4: Lokalizatory względne powyżej, poniżej i w pobliżu upraszczają namierzanie komórek wokół znanego elementu zakotwiczającego.
  • ???? Lokalizatory AI: Narzędzia samonaprawiające wykrywają przesunięcia kolumn i odzyskują tożsamość wierszy bez konieczności ręcznej edycji XPath.
  • 🛠️. Sprawdź skrót: Narzędzia programistyczne przeglądarki kopiują cały plik XPath, który można przyciąć do pierwszej tabeli, aby zapewnić niezawodność.

Selenium Przykład XPath tabeli internetowej

W czym jest tabela internetowa Selenium?

A Tabela internetowa in Selenium to element WebElement służący do tabelarycznej reprezentacji danych lub informacji. Wyświetlane dane mogą być statyczne lub dynamiczne. Dostęp do komórek i wierszy tabeli WebElement odbywa się za pomocą metod WebElement połączonych z lokalizatorami. Typowym przykładem jest siatka specyfikacji produktu wyświetlana na stronie produktu w sklepie internetowym.

Odczytywanie tabeli HTML Web

Testerzy często potrzebują dostępu do elementów, zazwyczaj wartości tekstowych, znajdujących się w tabelach HTML. Projektanci stron internetowych rzadko jednak dodają atrybut id lub name do poszczególnych komórek. Dlatego metody takie jak By.id(), By.name() czy By.cssSelector() rzadko działają. W tym scenariuszu najpewniejszą opcją jest By.xpath(), ponieważ analizuje relacje nadrzędny-podrzędny wewnątrz znacznika tabeli.

Jak obsługiwać tabelę internetową w Selenium

Rozważ poniższy kod HTML do obsługi tabel internetowych Selenium.

Jak napisać XPath dla tabeli w Selenium

Użyjemy XPath aby uzyskać tekst wewnętrzny komórki zawierającej tekst „czwarta komórka”.

Jak napisać XPath dla tabeli w Selenium

Krok 1 – Ustaw element nadrzędny (tabelę)

Lokalizatory XPath w WebDriver zawsze zaczynają się od podwójnego ukośnika „//”, po którym następuje element nadrzędny. Ponieważ mamy do czynienia z tabelami internetowymi w Selenium, elementem nadrzędnym powinien zawsze być etykietka. Pierwsza część naszego Selenium Lokalizator tabeli XPath musi zatem zaczynać się od „//table”.

Selenium Przykład tabeli internetowej

Krok 2 – Dodaj elementy podrzędne

Element bezpośrednio pod Jest , Więc jest dzieckiem . Odwrotnie, jest rodzicem Wszystkie elementy podrzędne w XPath są umieszczane po prawej stronie elementu nadrzędnego i rozdzielone jednym ukośnikiem „/”, jak pokazano poniżej.

Selenium Przykład tabeli internetowej

Krok 3 – Dodaj predykaty

Ten element zawiera dwa Tagi. Te dwa tagi są elementami podrzędnymi , Więc jest rodzicem obojga. Dwoje elementy są rodzeństwem. Rodzeństwo to elementy potomne, które mają tego samego rodzica.

Aby dotrzeć do który zawiera „czwartą komórkę”, musimy najpierw uzyskać dostęp do Dopiero , nie pierwszy. Wpisanie tylko „//table/tbody/tr” będzie dotyczyło pierwszego etykietka.

Jak więc uzyskać dostęp do drugiego ? Odpowiedź brzmi: użyj Predykaty. Predykaty to liczby lub atrybuty HTML ujęte w nawiasy kwadratowe „[ ]”, które odróżniają element podrzędny od jego elementów pokrewnychPonieważ wiersz, którego potrzebujemy, jest drugim, jako predykat używamy „[2]”.

 Selenium Przykład tabeli internetowej

Jeśli pominiemy predykat, XPath zwróci pierwszy element bliźniaczy. Zatem każdy z poniższych kodów XPath dotrze do pierwszego .

Selenium Tabela internetowa przy użyciu Xpath

Krok 4 – Dodaj kolejne elementy potomne, używając odpowiednich predykatów

Następnym elementem, którego potrzebujemy jest drugi Stosując zasady z kroków 2 i 3, dochodzimy do XPath pokazanego poniżej.

Tabela internetowa w Selenium za pomocą Xpatha

Teraz, gdy mamy poprawny lokalizator XPath, możemy uzyskać dostęp do komórki i odczytać jej tekst wewnętrzny za pomocą poniższego kodu. Zakłada to, że strona HTML została zapisana jako „newhtml.html” na dysku C.

Tabela internetowa w Selenium za pomocą Xpatha

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

Tabela internetowa w Selenium za pomocą Xpatha

Dostęp do zagnieżdżonych tabel

Te same zasady dotyczą tabel zagnieżdżonych. Tabele zagnieżdżone to tabele umieszczone wewnątrz innej tabeli. Przykład jest pokazany poniżej.

Jak uzyskać dostęp do zagnieżdżonych tabel w Selenium

Aby uzyskać dostęp do komórki zawierającej tekst „4-5-6” korzystając z koncepcji rodzica/dziecka i predykatu z poprzedniej sekcji, możemy utworzyć ścieżkę XPath pokazaną poniżej.

Jak uzyskać dostęp do zagnieżdżonych tabel w Selenium

Poniższy kod WebDriver pobiera wewnętrzny tekst docelowej komórki.

Dostęp do tabel zagnieżdżonych w 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();
}

Poniższe dane wyjściowe potwierdzają, że pomyślnie uzyskano dostęp do tabeli wewnętrznej.

Dostęp do tabel zagnieżdżonych w Selenium

Używanie atrybutów jako predykatów

Jeśli element znajduje się głęboko w kodzie HTML, gdzie liczenie elementów pokrewnych staje się uciążliwe, możemy zamiast tego wykorzystać atrybut unique tego elementu.

W poniższym przykładzie komórka „Nowy Jork – Chicago” jest głęboko zakopana w Mercury Strona główna wycieczek.

Selenium Przykład tabeli internetowej wykorzystującej atrybuty jako predykaty

Selenium Przykład tabeli internetowej wykorzystującej atrybuty jako predykaty

Jako predykatu możemy użyć unikalnego atrybutu tabeli (szerokość=”270″). Atrybuty są używane jako predykaty poprzez poprzedzenie ich symbolem @W powyższym przykładzie komórka „Nowy Jork – Chicago” znajduje się w pierwszej czwartego , więc nasza ścieżka XPath powinna wyglądać tak, jak pokazano poniżej.

Selenium Przykład tabeli internetowej z atrybutami jako predykatami

Pamiętaj, że gdy wstawisz XPath do środka Java, zastąp podwójne cudzysłowy wokół „270” ukośnikiem odwrotnym, aby ciąg By.xpath() nie został zakończony przedwcześnie.

Selenium Przykład tabeli internetowej z atrybutami jako predykatami

Jesteśmy teraz gotowi, aby uzyskać dostęp do tej komórki za pomocą poniższego kodu.

Selenium Przykład tabeli internetowej z atrybutami jako predykatami

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 Przykład tabeli internetowej z atrybutami jako predykatami

Skrót: użyj elementu Inspect, aby uzyskać dostęp do tabel w Selenium

Jeśli trudno jest uzyskać indeks lub atrybut elementu, najszybszym sposobem wygenerowania XPath jest użycie funkcji Inspect Element w narzędziach deweloperskich nowoczesnych przeglądarek.

Rozważ poniższy przykład z Mercury Strona główna wycieczek.

Selenium Przykład tabeli internetowej z atrybutami jako predykatami

Krok 1

Kliknij prawym przyciskiem myszy komórkę docelową i wybierz polecenie Inspekcja, aby wyświetlić ścieżkę DOM, a następnie skopiuj pełną ścieżkę XPath.

Selenium Przykład tabeli internetowej z atrybutami jako predykatami

Krok 2

Poszukaj pierwszego elementu nadrzędnego „tabeli” i usuń wszystko po jego lewej stronie.

Selenium Przykład tabeli internetowej z atrybutami jako predykatami

Krok 3

Pozostałą część XPath poprzedź podwójnym ukośnikiem „//” i skopiuj ją do kodu WebDriver.

Selenium Przykładowa tabela internetowa z atrybutami

Poniższy kod WebDriver pobiera tekst wewnętrzny głęboko zagnieżdżonego elementu.

Selenium Przykładowa tabela internetowa z atrybutami

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

Jak zliczać wiersze i kolumny w dynamicznej tabeli internetowej

Dynamiczne tabele internetowe, takie jak pulpity nawigacyjne czy wyniki wyszukiwania, renderują różną liczbę wierszy przy każdym ładowaniu. Aby sobie z nimi poradzić, użyj findElements aby zdobyć każdy do listy, a następnie wykonaj pętlę, aby odczytać każdą komórkę. Poniższy fragment kodu zlicza wiersze i odczytuje każdą komórkę w tabeli, której identyfikator to „klienci”.

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

Owiń lokalizator w WebDriverWait w visibilityOfAllElementsLocatedBy gdy tabela jest ładowana przez AJAX. Zapobiega to nieaktualnym odwołaniom do elementów w wolno renderujących się siatkach.

Selenium 4 lokalizatory względne dla tabel internetowych

Selenium 4 wprowadził lokalizatory względne, które wskazują elementy według pozycji wizualnej. Są one przydatne, gdy indeksy XPath ulegają uszkodzeniu z powodu zmiany kolejności wierszy. Metody above(), below(), toLeftOf(), toRightOf(), near() wszystkie akceptują element zakotwiczony WebElement.

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

Lokalizatory względne pozostają czytelne, gdy zmienia się kolejność kolumn. Połącz je z jawnymi oczekiwaniami na najsilniejsze wyniki na stronach opartych na danych.

Narzędzia AI do obsługi dynamicznych tabel internetowych

Platformy testowe wspomagane sztuczną inteligencją redukują konieczność konserwacji lokalizatorów w sieciach, które często się zmieniają. Narzędzia takie jak Testim, Mabl, Funkcjonować Wykorzystują komputerowe widzenie i modele DOM do wykrywania przesunięć kolumn i samonaprawiających się lokalizatorów. Identyfikują wiersze na podstawie tekstu nagłówka i podobieństwa komórek, a nie stałych indeksów XPath.

Dla czystej Selenium projekty, biblioteki takie jak Healenium Opakuj WebDriver i przepisz uszkodzone lokalizatory w czasie wykonywania. Połącz te narzędzia z WebDriverWait, aby zachować stabilność skryptów tabel dynamicznych bez przepisywania selektorów po każdej zmianie interfejsu użytkownika.

Podsumowanie

  • By.xpath() to najbardziej niezawodny sposób dostępu do komórek tabeli internetowej w Selenium.
  • Jeśli trudno jest policzyć rodzeństwo, użyj unikatowego atrybutu jako predykatu, poprzedzonego symbolem @.
  • findElements zwraca listę który obsługuje liczenie wierszy w tabelach dynamicznych.
  • Selenium 4 lokalizatory względne (powyżej, poniżej, w pobliżu) redukują zależność od XPath pozycyjnego.
  • Funkcja Inspect Element w DevTools przyspiesza generowanie XPath dla głęboko ukrytych komórek.
  • Narzędzia AI, takie jak Testim, Mabl i Healenium – samonaprawiające się lokalizatory do zmiany siatek.

FAQ

Tabela internetowa w Selenium to WebElement, który wyświetla dane tabelaryczne w wierszach i kolumnach. Może być statyczny lub dynamiczny. Testerzy uzyskują dostęp do jego komórek za pomocą metod WebElement w połączeniu z lokalizatorami XPath lub CSS, ponieważ tabele rzadko ujawniają unikalne identyfikatory dla poszczególnych komórek.

Większość komórek tabeli nie ma atrybutu id ani name, więc By.id() i By.name() nie będą działać. XPath przechodzi przez strukturę rodzic-dziecko elementów table, tbody, tr i td, co czyni go najpewniejszym lokalizatorem komórek.

Użyj driver.findElements(By.xpath(“//table[@id='tbl']//tr”)).size() do zliczania wierszy i //table[@id='tbl']//tr[1]/td do zliczania kolumn. Metoda findElements zwraca Listę obsługuje funkcję size() do szybkiego obliczania sum wierszy.

Selenium W wersji 4 wprowadzono lokalizatory względne, takie jak above(), below(), toLeftOf(), toRightOf() i near(). Pomagają one w dotarciu do komórek umieszczonych wokół znanej komórki kotwiczącej, co jest przydatne, gdy indeksy XPath zmieniają się w tabelach dynamicznych.

Przejrzyj wiersze za pomocą findElements, a następnie odczytaj każdą komórkę za pomocą getText(). Dynamicznie twórz XPath, używając łączenia ciągów znaków, np. //tr[“+i+”]/td[“+j+”]. Poczekaj na załadowanie tabeli za pomocą WebDriverWait przed odczytaniem wartości.

Tak. Narzędzia oparte na sztucznej inteligencji, takie jak Testim, Mabl i Functionize wykorzystują wizję komputerową i modele DOM do wykrywania granic tabel, wnioskowania nagłówków i samonaprawiania lokalizatorów po przesunięciu kolumn. Zmniejsza to konieczność konserwacji XPath w dynamicznych pulpitach nawigacyjnych.

Modele AI uczą się wzorców wierszy z poprzednich przebiegów i dopasowują komórki na podstawie podobieństwa tekstu, a nie stałych indeksów. Gdy wiersz się przesuwa lub kolumna zostaje zmieniona, lokalizator AI nadal znajduje cel bez konieczności ponownego pisania ścieżki XPath.

findElement zwraca pojedynczy WebElement i zgłasza wyjątek NoSuchElementException, jeśli go brakuje. findElements zwraca Listę i zwraca pustą listę, jeśli nie znaleziono dopasowania. Użyj findElements, gdy looping nad wierszami lub kolumnami tabeli.

Podsumuj ten post następująco: