Håndtere dynamiske nettabeller ved hjelp av Selen WebDriver

Innholdsfortegnelse:

Anonim

Det er to typer HTML-tabeller publisert på nettet -

  1. Statiske tabeller : Data er statiske, dvs. antall rader og kolonner er faste.
  2. 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 kolonnerListe  col = 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 kolonnerListe  col = 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.Liste  rows_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.