Kako rukovati dinamičkim web tablicama u Selenium
Web tablica u Selenium
Postoje dvije vrste HTML tablica objavljenih na webu-
- Statičke tablice: Podaci su statični, tj. broj redaka i stupaca je fiksan.
- Dinamičke tablice: Podaci su dinamički, tj. broj redaka i stupaca NISU fiksni.
Kako rukovati dinamičkom tablicom u Selenium
Ispod je primjer dinamičke web tablice u Selenium za prodaju. Na temelju filtera unosa datuma, broj redaka će se promijeniti. Dakle, dinamične je prirode.
Rukovanje statičkom tablicom je jednostavno, ali rukovanje dinamičkom tablicom nije Selenium malo je teško jer redovi i stupci nisu konstantni.
Korištenje X-Path za lociranje elemenata web tablice
Prije nego što lociramo web element, prvo shvatimo -
Što je web element?
Web elementi nisu ništa drugo nego HTML elementi kao što su tekstni okvir, padajući radio gumbi, gumbi za slanje itd. Ovi HTML elementi napisani su s početak oznaku i završava s an kraj oznaka.
Na primjer,
Moj prvi HTML dokument.
Koraci za dobivanje X-puta web elementa koji želimo locirati.
Korak 1) U Chromeu idite na https://demo.guru99.com/test/web-table-element.php
Korak 2) Desni klik na web element čiji x-put treba dohvatiti. U našem slučaju, desnom tipkom miša kliknite "Tvrtka" Odaberite opciju Pregledaj. Prikazat će se sljedeći ekran –
Korak 3) Kliknite desnom tipkom miša na istaknuti web element > Odaberite opciju Kopiraj -> Kopiraj x-put.
Korak 4) Koristite kopirani X-put “//*[@id=”leftcontainer”]/table/thead/tr/th [1]” u Selenium WebDriver za lociranje elementa.
Primjer: Dohvaćanje broja redaka i stupaca iz Dynamic WebTable
Tijekom rukovanja dinamičkom web tablicom Selenium, ne možemo predvidjeti njegov broj redaka i stupaca.
Korištenje Selenium web driver, možemo pronaći
- Broj redaka i stupaca web tablice u Selenium
- Podaci retka X ili stupca Y.
Ispod je program za dohvaćanje ukupnog broja redaka i stupaca za rukovanje web tablicom 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();
}
}
Objašnjenje koda:
- Ovdje smo prvo deklarirali objekt web-pokretača "wd" i inicijalizirali ga u chrome upravljačkom programu.
- Koristimo List na ukupan broj stupaca u “col”.
- Naredba findElements vraća popis SVIH elemenata koji odgovaraju navedenom lokatoru
- koristeći findElements i X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th dobivamo sve stupce
- Slično, ponavljamo postupak za redove.
Izlaz:
Primjer: dohvaćanje vrijednosti ćelije određenog retka i stupca dinamičke tablice
Pretpostavimo da nam treba 3rd retka tablice i podataka njegove druge ćelije. Pogledajte tablicu ispod-
U gornjoj tablici podaci se redovito ažuriraju nakon određenog vremenskog razdoblja. Podaci koje pokušate dohvatiti razlikovat će se od gornje snimke zaslona. Međutim, šifra ostaje ista. Ovdje je primjer programa za dobivanje 3rd redak i 2nd podaci stupca.
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();
}
}
Objašnjenje koda:
- Tablica se nalazi korištenjem svojstva lokatora "tagname".
- Korištenje XPath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” pronađite 3rd redak i dobiva njegov tekst pomoću funkcije getText ().
- Koristeći Xpath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2]” pronađite 2. ćeliju u 3rd redak i dobiva njegov tekst pomoću funkcije getText ().
Izlaz:
Primjer: Dohvatite maksimum svih vrijednosti u stupcu dinamičke tablice
U ovom primjeru dobit ćemo maksimum svih vrijednosti u određenom stupcu.
Pogledajte sljedeću tablicu –
Evo koda
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>
Objašnjenje koda:
- Pomoću chrome upravljačkog programa lociramo web tablicu i dobivamo ukupan broj redaka koristeći XPath “.//*[@id='leftcontainer']/table/tbody/tr/td[1]”
- Koristeći for petlju, ponavljamo kroz ukupan broj redaka i dohvaćamo vrijednosti jednu po jednu. Da bismo dobili sljedeći red koristimo (i+1) u XPath-u
- Uspoređujemo staru vrijednost s novom vrijednošću i maksimalna vrijednost ispisuje se na kraju for petlje
Izlaz
Primjer: Dohvatite sve vrijednosti dinamičke tablice
Razmotrite sljedeću tablicu: https://demo.guru99.com/test/table.html
Broj stupaca za svaki red je različit.
Ovdje red broj 1, 2 i 4 ima 3 ćelije, red broj 3 ima 2 ćelije, a red broj 5 ima 1 ćeliju.
Moramo dobiti vrijednosti svih ćelija
Evo koda:
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("-------------------------------------------------- ");
}
}
}
Objašnjenje koda:
- rows_count daje ukupan broj redaka
- za svaki redak dobivamo ukupan broj stupaca pomoću
rows_table.get(row).findElements(By.tagName("td")); - Iteriramo kroz svaki stupac i svaki redak i dohvaćamo vrijednosti.
Izlaz:
Rezime
- By.xpath() se obično koristi za pristup elementima tablice.
- Statične web tablice u Selenium dosljedne su prirode. tj. imaju fiksni broj redaka kao i podatke o ćeliji.
- Dinamičke web tablice su nedosljedne, tj. nemaju fiksni broj redaka i podataka o ćelijama.
- Koristeći selenium web drajver, možemo jednostavno rukovati dinamičkim web tablicama.
- Selenium Webdriver nam omogućuje pristup dinamičkim web tablicama putem njihovih X-staza. Razumijevanje načina rukovanja web tablicom u selenu ključno je za učinkovito testiranje automatizacije.















