Hantering av dynamiska webbtabeller med Selenium WebDriver

Innehållsförteckning:

Anonim

Det finns två typer av HTML-tabeller som publiceras på webben

  1. Statiska tabeller : Data är statiska, dvs. antalet rader och kolumner är fasta.
  2. Dynamiska tabeller : Data är dynamiska, dvs Antal rader och kolumner är INTE fasta.

Nu kommer vi att lära oss hur man hanterar dynamisk tabell i Selen:

Nedan följer ett exempel på en dynamisk webbtabell i Selenium for Sales. Baserat på inmatningsdatofilter ändras antalet rader. Så det är dynamiskt till sin natur.

Det är enkelt att hantera statisk tabell, men att hantera dynamiska tabeller i Selen är lite svårt eftersom rader och kolumner inte är konstanta.

I den här handledningen lär du dig-

  • Använda X-Path för att hitta webbtabellelement
  • Exempel: Hämta antal rader och kolumner från Dynamic WebTable
  • Exempel: Hämta cellvärde för en viss rad och kolumn i den dynamiska tabellen
  • Exempel: Få maximalt av alla värden i en kolumn i dynamisk tabell
  • Exempel: Hämta alla värden i en dynamisk tabell

Använda X-Path för att hitta webbtabellelement

Innan vi hittar webbelement, låt oss först förstå-

Vad är ett webbelement?

Banelement är ingenting annat än HTML-element som textrutan, menyerna radioknappar, lämna knappar, etc. Dessa HTML-element är skrivna med start tagg och slutar med en sluttagg.

Till exempel,

Mitt första HTML-dokument

.

Steg för att få X-path för webbelement som vi vill hitta.

Steg 1) Gå till http://demo.guru99.com/test/web-table-element.php i Chrome

Steg 2) Högerklicka på webbelement vars x-sökväg ska hämtas. I vårt fall högerklickar du på "Företag" Välj Inspektera alternativ. Följande skärm visas -

Steg 3) Högerklicka på markerat webbelement> Välj Kopiera -> Kopiera x-sökvägsalternativ.

Steg 4) Använd den kopierade X-sökvägen "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" i Selenium WebDriver för att hitta elementet.

Exempel: Hämta antal rader och kolumner från Dynamic WebTable

Medan dynamisk hantering av webbtabeller i Selen kan vi inte förutsäga antalet rader och kolumner.

Med hjälp av Selen web-drivrutin kan vi hitta

  • Antal rader och kolumner i webbtabellen i Selen
  • X-rad eller Y-kolumnens data.

Nedan följer ett program för att hämta totalt antal rader och kolumner för hantering av webbtabeller i Selen:

importera java.text.ParseException;importera java.util.List;importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.WebElement;importera org.openqa.selenium.chrome.ChromeDriver;offentlig klass Noofrowsandcols {public static void main (String [] args) kastar 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");//Antal kolumnerLista  col = wd.findElements (By.xpath (".//* ** @ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("Antal kolar är: + kolstorlek ());//Antal raderLista  rader = wd.findElements (By.xpath (".//* ** @ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Antal rader är: + rader.storlek ()); wd.close (); }}  

Kodförklaring:

  • Här har vi först förklarat Web Driver-objektet "wd" och initierat det till kromdrivrutin.
  • Vi använder Lista för totalt antal kolumner i "kol".
  • kommandona findElements returnerar en lista med ALLA element som matchar den angivna sökaren
  • med hjälp av findElements och X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th får vi alla kolumner
  • På samma sätt upprepar vi processen för rader.

Produktion:

Exempel: Hämta cellvärde för en viss rad och kolumn i den dynamiska tabellen

Låt oss anta att vi behöver den tredje raden i tabellen och dess andra celldata. Se tabellen nedan-

I ovanstående tabell uppdateras data regelbundet efter en viss tidsperiod. De data du försöker hämta kommer att skilja sig från ovanstående skärmdump. Koden förblir dock densamma. Här är exempelprogram för att få den tredje raden och andra kolumnens data.

importera java.text.ParseException;importera java.util.List;importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.WebElement;importera org.openqa.selenium.chrome.ChromeDriver;importera java.util.concurrent.TimeUnit;offentlig klass RowandCell {public static void main (String [] args) kastar 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 bastabell = wd.findElement (By.tagName ("tabell"));// För att hitta tredje raden i tabellenWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));Strängradtext = tableRow.getText ();System.out.println ("Tredje raden i tabellen: + radtext);// för att få tredje radens andra kolumndataWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));Sträng valueIneed = cellIneed.getText ();System.out.println ("Cellvärde är: + valueIneed);wd.close ();}}

Kodförklaring:

  • Tabellen placeras med hjälp av lokaliseringsegenskapen "tagname".
  • Använd XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]" för att hitta den tredje raden och få sin text med funktionen getText ()
  • Använd Xpath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]" hitta den andra cellen i tredje raden och få sin text med funktionen getText ()

