Er zijn twee soorten HTML-tabellen die op internet worden gepubliceerd:
- Statische tabellen : de gegevens zijn statisch, dwz het aantal rijen en kolommen staat vast.
- Dynamische tabellen : de gegevens zijn dynamisch, dwz het aantal rijen en kolommen staat NIET vast.
Nu zullen we leren omgaan met dynamische tafels in Selenium:
Hieronder ziet u een voorbeeld van een dynamische webtabel in Selenium for Sales. Op basis van invoerdatumfilters wordt het aantal rijen gewijzigd. Het is dus dynamisch van aard.
Het omgaan met statische tabellen is eenvoudig, maar het omgaan met dynamische tabellen in Selenium is een beetje moeilijk omdat rijen en kolommen niet constant zijn.
In deze tutorial leer je-
- X-Path gebruiken om webtabelelementen te lokaliseren
- Voorbeeld: haal het aantal rijen en kolommen op uit Dynamic WebTable
- Voorbeeld: haal de celwaarde op van een bepaalde rij en kolom van de dynamische tabel
- Voorbeeld: verkrijg het maximum van alle waarden in een kolom met een dynamische tabel
- Voorbeeld: haal alle waarden van een dynamische tabel op
X-Path gebruiken om webtabelelementen te lokaliseren
Voordat we het webelement vinden, moeten we eerst begrijpen:
Wat is een webelement?
Web elementen zijn niets anders dan HTML elementen zoals tekstvak, dropdowns radio knoppen, in te dienen knoppen, etc. Deze HTML-elementen zijn geschreven met start -tag en eindigt met een eind tag.
Bijvoorbeeld,
Mijn eerste HTML-document
.Stappen voor het verkrijgen van het X-pad van het webelement dat we willen lokaliseren.
Stap 1) Ga in Chrome naar http://demo.guru99.com/test/web-table-element.php
Stap 2) Klik met de rechtermuisknop op het webelement waarvan het x-pad moet worden opgehaald. Klik in ons geval met de rechtermuisknop op "Bedrijf" Selecteer de optie Inspecteren. Het volgende scherm wordt getoond -
Stap 3) Klik met de rechtermuisknop op het gemarkeerde webelement> Selecteer Kopiëren -> Kopieer x-pad-optie.
Stap 4) Gebruik het gekopieerde X-pad "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" in Selenium WebDriver om het element te lokaliseren.
Voorbeeld: haal het aantal rijen en kolommen op uit Dynamic WebTable
Hoewel dynamische verwerking van webtabellen in Selenium, kunnen we het aantal rijen en kolommen niet voorspellen.
Met behulp van Selenium-webstuurprogramma kunnen we vinden
- Aantal rijen en kolommen van webtabel in Selenium
- Gegevens van de X-rij of de Y-kolom.
Hieronder staat een programma voor het ophalen van het totale aantal rijen en kolommen voor het afhandelen van webtabellen in Selenium:
importeer java.text.ParseException;importeer java.util.List;import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.chrome.ChromeDriver;openbare klasse Noofrowsandcols {public static void main (String [] args) gooit ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nieuwe ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");//Aantal kolommenLijstcol = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("Aantal cols zijn: + col.size ());//Aantal rijenLijst rijen = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Aantal rijen is: + rijen.size ()); wd.close ();
Code Verklaring:
- Hier hebben we eerst het Web Driver-object "wd" gedeclareerd en het geïnitialiseerd naar de Chrome-driver.
- We gebruiken List
om het totale aantal kolommen in "col" te geven. - findElements-opdrachten retourneren een lijst met ALLE elementen die overeenkomen met de opgegeven locator
- met behulp van findElements en X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th krijgen we alle kolommen
- Evenzo herhalen we het proces voor rijen.
Uitgang:
Voorbeeld: haal de celwaarde op van een bepaalde rij en kolom van de dynamische tabel
Laten we aannemen dat we de derde rij van de tabel en de gegevens van de tweede cel nodig hebben. Zie onderstaande tabel
In bovenstaande tabel worden de gegevens na verloop van tijd regelmatig bijgewerkt. De gegevens die u probeert op te halen, zullen verschillen van de bovenstaande schermafbeelding. De code blijft echter hetzelfde. Hier is een voorbeeldprogramma om de gegevens van de 3 e rij en 2 e kolom te krijgen.
importeer java.text.ParseException;importeer java.util.List;import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.chrome.ChromeDriver;importeer java.util.concurrent.TimeUnit;openbare klasse RowandCell {public static void main (String [] args) gooit ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nieuwe ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");wd.manage (). time-outs (). implicitlyWait (20, TimeUnit.SECONDS);WebElement baseTable = wd.findElement (By.tagName ("tabel"));// Om de derde rij met tabellen te vindenWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));String rowtext = tableRow.getText ();System.out.println ("Derde rij tabel: + rowtext);// om de 2e kolomgegevens van de 3e rij te krijgenWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));String valueIneed = cellIneed.getText ();System.out.println ("Celwaarde is: + valueIneed);wd.close ();
Code Verklaring:
- De tabel wordt gevonden met behulp van de locator-eigenschap "tagname".
- Gebruik XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]" vind de 3 e rij en krijgt de tekst gebruikt getText () -functie
- Gebruik Xpath "// * [@ id = \" leftcontainer \ "] / table tbody / tr [3] / td [2] /" vind de 2 cel 3 e rij en krijgt de tekst gebruikt getText () -functie
Uitgang :
Voorbeeld: verkrijg het maximum van alle waarden in een kolom met een dynamische tabel
In dit voorbeeld krijgen we het maximum van alle waarden in een bepaalde kolom.
Raadpleeg de volgende tabel -
Hier is de code
importeer java.text.ParseException;importeer java.util.List;import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.chrome.ChromeDriver;importeer java.text.NumberFormat;openbare klasse MaxFromTable {public static void main (String [] args) gooit ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nieuwe ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");String max;dubbele m = 0, r = 0;//Nee. van kolommenLijstcol = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Totaal aantal kolommen zijn: + col.size ());//Aantal rijenLijst rijen = wd.findElements (By.xpath (".//*[@id='leftcontainer'[/table/tbody/tr/td[1]")); System.out.println ("Totaal aantal rijen zijn: + rijen.size ()); for (int i = 1; i r) {r = m; }} System.out.println ("Maximale huidige prijs is: + r);
Code Verklaring:
- Met behulp van de Chrome-driver vinden we de webtabel en krijgen we het totale aantal rijen met XPath ".//*[@id='leftcontainer'[1]"
- Door de for-lus te gebruiken, doorlopen we het totale aantal rijen en halen we de waarden één voor één op. Om de volgende rij te krijgen, gebruiken we (i + 1) in XPath
- We vergelijken de oude waarde met de nieuwe waarde en de maximale waarde wordt aan het einde van de for-lus afgedrukt
Uitvoer
Voorbeeld: haal alle waarden van een dynamische tabel op
Beschouw de volgende tabel http://demo.guru99.com/test/table.html
Het aantal kolommen voor elke rij is verschillend.
Hier hebben rij nummer 1, 2 en 4 3 cellen, en rij nummer 3 heeft 2 cellen en rij nummer 5 heeft 1 cel.
We moeten waarden van alle cellen krijgen
Hier is de code:
importeer java.text.ParseException;importeer java.util.List;import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer java.util.concurrent.TimeUnit;importeer org.openqa.selenium.chrome.ChromeDriver;openbare klasse NofRowsColmns {public static void main (String [] args) gooit ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nieuwe ChromeDriver ();wd.manage (). time-outs (). implicitlyWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// Om tafel te vinden.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// Om rijen met tabellen te lokaliseren.Lijstrijen_table = mytable.findElements (By.tagName ("tr"));// Om het aantal rijen in de tabel te berekenen.int rijen_count = rijen_tabel.size ();// Loop wordt uitgevoerd tot de laatste rij van de tabel.voor (int rij = 0; rij Columns_row = rijen_tabel.get (rij) .findElements (By.tagName ("td"));// Om het aantal kolommen (cellen) te berekenen. In die specifieke rij.int columns_count = Columns_row.size ();System.out.println ("Aantal cellen in rij" + rij + "zijn" + kolommen_telling);// Loop wordt uitgevoerd tot de laatste cel van die specifieke rij.for (int column = 0; column Code Verklaring:
- rijen_telling geeft het totale aantal rijen
- voor elke rij krijgen we het totale aantal kolommen met rijen_tabel.get (rij) .findElements (By.tagName ("td"));
- We doorlopen elke kolom en van elke rij en halen waarden op.
Uitgang :
Overzicht
- By.xpath () wordt vaak gebruikt om toegang te krijgen tot tabelelementen.
- Statische webtabellen in Selenium zijn consistent van aard. dwz ze hebben een vast aantal rijen en celgegevens.
- Dynamische webtabellen zijn inconsistent, dwz ze hebben geen vast aantal rijen en celdata.
- Met behulp van selenium-webstuurprogramma kunnen we gemakkelijk dynamische webtabellen verwerken.
- Met Selenium Webdriver hebben we toegang tot dynamische webtabellen via hun X-pad
Het artikel is bijgedragen door Kanchan Kulkarni.