Czytanie tabeli HTML w sieci Web
Są chwile, kiedy musimy uzyskać dostęp do elementów (zwykle tekstów), które znajdują się w tabelach HTML. Jednak projektant stron internetowych bardzo rzadko podaje identyfikator lub atrybut nazwy 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 uzyskanie do nich dostępu za pomocą metody „By.xpath ()”.
W tym samouczku nauczysz się:
- Jak napisać XPath dla tabeli
- Dostęp do tabel zagnieżdżonych
- Używanie atrybutów jako predykatów
- Skrót: Użyj elementu Sprawdź, aby uzyskać dostęp do tabel w Selenium
Jak napisać XPath dla tabeli
Rozważ poniższy kod HTML.
Użyjemy XPath, aby uzyskać wewnętrzny tekst komórki zawierającej tekst „czwarta komórka”.
Krok 1 - Ustaw element nadrzędny (tabela)
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, elementem nadrzędnym powinien być zawsze tag
. Dlatego pierwsza część naszego lokalizatora XPath powinna zaczynać się od „// table”.Krok 2 - Dodaj elementy podrzędne
Element bezpośrednio pod
Krok 3 - Dodaj predykaty
Element
zawiera dwa tagi . Możemy teraz powiedzieć, że te dwa znaczniki są „dziećmi” elementu . W konsekwencji możemy powiedzieć, że jest rodzicem obu elementów .Inną rzeczą, którą możemy wywnioskować, jest to, że dwa
elementy są rodzeństwem. Rodzeństwo odnosi się do elementów potomnych mających tego samego rodzica .Aby dostać się do
, a nie do pierwszej. Jeśli po prostu napiszemy „// table / tbody / tr”, uzyskamy dostęp do pierwszego znacznika .Jak więc uzyskamy dostęp do drugiego
? Odpowiedzią na to jest użycie predykatów .Predykaty to liczby lub atrybuty HTML ujęte w parę nawiasów kwadratowych „[]”, które odróżniają element podrzędny od jego rodzeństwa . Ponieważ
, do którego musimy uzyskać dostęp, jest drugim, 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
za pomocą jednego z tych kodów XPath.Krok 4 - Dodaj kolejne elementy potomne za pomocą odpowiednich predykatów
Następnym elementem, do którego musimy uzyskać dostęp, jest drugi element
, więc nasz XPath powinien wyglądać tak, jak pokazano poniżej.Pamiętaj, że kiedy umieścimy kod XPath w Javie, powinniśmy użyć znaku ucieczki odwrotnego ukośnika "\" dla podwójnych cudzysłowów po obu stronach "270", aby argument 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 = "http://demo.guru99.com/test/newtours/";Sterownik WebDriver = nowy FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (według.xpath ("// table [@width = \" 270 \ "] / tbody / tr [4] / td")).getText ();System.out.println (innerText);driver.quit ();}
Skrót: Użyj elementu Sprawdź, 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 elementu Inspect.
Rozważ poniższy przykład ze strony głównej Mercury Tours.
Krok 1
Użyj programu Firebug, aby uzyskać kod XPath.
Krok 2
Poszukaj pierwszego elementu nadrzędnego „table” i usuń wszystko, co znajduje się po jego lewej stronie.
Krok 3
Poprzedź pozostałą część kodu podwójnym ukośnikiem „//” i skopiuj go do swojego kodu WebDriver.
Poniższy kod WebDriver będzie mógł pomyślnie pobrać wewnętrzny tekst elementu, do którego uzyskujemy dostęp.
public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";Sterownik WebDriver = nowy FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (według.xpath ("// table / tbody / tr / td [2]"+ "// table / tbody / tr [4] / td /"+ „table / tbody / tr / td [2] /”+ „table / tbody / tr [2] / td [1] /”+ „tabela [2] / tbody / tr [3] / td [2] / czcionka”)).getText ();System.out.println (innerText);driver.quit ();}
Podsumowanie
- By.xpath () jest powszechnie używana do uzyskiwania dostępu do elementów tabeli.
- Jeśli element jest zapisany głęboko w kodzie HTML w taki sposób, że numer używany w predykacie jest bardzo trudny do określenia, możemy zamiast tego użyć unikalnego atrybutu tego elementu.
- Atrybuty są używane jako predykaty, poprzedzając je symbolem @.
- Użyj elementu Sprawdź, aby uzyskać dostęp do tabel w Selenium