Ako zaobchádzať s webovou tabuľkou v selenovom WebDriveri

Obsah:

Anonim

Čítanie webovej tabuľky HTML

Sú chvíle, kedy potrebujeme získať prístup k prvkom (zvyčajne k textom), ktoré sú v tabuľkách HTML. Je však veľmi zriedkavé, aby webový dizajnér uviedol určitú bunku v tabuľke atribút id alebo name. Preto nemôžeme použiť obvyklé metódy ako „By.id ()“, „By.name ()“ alebo „By.cssSelector ()“. V takom prípade je najspoľahlivejšou možnosťou získať k nim prístup pomocou metódy „By.xpath ()“.

V tomto výučbe sa naučíte -

  • Ako písať XPath pre tabuľku
  • Prístup k vnoreným tabuľkám
  • Používanie atribútov ako predikátov
  • Skratka: Použite prvok Inspect na prístup k tabuľkám na seléne

Ako písať XPath pre tabuľku

Zvážte kód HTML uvedený nižšie.

Použijeme XPath na získanie vnútorného textu bunky obsahujúcej text „štvrtá bunka“.

Krok 1 - Nastavte nadradený prvok (tabuľka)

Lokátory XPath vo WebDriveri vždy začínajú dvojitou lomkou „//“ a potom nasledujú nadradeným prvkom . Pretože máme do činenia s tabuľkami, nadradeným prvkom by mal byť vždy tag

. Prvá časť nášho vyhľadávača XPath by preto mala začínať zámenom „// table“.

Krok 2 - Pridajte podradené prvky

Prvok bezprostredne pod je

, takže môžeme povedať, že je „potomkom“
. A tiež je
„rodičom“ . Všetky podradené prvky v XPath sú umiestnené napravo od ich nadradeného prvku a sú oddelené jednou lomkou „/“, ako je uvedené nižšie.

Krok 3 - Pridajte predikáty

Prvok

obsahuje dve značky . Teraz môžeme povedať, že tieto dve značky sú „deťmi“ osoby . V dôsledku toho môžeme povedať, že je rodičom oboch prvkov .

Ďalšou vecou, ​​ktorú môžeme uzavrieť, je, že dva prvky

sú súrodenci. Súrodenci označujú podradené prvky, ktoré majú rovnakého rodiča .

Aby sme sa dostali k

a nie k prvej. Ak jednoducho napíšeme „// table / tbody / tr“, dostaneme sa k prvej značke .

Ako teda dostaneme druhý

? Odpoveďou je použitie predikátov .

Predikáty sú čísla alebo atribúty HTML uzavreté v pároch hranatých zátvorkách „[]“, ktoré odlišujú podradený prvok od jeho súrodencov . Pretože

, ku ktorému potrebujeme získať prístup, je druhé, ako predikát použijeme „[2]“.

Pokiaľ nebudeme používať žiaden predikát, XPath sa dostane k prvému súrodencovi. Preto môžeme pristupovať k prvému

pomocou ktoréhokoľvek z týchto kódov XPath.

Krok 4 - Pridajte nasledovné prvky dieťaťa pomocou vhodných predikátov

Ďalším prvkom, ku ktorému musíme získať prístup, je druhý

, takže naša cesta XPath by mala byť taká, ako je uvedené nižšie.

Pamätajte, že keď vložíme kód XPath do Javy, mali by sme pre dvojité úvodzovky na oboch stranách čísla „270“ použiť spätnú lomku „\“, aby sa reťazcový argument By.xpath () predčasne neukončil. .

Teraz sme pripravení na prístup k tejto bunke pomocou nižšie uvedeného kódu.

