Håndtering af dynamiske webtabeller ved hjælp af Selen WebDriver

Indholdsfortegnelse:

Anonim

Der er to typer HTML-tabeller offentliggjort på internettet-

  1. Statiske tabeller : Data er statiske, dvs. antal rækker og kolonner er faste.
  2. Dynamiske tabeller : Data er dynamiske, dvs. antal rækker og kolonner er IKKE faste.

Nu vil vi lære at håndtere dynamisk tabel i selen:

Nedenfor er et eksempel på en dynamisk webtabel i Selenium for Sales. Baseret på inputdatofiltre ændres antallet af rækker. Så det er dynamisk.

Håndtering af statisk tabel er let, men håndtering af dynamiske tabeller i Selen er lidt vanskeligt, da rækker og kolonner ikke er konstante.

I denne vejledning lærer du-

  • Brug af X-Path til at finde webtabelelementer
  • Eksempel: Hent antallet af rækker og kolonner fra Dynamic WebTable
  • Eksempel: Hent celleværdi for en bestemt række og kolonne i den dynamiske tabel
  • Eksempel: Få maksimalt af alle værdier i en kolonne med dynamisk tabel
  • Eksempel: Få alle værdierne i en dynamisk tabel

Brug af X-Path til at finde webtabelelementer

Før vi finder webelementet, lad os først forstå-

Hvad er et webelement?

Web elementer er intet andet end HTML elementer som tekstboks, dropdowns radioknapper, indsende knapper, etc. Disse HTML-elementer skrives med starten tag og ender med en ende tag.

For eksempel,

Mit første HTML-dokument

.

Trin til at få X-sti af webelement, som vi vil finde.

Trin 1) I Chrome skal du gå til http://demo.guru99.com/test/web-table-element.php

Trin 2) Højreklik på webelement, hvis x-sti skal hentes. I vores tilfælde skal du højreklikke på "Firma" Vælg inspektionsmulighed. Følgende skærmbillede vises -

Trin 3) Højreklik på det fremhævede webelement> Vælg Kopi -> Kopier x-sti-indstilling.

Trin 4) Brug den kopierede X-sti "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" i Selenium WebDriver til at finde elementet.

Eksempel: Hent antallet af rækker og kolonner fra Dynamic WebTable

Mens dynamisk håndtering af webtabeller i Selen kan vi ikke forudsige antallet af rækker og kolonner.

Ved hjælp af Selenium webdriver kan vi finde

  • Antal rækker og kolonner i webtabellen i selen
  • X-række eller Y-kolonnens data.

Nedenfor er et program til hentning af det samlede antal rækker og kolonner til håndtering af webtabellen i Selen:

