Na webe sú zverejnené dva typy tabuliek HTML.
- Statické tabuľky : Údaje sú statické, tj. Počet riadkov a stĺpcov je pevný.
- Dynamické tabuľky : Údaje sú dynamické, tj počet riadkov a stĺpcov NIE je stanovený.
Teraz sa naučíme, ako zaobchádzať s dynamickou tabuľkou v seléne:
Nižšie je uvedený príklad dynamickej webovej tabuľky v nástroji Selenium for Sales. Na základe vstupných filtrov dátumu sa počet riadkov zmení. Má teda dynamickú povahu.
Manipulácia so statickou tabuľkou je jednoduchá, ale manipulácia s dynamickými tabuľkami v seléne je trochu zložitá, pretože riadky a stĺpce nie sú stále.
V tomto návode sa naučíte
- Používanie X-Path na vyhľadanie prvkov webovej tabuľky
- Príklad: Načítajte počet riadkov a stĺpcov z Dynamickej webovej tabuľky
- Príklad: Načítanie hodnoty bunky konkrétneho riadku a stĺpca dynamickej tabuľky
- Príklad: Získajte maximum zo všetkých hodnôt v stĺpci dynamickej tabuľky
- Príklad: Získajte všetky hodnoty dynamickej tabuľky
Používanie X-Path na vyhľadanie prvkov webovej tabuľky
Predtým, ako nájdeme webový prvok, najskôr pochopíme -
Čo je to webový prvok?
Webové prvky nie sú nič iné ako prvky HTML, ako napríklad textové pole, rozbaľovacie ponuky, tlačidlá odoslania atď. Tieto prvky HTML sú napísané začiatočnou značkou a končia koncovou značkou.
Napríklad,
Môj prvý dokument HTML
.Kroky na získanie cesty X webového prvku, ktorý chceme nájsť.
Krok 1) V prehliadači Chrome prejdite na stránku http://demo.guru99.com/test/web-table-element.php
Krok 2) Kliknite pravým tlačidlom myši na webový prvok, ktorého cestu x sa má načítať. V našom prípade kliknite pravým tlačidlom myši na možnosť „Spoločnosť“ a vyberte možnosť Skontrolovať. Zobrazí sa nasledujúca obrazovka -
Krok 3) Kliknite pravým tlačidlom myši na zvýraznený webový prvok> vyberte možnosť Kopírovať -> Kopírovať cestu x.
Krok 4) Na nájdenie prvku použite skopírovanú cestu X „// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" v nástroji Selenium WebDriver.
Príklad: Načítajte počet riadkov a stĺpcov z Dynamickej webovej tabuľky
Počas spracovania dynamickej webovej tabuľky v seléne nemôžeme predpovedať jeho počet riadkov a stĺpcov.
Pomocou webového ovládača selén môžeme nájsť
- Počet riadkov a stĺpcov webovej tabuľky v seléne
- Údaje riadka X alebo stĺpca Y.
Nižšie je uvedený program na načítanie celkového počtu riadkov a stĺpcov na spracovanie webovej tabuľky v seléne:
import java.text.ParseException;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;verejná trieda Noofrowsandcols {public static void main (String [] args) hodí ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nový ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");//Č. StĺpcovZoznamcol = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("Počet stĺpcov je: + col.size ());//Č. RiadkovZoznam riadky = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Počet riadkov je: + rows.size ()); wd.close (); }}
Vysvetlenie kódu:
- Tu sme najskôr vyhlásili objekt webového ovládača za „wd“ a inicializovali ho na chrómovaný ovládač.
- Zoznam
používame na celkový počet stĺpcov v stĺpci. - Príkazy findElements vrátia zoznam VŠETKÝCH prvkov zodpovedajúcich zadanému lokátoru
- pomocou findElements a X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th dostaneme všetky stĺpce
- Podobne postup opakujeme pre riadky.
Výkon:
Príklad: Načítanie hodnoty bunky konkrétneho riadku a stĺpca dynamickej tabuľky
Predpokladajme, že potrebujeme 3. riadok tabuľky a údaje jej druhej bunky. Pozri tabuľku nižšie -
V tabuľke vyššie sú údaje po určitom čase pravidelne aktualizované. Údaje, ktoré sa pokúsite načítať, sa budú líšiť od vyššie uvedenej snímky obrazovky. Kód však zostáva rovnaký. Tu je ukážkový program na získanie údajov o 3. riadku a 2. stĺpci.
import java.text.ParseException;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;import java.util.concurrent.TimeUnit;verejná trieda RowandCell {public static void main (String [] args) hodí ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nový ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");wd.manage (). timeouts (). implicitneWait (20, TimeUnit.SECONDS);WebElement baseTable = wd.findElement (By.tagName ("tabuľka"));// Vyhľadanie tretieho riadku tabuľkyWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));Reťazec rowtext = tableRow.getText ();System.out.println ("Tretí riadok tabuľky: + text riadku);// na získanie údajov o druhom stĺpci v 3. riadkuWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));Reťazec valueIneed = cellIneed.getText ();System.out.println ("Hodnota bunky je: + valueIneed);wd.close ();}}
Vysvetlenie kódu:
- Tabuľka je umiestnená pomocou vlastnosti vyhľadávača „tagname“.
- Pomocou XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]" nájdite 3. riadok a jeho text získame pomocou funkcie getText ()
- Pomocou Xpath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]" nájdeme 2. bunku v 3. rade a jej text dostaneme pomocou funkcie getText ()
Výstup :
Príklad: Získajte maximum zo všetkých hodnôt v stĺpci dynamickej tabuľky
V tomto príklade dostaneme maximum všetkých hodnôt v konkrétnom stĺpci.
Pozrite si nasledujúcu tabuľku -
Tu je kód
import java.text.ParseException;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;import java.text.NumberFormat;verejná trieda MaxFromTable {public static void main (String [] args) hodí ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nový ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");Reťazec max;dvojité m = 0, r = 0;// Nie. stĺpcovZoznamcol = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Celkový počet stĺpcov je: + col.size ());//Č. RiadkovZoznam řádky = wd.findElements (By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println ("Celkový počet riadkov je: + rows.size ()); for (int i = 1; i r) {r = m; }} System.out.println ("Maximálna aktuálna cena je: + r); }}
Vysvetlenie kódu:
- Pomocou chrómového ovládača nájdeme webovú tabuľku a celkový počet riadkov dostaneme pomocou XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
- Pomocou cyklu for opakujeme celkový počet riadkov a postupne načítame hodnoty. Na získanie ďalšieho riadku použijeme (i + 1) v XPath
- Porovnáme starú hodnotu s novou hodnotou a maximálna hodnota sa vytlačí na konci cyklu for
Výkon
Príklad: Získajte všetky hodnoty dynamickej tabuľky
Zvážte nasledujúcu tabuľku http://demo.guru99.com/test/table.html
Počet stĺpcov pre každý riadok je iný.
Tu majú riadok číslo 1, 2 a 4 3 bunky a riadok číslo 3 má 2 bunky a riadok číslo 5 má 1 bunku.
Musíme získať hodnoty všetkých buniek
Tu je kód:
import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import java.util.concurrent.TimeUnit;import org.openqa.selenium.chrome.ChromeDriver;verejná trieda NofRowsColmns {public static void main (String [] args) hodí ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nový ChromeDriver ();wd.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// Ak chcete vyhľadať tabuľku.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// Ak chcete vyhľadať riadky tabuľky.Zoznamlines_table = mytable.findElements (By.tagName ("tr"));// Na výpočet počtu riadkov v tabuľke.int riadky_počet = riadky_tabulka.size ();// Smyčka sa vykoná až do posledného riadku tabuľky.pre (int riadok = 0; riadok Columns_row = lines_table.get (riadok) .findElements (By.tagName ("td"));// Ak chcete vypočítať počet stĺpcov (buniek). V tom konkrétnom riadku.int columns_count = Columns_row.size ();System.out.println ("Počet buniek v riadku" + riadok + "sú" + stĺpce_počet);// Smyčka sa vykoná až do poslednej bunky v danom konkrétnom riadku.pre (int stĺpec = 0; stĺpec Vysvetlenie kódu:
- Rows_count udáva celkový počet riadkov
- pre každý riadok dostaneme celkový počet stĺpcov pomocou lines_table.get (riadok) .findElements (By.tagName ("td"));
- Opakujeme každý stĺpec a každý riadok a načítame hodnoty.
Výstup :
Zhrnutie
- By.xpath () sa bežne používa na prístup k prvkom tabuľky.
- Statické webové tabuľky v seléne sú svojou povahou konzistentné. tj majú pevný počet riadkov a tiež údaje bunky.
- Dynamické webové tabuľky sú nekonzistentné, tj. Nemajú stanovený počet údajov o riadkoch a bunkách.
- Pomocou webového ovládača selénu môžeme ľahko zvládnuť dynamické webové tabuľky.
- Selenium Webdriver nám umožňuje prístup k dynamickým webovým tabuľkám pomocou ich cesty X.
Článkom prispieva Kanchan Kulkarni.