public static void main (String [] args) {Reťazec baseUrl = "http://demo.guru99.com/test/newtours/";Ovládač WebDriver = nový FirefoxDriver ();driver.get (baseUrl);Reťazec innerText = driver.findElement (od.xpath ("// tabuľka [@width = \" 270 \ "] / tbody / tr [4] / td")).getText ();System.out.println (innerText);driver.quit ();}

Skratka: Použite prvok Inspect na prístup k tabuľkám na seléne

Ak je mimoriadne ťažké alebo nemožné získať číslo alebo atribút prvku, najrýchlejší spôsob vygenerovania kódu XPath je pomocou nástroja Inspect Element.

Zvážte príklad uvedený nižšie na domovskej stránke Mercury Tours.

Krok 1

Použite Firebug na získanie kódu XPath.

Krok 2

Vyhľadajte prvý nadradený prvok „tabuľka“ a vymažte všetko, čo sa nachádza vľavo od neho.

Krok 3

Pred zvyšnú časť kódu vložte dvojitú lomku „//“ a skopírujte ju do kódu WebDriver.

Kód WebDriver uvedený nižšie bude schopný úspešne načítať vnútorný text prvku, ku ktorému pristupujeme.

public static void main (String [] args) {Reťazec baseUrl = "http://demo.guru99.com/test/newtours/";Ovládač WebDriver = nový FirefoxDriver ();driver.get (baseUrl);Reťazec innerText = driver.findElement (od.xpath ("// table / tbody / tr / td [2]"+ "// stôl / tbody / tr [4] / td /"+ "stôl / telo / tr / td [2] /"+ "table / tbody / tr [2] / td [1] /"+ "tabuľka [2] / tbody / tr [3] / td [2] / písmo")).getText ();System.out.println (innerText);driver.quit ();}

Zhrnutie

  • By.xpath () sa bežne používa na prístup k prvkom tabuľky.
  • Ak je prvok napísaný hlboko v kóde HTML, takže je veľmi ťažké určiť číslo, ktoré sa má použiť pre predikát, môžeme namiesto toho použiť jedinečný atribút tohto prvku.
  • Atribúty sa používajú ako predikáty ich predponou symbolom @.
  • Použite prvok Inspect na prístup k tabuľkám v seléne
, ku ktorej chceme získať prístup (k tej s textom „štvrtá bunka“), musíme najskôr získať prístup k druhej
. Použitím princípov, ktoré sme sa naučili z krokov 2 a 3, dokončíme náš kód XPath tak, ako je uvedený nižšie.

Teraz, keď máme správny lokátor XPath, môžeme už získať prístup k bunke, ktorú sme chceli, a získať jej vnútorný text pomocou nižšie uvedeného kódu. Predpokladá, že ste vyššie uložili HTML kód ako „newhtml.html“ na disk C.

public static void main (String [] args) {Reťazec baseUrl = "http://demo.guru99.com/test/write-xpath-table.html";Ovládač WebDriver = nový FirefoxDriver ();driver.get (baseUrl);Reťazec innerText = driver.findElement (By.xpath ("// table / tbody / tr [2] / td [2]")). GetText ();System.out.println (innerText);driver.quit ();}}

Prístup k vnoreným tabuľkám

Rovnaké princípy, o ktorých sa hovorilo vyššie, sa týkajú vnorených tabuliek. Vnorené tabuľky sú tabuľky umiestnené v inej tabuľke . Nižšie je uvedený príklad.

Pre prístup k bunke s textom „4-5-6“ pomocou „// parent / child“ a predikátových konceptov z predchádzajúcej časti by sme mali byť schopní prísť s nižšie uvedeným XPath kódom.

Kód WebDriver uvedený nižšie by mal byť schopný načítať vnútorný text bunky, ku ktorej pristupujeme.

public static void main (String [] args) {Reťazec baseUrl = "http://demo.guru99.com/test/accessing-nested-table.html";Ovládač WebDriver = nový FirefoxDriver ();driver.get (baseUrl);Reťazec innerText = driver.findElement (By.xpath ("// table / tbody / tr [2] / td [2] / table / tbody / tr / td [2]")). GetText ();System.out.println (innerText);driver.quit ();}

Výstup uvedený nižšie potvrdzuje, že k vnútornej tabuľke bol úspešne prístupný.

Používanie atribútov ako predikátov

Ak je prvok napísaný hlboko v kóde HTML, takže je veľmi ťažké určiť číslo, ktoré sa má použiť pre predikát, môžeme namiesto toho použiť jedinečný atribút tohto prvku.

V príklade nižšie je bunka „New York - Chicago“ umiestnená hlboko do HTML kódu domovskej stránky Mercury Tours.

V takom prípade môžeme ako predikát použiť jedinečný atribút tabuľky (width = "270"). Atribúty sa používajú ako predikáty ich predponou symbolom @ . V príklade vyššie je bunka „New York - Chicago“ umiestnená v prvej

štvrtej