importere java.text.ParseException;importere java.util.List;importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;offentlig klasse Noofrowsandcols {offentlig statisk ugyldig hoved (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 ("Antal cols er: + col.size ());// Antal rækkerListe  rækker = wd.findElements (By.xpath (".//* ** @ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Antal rækker er: + rækker.størrelse ()); wd.close (); }}  

Kode Forklaring:

  • Her har vi først erklæret Web Driver-objekt "wd" og initialiseret det til chrome driver.
  • Vi bruger Liste til det samlede antal kolonner i "col".
  • findElements-kommandoer returnerer en liste over ALLE elementer, der matcher den angivne lokaliseringsenhed
  • ved hjælp af findElements og X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th får vi alle kolonnerne
  • På samme måde gentager vi processen for rækker.

Produktion:

Eksempel: Hent celleværdi for en bestemt række og kolonne i den dynamiske tabel

Lad os antage, at vi har brug for tredje række i tabellen og dens anden celles data. Se tabellen nedenfor-

I ovenstående tabel opdateres data regelmæssigt efter et stykke tid. De data, du prøver at hente, adskiller sig fra ovenstående skærmbillede. Koden forbliver dog den samme. Her er prøven program til at få den 3 rd række og 2 nd kolonne data.

importere java.text.ParseException;importere java.util.List;importer 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;offentlig klasse RowandCell {offentlig statisk ugyldig hoved (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 ("tabel"));// For at finde tredje række af tabellenWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));Streng rowtext = tableRow.getText ();System.out.println ("Tredje række i tabel: + rækketekst);// for at få 3. række 2. kolonnedataWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));Streng valueIneed = cellIneed.getText ();System.out.println ("Celleværdi er: + værdiIneed);wd.close ();}}

Kode Forklaring:

  • Tabellen er placeret ved hjælp af lokaliseringsegenskaben "tagname".
  • Brug XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]" til at finde den tredje række og får sin tekst ved hjælp af getText () -funktionen
  • Brug XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / TD [2]" find den 2. celle i 3 rd række og får sin tekst ved hjælp Gettext () funktion

Output :

Eksempel: Få maksimalt af alle værdier i en kolonne med dynamisk tabel

I dette eksempel får vi det maksimale af alle værdier i en bestemt kolonne.

Se følgende tabel -

Her er koden

importere java.text.ParseException;importere java.util.List;importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;importere java.text.NumberFormat;offentlig klasse MaxFromTable {offentlig statisk ugyldig hoved (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");String max;dobbelt m = 0, r = 0;//Ingen. af kolonnerListe  col = wd.findElements (By.xpath (".//* ** @ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Samlet antal kolonner er: + col.størrelse ());// Antal rækkerListe  rækker = wd.findElements (By.xpath (".//*[@id='leftcontainer'] / tabel / kropp / tr /td [1]")); System.out.println ("Samlet antal rækker er: + rækker.størrelse ()); for (int i = 1; i  r) {r = m; }} System.out.println ("Maksimal aktuel pris er: + r); }}  

Kode Forklaring:

  • Ved hjælp af kromdriver finder vi webtabellen og får det samlede antal rækker ved hjælp af XPath ".//*[@id='leftcontainer'92/table/tbody/tr/td [1]"
  • Ved hjælp af for loop gentager vi det samlede antal rækker og henter værdier en efter en. For at få næste række bruger vi (i + 1) i XPath
  • Vi sammenligner gammel værdi med ny værdi, og maksimal værdi udskrives i slutningen af ​​for loop

Produktion

Eksempel: Få alle værdierne i en dynamisk tabel

Overvej følgende tabel http://demo.guru99.com/test/table.html

Antallet af kolonner for hver række er forskelligt.

Her har række nummer 1, 2 og 4 3 celler, og række nummer 3 har 2 celler, og række nummer 5 har 1 celle.

Vi er nødt til at få værdier for alle cellerne

Her er koden:

importere java.text.ParseException;importere java.util.List;importer 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;offentlig klasse NofRowsColmns {offentlig statisk ugyldig hoved (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 at finde bord.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// At finde række af tabel.Liste  rows_table = mytable.findElements (By.tagName ("tr"));// At beregne antal rækker i tabel.int rows_count = rows_table.size ();// Loop udføres indtil den sidste række i tabellen.for (int række = 0; række  Columns_row = rows_table.get (række) .findElements (By.tagName ("td"));// At beregne antal kolonner (celler). I den specifikke række.int columns_count = Columns_row.size ();System.out.println ("Antal celler i række" + række + "er" + kolonnetal);// Loop udføres indtil den sidste celle i den specifikke række.for (int kolonne = 0; kolonne 

Kode Forklaring:

  • rows_count giver det samlede antal rækker
  • for hver række får vi det samlede antal kolonner ved hjælp af rows_table.get (række) .findElements (By.tagName ("td"));
  • Vi gentager hver kolonne og hver række og henter værdier.

Output :

Resumé

  • By.xpath () bruges ofte til at få adgang til tabelelementer.
  • Statiske webtabeller i selen er ensartede. dvs. de har et fast antal rækker samt celledata.
  • Dynamiske webtabeller er inkonsekvente, dvs. de har ikke et fast antal rækker og celledata.
  • Ved hjælp af selen webdriver kan vi nemt håndtere dynamiske webtabeller.
  • Selenium Webdriver giver os adgang til dynamiske webtabeller via deres X-sti

Artiklen er bidraget af Kanchan Kulkarni.