Kuinka käsitellä dynaamisia verkkotaulukoita Selenium
Verkkotaulukko sisään Selenium
Verkossa on julkaistu kahdenlaisia HTML-taulukoita.
- Staattiset taulukot: Tiedot ovat staattisia eli rivien ja sarakkeiden määrä on kiinteä.
- Dynaamiset taulukot: Tiedot ovat dynaamisia eli rivien ja sarakkeiden lukumäärä EI ole kiinteä.
Kuinka käsitellä dynaamista taulukkoa Selenium
Alla on esimerkki dynaamisesta verkkotaulukosta Selenium myynnissä. Syöttöpäivämääräsuodattimien perusteella rivien lukumäärää muutetaan. Se on siis luonteeltaan dynaaminen.
Staattisen taulukon käsittely on helppoa, mutta dynaamisten taulukoiden käsittely sisään Selenium on hieman vaikeaa, koska rivit ja sarakkeet eivät ole vakioita.
X-Pathin käyttäminen Web-taulukkoelementtien paikantamiseen
Ennen kuin löydämme verkkoelementin, ymmärrämme ensin -
Mikä on verkkoelementti?
Verkkoelementit eivät ole mitään muuta kuin HTML-elementtejä, kuten tekstilaatikko, avattavat valintanapit, lähetyspainikkeet jne. Nämä HTML-elementit on kirjoitettu Alkaa -tunniste ja päättyy an loppu tunnisteita.
Esimerkiksi,
Ensimmäinen HTML-dokumenttini.
Vaiheet etsittävän verkkoelementin X-polun löytämiseksi.
Vaihe 1) Siirry Chromessa osoitteeseen https://demo.guru99.com/test/web-table-element.php
Vaihe 2) Napsauta hiiren kakkospainikkeella verkkoelementtiä, jonka x-polku haetaan. Meidän tapauksessamme napsauta hiiren kakkospainikkeella "Yritys" Valitse Tarkista vaihtoehto. Seuraava näyttö tulee näkyviin -
Vaihe 3) Napsauta korostettua verkkoelementtiä hiiren kakkospainikkeella > Valitse Kopioi -> Kopioi x-polku.
Vaihe 4) Käytä kopioitua X-polkua "//*[@id="leftcontainer"]/table/thead/tr/th [1] Selenium WebDriver elementin paikallistamiseksi.
Esimerkki: Hae rivien ja sarakkeiden lukumäärä Dynamic WebTable -taulukosta
Dynaamisen verkkotaulukon käsittelyn aikana Selenium, emme voi ennustaa sen rivien ja sarakkeiden määrää.
Käyttäminen Selenium web-ajuri, voimme löytää
- Verkkotaulukon rivien ja sarakkeiden määrä Selenium
- X-rivin tai Y-sarakkeen tiedot.
Alla on ohjelma rivien ja sarakkeiden kokonaismäärän hakemiseksi verkkotaulukon käsittelyä varten Selenium:
import java.text.ParseException; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Noofrowsandcols { public static void main(String[] args) throws ParseException { WebDriver wd; System.setProperty("webdriver.chrome.driver","G://chromedriver.exe"); wd= new ChromeDriver(); wd.get("https://demo.guru99.com/test/web-table-element.php"); //No.of Columns List <webelement> col = wd.findElements(By.xpath(".//*[@id=\"leftcontainer\"]/table/thead/tr/th")); System.out.println("No of cols are : " +col.size()); //No.of rows List <webelement> rows = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println("No of rows are : " + rows.size()); wd.close(); } }
Koodin selitys:
- Tässä olemme ensin ilmoittaneet Web Driver -objektiksi "wd" & alustaneet sen kromiohjaimeksi.
- Käytämme listaa sarakkeiden kokonaismäärään sarakkeessa.
- findElements-komennot palauttaa luettelon KAIKISTA määritettyä paikanninta vastaavista elementeistä
- käyttämällä findElements- ja X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th saamme kaikki sarakkeet
- Samalla tavalla toistamme prosessin riveille.
lähtö:
Esimerkki: Hae dynaamisen taulukon tietyn rivin ja sarakkeen soluarvo
Oletetaan, että tarvitsemme 3rd taulukon rivi ja sen toisen solun tiedot. Katso alla oleva taulukko -
Yllä olevassa taulukossa tietoja päivitetään säännöllisesti jonkin ajan kuluttua. Tiedot, joita yrität hakea, eroavat yllä olevasta kuvakaappauksesta. Koodi pysyy kuitenkin samana. Tässä on esimerkkiohjelma 3rd rivi ja 2nd sarakkeen tiedot.
import java.text.ParseException; import java.util.List; import 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; public class RowandCell { public static void main(String[] args) throws ParseException { WebDriver wd; System.setProperty("webdriver.chrome.driver","G://chromedriver.exe"); wd= new ChromeDriver(); wd.get("https://demo.guru99.com/test/web-table-element.php"); wd.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); WebElement baseTable = wd.findElement(By.tagName("table")); //To find third row of table WebElement tableRow = baseTable.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]")); String rowtext = tableRow.getText(); System.out.println("Third row of table : "+rowtext); //to get 3rd row's 2nd column data WebElement cellIneed = tableRow.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]/td[2]")); String valueIneed = cellIneed.getText(); System.out.println("Cell value is : " + valueIneed); wd.close(); } }
Koodin selitys:
- Taulukko sijoitetaan käyttämällä paikannusominaisuutta "tagname".
- Käyttäminen XPath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” etsi 3rd riville ja saa sen tekstin getText () -funktiolla
- Etsi Xpath:n avulla "//*[@id=\"leftcontainer\”]/table/tbody/tr[3]/td[2] 2:n toinen solurd riville ja saa sen tekstin getText () -funktiolla
ulostulo:
Esimerkki: Hanki enimmäisarvo kaikista dynaamisen taulukon sarakkeen arvoista
Tässä esimerkissä saamme suurimman osan kaikista arvoista tietyssä sarakkeessa.
Katso seuraava taulukko -
Tässä on koodi
import java.text.ParseException; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import java.text.NumberFormat; public class MaxFromTable { public static void main(String[] args) throws ParseException { WebDriver wd; System.setProperty("webdriver.chrome.driver","G://chromedriver.exe"); wd= new ChromeDriver(); wd.get("https://demo.guru99.com/test/web-table-element.php"); String max; double m=0,r=0; //No. of Columns List <webelement> col = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/thead/tr/th")); System.out.println("Total No of columns are : " +col.size()); //No.of rows List <webelement> rows = wd.findElements(By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println("Total No of rows are : " + rows.size()); for (int i =1;i<rows.size();i++) { max= wd.findElement(By.xpath("html/body/div[1]/div[5]/table/tbody/tr[" + (i+1)+ "]/td[4]")).getText(); NumberFormat f =NumberFormat.getNumberInstance(); Number num = f.parse(max); max = num.toString(); m = Double.parseDouble(max); if(m>r) { r=m; } } System.out.println("Maximum current price is : "+ r); } } </webelement></webelement>
Koodin selitys:
- Chrome-ohjaimen avulla paikannamme verkkotaulukon ja saamme rivien kokonaismäärän käyttämällä XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
- For-silmukan avulla iteroimme rivien kokonaismäärän ja haemme arvot yksitellen. Saadaksesi seuraavan rivin käytämme XPathissa (i+1).
- Vertaamme vanhaa arvoa uuteen arvoon ja maksimiarvo tulostetaan for-silmukan loppuun
ulostulo
Esimerkki: Hanki kaikki dynaamisen taulukon arvot
Tarkastellaan seuraavaa taulukkoa: https://demo.guru99.com/test/table.html
Jokaisen rivin sarakkeiden määrä on erilainen.
Tässä riveillä 1, 2 ja 4 on 3 solua, ja rivillä 3 on 2 solua ja rivillä 5 on 1 solu.
Meidän on saatava kaikkien solujen arvot
Tässä on koodi:
import java.text.ParseException; import java.util.List; import 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; public class NofRowsColmns { public static void main(String[] args) throws ParseException { WebDriver wd; System.setProperty("webdriver.chrome.driver","G://chromedriver.exe"); wd = new ChromeDriver(); wd.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); wd.get("https://demo.guru99.com/test/table.html"); //To locate table. WebElement mytable = wd.findElement(By.xpath("/html/body/table/tbody")); //To locate rows of table. List < WebElement > rows_table = mytable.findElements(By.tagName("tr")); //To calculate no of rows In table. int rows_count = rows_table.size(); //Loop will execute till the last row of table. for (int row = 0; row < rows_count; row++) { //To locate columns(cells) of that specific row. List < WebElement > Columns_row = rows_table.get(row).findElements(By.tagName("td")); //To calculate no of columns (cells). In that specific row. int columns_count = Columns_row.size(); System.out.println("Number of cells In Row " + row + " are " + columns_count); //Loop will execute till the last cell of that specific row. for (int column = 0; column < columns_count; column++) { // To retrieve text from that specific cell. String celtext = Columns_row.get(column).getText(); System.out.println("Cell Value of row number " + row + " and column number " + column + " Is " + celtext); } System.out.println("-------------------------------------------------- "); } } }
Koodin selitys:
- rivien_määrä antaa rivien kokonaismäärän
- jokaiselle riville saamme sarakkeiden kokonaismäärän käyttämällä
rows_table.get(row).findElements(By.tagName("td"));
- Iteroimme jokaisen sarakkeen ja jokaisen rivin läpi ja haemme arvot.
ulostulo:
Yhteenveto
- By.xpath() on yleisesti käytetty taulukkoelementtien käyttämiseen.
- Staattiset verkkotaulukot sisään Selenium ovat luonteeltaan johdonmukaisia. eli niillä on kiinteä määrä rivejä sekä solutietoja.
- Dynaamiset verkkotaulukot ovat epäjohdonmukaisia eli niissä ei ole kiinteää määrää rivejä ja solutietoja.
- Seleeniverkkoajurin avulla voimme käsitellä dynaamisia verkkotaulukoita helposti.
- Selenium Webdriverin avulla voimme käyttää dynaamisia verkkotaulukoita niiden avulla X-polku. Seleenin verkkotaulukon käsittelyn ymmärtäminen on ratkaisevan tärkeää tehokkaan automaatiotestauksen kannalta.