Kako rukovati dinamičkim web tablicama u Selenium

Web tablica u Selenium

Postoje dvije vrste HTML tablica objavljenih na webu-

  1. Statičke tablice: Podaci su statični, tj. broj redaka i stupaca je fiksan.
  2. 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 dinamičkom tablicom Selenium

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

Korištenje X-Path za lociranje elemenata web tablice

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 –

Korištenje X-Path za lociranje elemenata web tablice

Korak 3) Kliknite desnom tipkom miša na istaknuti web element > Odaberite opciju Kopiraj -> Kopiraj x-put.

Korištenje X-Path za lociranje elemenata web tablice

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:

Dohvaćanje broja redaka i stupaca

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:

Dohvaćanje broja redaka i stupaca

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-

Dohvaćanje vrijednosti ćelije određenog retka i stupca

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.

Dohvaćanje vrijednosti ćelije određenog retka i 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:

Dohvaćanje vrijednosti ćelije određenog retka i stupca dinamičke tablice

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 –

Dobijte maksimum svih vrijednosti u stupcu dinamičke tablice

Evo koda

Dobijte maksimum svih vrijednosti u stupcu dinamičke tablice

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

Dobijte maksimum svih vrijednosti u stupcu dinamičke tablice

Primjer: Dohvatite sve vrijednosti dinamičke tablice

Razmotrite sljedeću tablicu: https://demo.guru99.com/test/table.html

Dobijte sve vrijednosti dinamičke tablice

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:

Dobijte sve vrijednosti dinamičke tablice

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:

Dobijte sve vrijednosti dinamičke tablice

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.

Sažmite ovu objavu uz: