Det er to typer HTML-tabeller publisert på nettet -
- Statiske tabeller : Data er statiske, dvs. antall rader og kolonner er faste.
- Dynamiske tabeller : Data er dynamiske, dvs. antall rader og kolonner er IKKE faste.
Nå skal vi lære å håndtere dynamisk bord i Selen:
Nedenfor er et eksempel på et dynamisk nettbord i Selenium for Sales. Basert på inndatafilter, endres antall rader. Så det er dynamisk i naturen.
Det er enkelt å håndtere statiske tabeller, men å håndtere dynamiske tabeller i Selen er litt vanskelig ettersom rader og kolonner ikke er konstante.
I denne veiledningen vil du lære-
- Bruke X-Path for å finne nettbordselementer
- Eksempel: Hent antall rader og kolonner fra Dynamic WebTable
- Eksempel: Hent celleverdien til en bestemt rad og kolonne i den dynamiske tabellen
- Eksempel: Få maksimalt alle verdiene i en kolonne med dynamisk tabell
- Eksempel: Få alle verdiene til en dynamisk tabell
Bruke X-Path for å finne nettbordselementer
Før vi finner webelement, la oss først forstå-
Hva er et webelement?
Web-elementer er ikke annet enn HTML-elementer som tekstboks, rullegardinmenyene radioknapper, sende knapper, etc. Disse HTML-elementer er skrevet med start tag og slutter med en slutt tag.
For eksempel,
Mitt første HTML-dokument
.Fremgangsmåte for å få X-banen til webelementet som vi vil finne.
Trinn 1) I Chrome, gå til http://demo.guru99.com/test/web-table-element.php
Trinn 2) Høyreklikk på webelementet hvis x-bane skal hentes. I vårt tilfelle høyreklikker du på "Company" Velg Inspect-alternativet. Følgende skjermbilde vises -
Trinn 3) Høyreklikk på uthevet webelement> Velg Kopier -> Kopier x-sti-alternativet.
Trinn 4) Bruk den kopierte X-banen "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" i Selenium WebDriver for å finne elementet.
Eksempel: Hent antall rader og kolonner fra Dynamic WebTable
Mens dynamisk håndtering av nettbord i Selen, kan vi ikke forutsi antall rader og kolonner.
Ved hjelp av Selenium webdriver kan vi finne det
- Antall rader og kolonner i nettabellen i Selen
- X-rad eller Y-kolonnens data.
Nedenfor er programmet for å hente totalt antall rader og kolonner for håndtering av nettbord i Selen:
importere java.text.ParseException;importere java.util.List;importer org.openqa.selenium.By;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.WebElement;importer org.openqa.selenium.chrome.ChromeDriver;offentlig klasse Noofrowsandcols {public static void main (String [] args) kaster ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = ny ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");//No.of kolonnerListecol = wd.findElements (By.xpath (".//* ** @ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("Antall cols er: + col.size ());//Antall raderListe rader = wd.findElements (By.xpath (".//* Px@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Antall rader er: + rader.størrelse ()); wd.close (); }}
Kode Forklaring:
- Her har vi først erklært Web Driver-objektet "wd" og initialisert det til kromdriver.
- Vi bruker Liste
til totalt antall kolonner i "kol". - findElements-kommandoer returnerer en liste over ALLE elementene som samsvarer med den angitte locatoren
- ved hjelp av findElements og X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th får vi alle kolonnene
- På samme måte gjentar vi prosessen for rader.
Produksjon:
Eksempel: Hent celleverdien til en bestemt rad og kolonne i den dynamiske tabellen
La oss anta at vi trenger tredje rad i tabellen og den andre cellens data. Se tabellen nedenfor-
I tabellen ovenfor oppdateres data jevnlig etter en periode. Dataene du prøver å hente, vil være forskjellige fra skjermbildet ovenfor. Imidlertid forblir koden den samme. Her er et eksempel på program for å få 3 rd rad og 2 nd kolonne data.
importere java.text.ParseException;importere java.util.List;importer org.openqa.selenium.By;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.WebElement;importer org.openqa.selenium.chrome.ChromeDriver;importere java.util.concurrent.TimeUnit;offentlig klasse RowandCell {public static void main (String [] args) kaster ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = ny ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");wd.manage (). timeouts (). implicitWait (20, TimeUnit.SECONDS);WebElement baseTable = wd.findElement (By.tagName ("tabell"));// For å finne tredje tabellradWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));Streng radtekst = tableRow.getText ();System.out.println ("Tredje rad i tabell: + radtekst);// for å få 3. rad andre kolonnedataWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));Streng valueIneed = cellIneed.getText ();System.out.println ("Celleverdi er: + valueIneed);wd.close ();}}
Kode Forklaring:
- Tabellen er lokalisert ved hjelp av lokaliseringsegenskapen "tagname".
- Ved å bruke XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]", finn den tredje raden og får teksten ved hjelp av getText () -funksjonen
- Bruk Xpath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]" finn den andre cellen i tredje rad og får teksten ved hjelp av getText () -funksjonen
Utgang :
Eksempel: Få maksimalt alle verdiene i en kolonne med dynamisk tabell
I dette eksemplet får vi maksimalt av alle verdier i en bestemt kolonne.
Se følgende tabell -
Her er koden
importere java.text.ParseException;importere java.util.List;importer org.openqa.selenium.By;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.WebElement;importer org.openqa.selenium.chrome.ChromeDriver;importere java.text.NumberFormat;offentlig klasse MaxFromTable {public static void main (String [] args) kaster ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = ny ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");Streng maks;dobbelt m = 0, r = 0;//Nei. av kolonnerListecol = wd.findElements (By.xpath (".//* ** @ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Totalt antall kolonner er: + kol.størrelse ());//Antall raderListe rader = wd.findElements (By.xpath (".//*[@id='leftcontainer' ]/table/tbody/tr/td [1]"); System.out.println ("Totalt antall rader er: + rader.størrelse ()); for (int i = 1; i r) {r = m; }} System.out.println ("Maksimal gjeldende pris er: + r); }}
Kode Forklaring:
- Ved hjelp av kromdriver finner vi nettabellen og får totalt antall rader ved hjelp av XPath ".//* Px@id='leftcontainer' ]/table/tbody/tr/td [1]"
- Ved hjelp av for loop gjentas vi gjennom totalt antall rader og henter verdier en etter en. For å få neste rad bruker vi (i + 1) i XPath
- Vi sammenligner gammel verdi med ny verdi, og maksimal verdi skrives ut på slutten av for loop
Produksjon
Eksempel: Få alle verdiene til en dynamisk tabell
Vurder følgende tabell http://demo.guru99.com/test/table.html
Antall kolonner for hver rad er forskjellig.
Her har rad nummer 1, 2 og 4 3 celler, og rad nummer 3 har 2 celler, og rad nummer 5 har 1 celle.
Vi må få verdier av alle cellene
Her er koden:
importere java.text.ParseException;importere java.util.List;importer org.openqa.selenium.By;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.WebElement;importere java.util.concurrent.TimeUnit;importer org.openqa.selenium.chrome.ChromeDriver;offentlig klasse NofRowsColmns {public static void main (String [] args) kaster ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = ny ChromeDriver ();wd.manage (). timeouts (). implicitWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// For å finne bord.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// For å finne tabellrader.Listerows_table = mytable.findElements (By.tagName ("tr"));// For å beregne antall rader i tabellen.int rows_count = rows_table.size ();// Loop kjøres til siste tabellrad.for (int rad = 0; rad Columns_row = rows_table.get (row) .findElements (By.tagName ("td"));// For å beregne antall kolonner (celler). I den spesifikke raden.int columns_count = Columns_row.size ();System.out.println ("Antall celler i rad" + rad + "er" + kolonnetall);// Loop vil kjøres til den siste cellen i den spesifikke raden.for (int kolonne = 0; kolonne Kode Forklaring:
- rader_telling gir totalt antall rader
- for hver rad får vi totalt antall kolonner ved hjelp av rows_table.get (row) .findElements (By.tagName ("td"));
- Vi gjentar gjennom hver kolonne og hver rad og henter verdier.
Utgang :
Sammendrag
- By.xpath () brukes ofte til å få tilgang til tabellelementer.
- Statiske nettbord i Selen er konsistente. dvs. de har et fast antall rader i tillegg til celledata.
- Dynamiske nettabeller er inkonsekvente, dvs. de har ikke et fast antall rader og celledata.
- Ved hjelp av selen webdriver kan vi enkelt håndtere dynamiske nettabeller.
- Selenium Webdriver gir oss tilgang til dynamiske nettabeller ved hjelp av X-banen
Artikkelen er bidratt av Kanchan Kulkarni.