Utgång :

Exempel: Få maximalt av alla värden i en kolumn i dynamisk tabell

I det här exemplet får vi maximalt av alla värden i en viss kolumn.

Se följande tabell -

Här är koden

importera java.text.ParseException;importera java.util.List;importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.WebElement;importera org.openqa.selenium.chrome.ChromeDriver;importera java.text.NumberFormat;offentlig klass MaxFromTable {public static void main (String [] args) kastar 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");Sträng max;dubbel m = 0, r = 0;//Nej. av kolumnerLista  col = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Totalt antal kolumner är: + kol.storlek ());//Antal raderLista  rader = wd.findElements (By.xpath (".//*(@id='leftcontainer' ]/table/tbody/tr/td [1]"); System.out.println ("Totalt antal rader är: + rader.storlek ()); för (int i = 1; i  r) {r = m; }} System.out.println ("Maximalt aktuellt pris är: + r); }}  

Kodförklaring:

  • Med hjälp av kromdrivrutin hittar vi webbtabellen och får totalt antal rader med XPath ".//* [@ id ='leftcontainer'] / tabell / kropp / tr / td [1]"
  • Med hjälp av for loop upprepar vi det totala antalet rader och hämtar värden en efter en. För att få nästa rad använder vi (i + 1) i XPath
  • Vi jämför gammalt värde med nytt värde och maximalt värde skrivs ut i slutet av for loop

Produktion

Exempel: Hämta alla värden i en dynamisk tabell

Tänk på följande tabell http://demo.guru99.com/test/table.html

Antalet kolumner för varje rad är olika.

Här har rad 1, 2 och 4 tre celler och rad nummer 3 har 2 celler och rad nummer 5 har 1 cell.

Vi måste få värden på alla celler

Här är koden:

importera java.text.ParseException;importera java.util.List;importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.WebElement;importera java.util.concurrent.TimeUnit;importera org.openqa.selenium.chrome.ChromeDriver;offentlig klass NofRowsColmns {public static void main (String [] args) kastar 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");// Att hitta tabell.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// För att hitta tabellrader.Lista  rows_table = mytable.findElements (By.tagName ("tr"));// För att beräkna antalet rader i tabellen.int rader_räkning = rader_tabell.storlek ();// Loop kommer att köras till den sista raden i tabellen.för (intrad = 0; rad  Columns_row = rows_table.get (row) .findElements (By.tagName ("td"));// För att beräkna antalet kolumner (celler). I den specifika raden.int columns_count = Columns_row.size ();System.out.println ("Antal celler i rad" + rad + "är" + kolumner);// Loop kommer att köras till den sista cellen i den specifika raden.för (int kolumn = 0; kolumn 

Kodförklaring:

  • rader_antal ger det totala antalet rader
  • för varje rad får vi det totala antalet kolumner med hjälp av rows_table.get (row) .findElements (By.tagName ("td"));
  • Vi itererar genom varje kolumn och i varje rad och hämtar värden.

Utgång :

Sammanfattning

  • By.xpath () används ofta för att komma åt tabellelement.
  • Statiska webbtabeller i Selen är konsekventa till sin natur. dvs de har fast antal rader samt celldata.
  • Dynamiska webbtabeller är inkonsekventa, dvs. de har inte ett fast antal rader och celldata.
  • Med selen webbdrivrutin kan vi enkelt hantera dynamiska webbtabeller.
  • Selenium Webdriver tillåter oss att komma åt dynamiska webbtabeller via deras X-sökväg

Artikeln har bidragit av Kanchan Kulkarni.