Jak obsługiwać tabelę internetową w Selenium Sterownik sieciowy
W czym jest tabela internetowa Selenium?
A Tabela internetowa in Selenium jest WebElement używanym do tabelarycznej reprezentacji danych lub informacji. Wyświetlane dane lub informacje mogą być statyczne lub dynamiczne. Do tabeli Web i jej elementów można uzyskać dostęp za pomocą funkcji WebElement i lokalizatorów w SeleniumTypowym przykładem tabeli internetowej są specyfikacje produktu wyświetlane na platformie handlu elektronicznego.
Czytanie tabeli internetowej HTML
Są chwile, kiedy musimy uzyskać dostęp do elementów (zwykle tekstów) znajdujących się w tabelach HTML. Jednak bardzo rzadko projektant stron internetowych podaje atrybut id lub name do określonej komórki w tabeli. Dlatego nie możemy używać zwykłych metod, takich jak „By.id()”, „By.name()” lub „By.cssSelector()”. W tym przypadku najbardziej niezawodną opcją jest dostęp do nich za pomocą metody „By.xpath()”.
Jak obsługiwać tabelę internetową w Selenium
Rozważ poniższy kod HTML do obsługi tabel internetowych Selenium.
Użyjemy XPath aby uzyskać tekst wewnętrzny komórki zawierającej tekst „czwarta komórka”.
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 Dlatego lokalizator tabel XPath powinien zaczynać się od „//table”.
Krok 2 – Dodaj elementy podrzędne
Element bezpośrednio pod Jest więc możemy to powiedzieć jest „dzieckiem”. . I również, jest „rodzicem”. . Wszystkie elementy podrzędne w XPath są umieszczane na prawo od elementu nadrzędnego, oddzielone jednym ukośnikiem „/”, jak w kodzie pokazanym poniżej.
Krok 3 – Dodaj predykaty
The element zawiera dwa tagi. Możemy teraz powiedzieć, że te dwa tagi są „dziećmi” . W związku z tym możemy tak powiedzieć jest rodzicem obojga elementy.
Kolejną rzeczą, którą możemy stwierdzić, jest to, że jedno i drugie elementy są rodzeństwem. Rodzeństwo odnosi się do elementów podrzędnych mających tego samego rodzica.
Aby dostać się do chcemy uzyskać dostęp (ten z tekstem „czwarta komórka”), musimy najpierw uzyskać dostęp do Dopiero i nie pierwszy. Jeśli po prostu napiszemy „//table/tbody/tr”, wówczas uzyskamy dostęp do pierwszego etykietka.
Jak więc uzyskać dostęp do drugiego Następnie? Odpowiedzią na to jest użycie Predykaty.
Predykaty to liczby lub atrybuty HTML ujęte w parę nawiasów kwadratowych „[ ]”, które odróżniają element podrzędny od jego elementów pokrewnych.. Od potrzebujemy dostępu, to drugi, użyjemy „[2]” jako predykatu.
Jeśli nie użyjemy żadnego predykatu, XPath uzyska dostęp do pierwszego rodzeństwa. Dlatego możemy uzyskać dostęp do pierwszego przy użyciu jednego z tych kodów XPath.
Krok 4 – Dodaj kolejne elementy potomne, używając odpowiednich predykatów
Kolejnym elementem, do którego musimy uzyskać dostęp, jest drugi . Stosując zasady, których nauczyliśmy się w krokach 2 i 3, ukończymy nasz kod XPath tak, aby wyglądał jak ten pokazany poniżej.
Teraz, gdy mamy poprawny lokalizator XPath, możemy już uzyskać dostęp do komórki, którą chcieliśmy i uzyskać jej tekst wewnętrzny, korzystając z poniższego kodu. Zakłada się, że zapisałeś powyższy kod HTML jako „newhtml.html” na dysku C.
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(); } }
Dostęp do zagnieżdżonych tabel
Te same zasady omówione powyżej dotyczą tabel zagnieżdżonych. Tabele zagnieżdżone to tabele znajdujące się w innej tabeli. Przykład jest pokazany poniżej.
Aby uzyskać dostęp do komórki zawierającej tekst „4-5-6” za pomocą „//parent/child” i koncepcji predykatów z poprzedniej sekcji, powinniśmy być w stanie utworzyć poniższy kod XPath.
Poniższy kod WebDrivera powinien być w stanie pobrać wewnętrzny tekst komórki, do której uzyskujemy dostęp.
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.
Używanie atrybutów jako predykatów
Jeśli element jest zapisany głęboko w kodzie HTML i bardzo trudno jest określić liczbę, która ma zostać użyta jako predykat, możemy zamiast tego użyć unikalnego atrybutu tego elementu.
W poniższym przykładzie komórka „Nowy Jork do Chicago” jest zlokalizowana głęboko w Mercury Kod HTML strony głównej wycieczek.
W tym przypadku możemy użyć unikalnego atrybutu tabeli (width=”270″) jako predykatu. Atrybuty są używane jako predykaty poprzez poprzedzenie ich symbolem @. W powyższym przykładzie komórka „Nowy Jork do Chicago” znajduje się w pierwszej z czwartego , dlatego nasza ścieżka XPath powinna wyglądać tak, jak pokazano poniżej.
Pamiętaj o tym, kiedy umieścimy kod XPath Java, powinniśmy użyć znaku ucieczki odwrotnego ukośnika „\” dla podwójnych cudzysłowów po obu stronach „270”, aby argument ciągu By.xpath() nie został zakończony przedwcześnie.
Jesteśmy teraz gotowi, aby uzyskać dostęp do tej komórki za pomocą poniższego kodu.
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(); }
Skrót: użyj elementu Inspect, aby uzyskać dostęp do tabel w Selenium
Jeśli numer lub atrybut elementu jest niezwykle trudny lub niemożliwy do uzyskania, najszybszym sposobem wygenerowania kodu XPath jest użycie Inspekcji Elementu.
Rozważ poniższy przykład z Mercury Strona główna wycieczek.
Krok 1
Użyj Firebuga, aby uzyskać kod XPath.
Krok 2
Poszukaj pierwszego elementu nadrzędnego „tabeli” i usuń wszystko po jego lewej stronie.
Krok 3
Pozostałą część kodu poprzedź podwójnym ukośnikiem „//” i skopiuj ją do kodu WebDriver.
Poniższy kod WebDrivera będzie w stanie pomyślnie pobrać wewnętrzny tekst elementu, do którego uzyskujemy dostęp.
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(); }
Podsumowanie
- By.xpath() jest powszechnie używana do uzyskiwania dostępu do elementów WebTable w Selenium.
- Jeśli element jest zapisany głęboko w kodzie HTML tak, że bardzo trudno jest określić liczbę, która ma zostać użyta jako predykat, możemy zamiast tego użyć unikalnego atrybutu tego elementu Selenium pobierz element tabeli.
- Atrybuty są używane jako predykaty poprzez poprzedzenie ich symbolem @.
- Użyj elementu Inspekcja, aby uzyskać dostęp do tabeli WebTable w Selenium