Håndtering af dynamiske webtabeller ved hjælp af Selenium webdriver

Webtabel i Selenium

Der er to typer HTML-tabeller udgivet på nettet-

  1. Statiske tabeller: Data er statisk dvs. Antal rækker og kolonner er faste.
  2. Dynamiske tabeller: Data er dynamisk dvs. Antal rækker og kolonner er IKKE faste.

Sådan håndteres dynamisk tabel i Selenium

Nedenfor er et eksempel på en dynamisk webtabel i Selenium til salg. Baseret på inputdatofiltre vil antallet af rækker blive ændret. Så det er dynamisk i naturen.

Håndter dynamisk bord ind Selenium

Håndtering af statiske tabeller er let, men håndtering af dynamiske tabeller i Selenium er lidt svært, da rækker og kolonner ikke er konstante.

Brug af X-Path til at finde webtabelelementer

Før vi finder webelementet, lad os først forstå-

Hvad er et webelement?

Webelementer er intet andet end HTML-elementer som tekstboks, dropdown-radioknapper, indsend-knapper osv. Disse HTML-elementer er skrevet med starte tag og slutter med en ende tag.

For eksempel,

Mit første HTML-dokument.

Trin til at få X-sti til webelement, som vi ønsker at finde.

Trin 1) Gå til i Chrome https://demo.guru99.com/test/web-table-element.php

Brug af X-Path til at finde webtabelelementer

Trin 2) Højreklik på webelement, hvis x-sti skal hentes. I vores tilfælde skal du højreklikke på "Virksomhed" Vælg Inspicer mulighed. Følgende skærm vil blive vist -

Brug af X-Path til at finde webtabelelementer

Trin 3) Højreklik på det fremhævede webelement > Vælg Kopier -> Kopier x-sti mulighed.

Brug af X-Path til at finde webtabelelementer

Trin 4) Brug den kopierede X-sti "//*[@id="leftcontainer"]/table/thead/tr/th [1]" i Selenium WebDriver for at finde elementet.

Eksempel: Hent antal rækker og kolonner fra Dynamic WebTable

Mens dynamisk webtabelhåndtering ind Selenium, kan vi ikke forudsige antallet af rækker og kolonner.

Ved brug af Selenium web-driver, kan vi finde

  • Antal rækker og kolonner af webtabel i Selenium
  • X række eller Y kolonnes data.

Nedenfor er et program til at hente det samlede antal rækker og kolonner til håndtering af webtabel i Selenium:

Hent antal rækker og kolonner

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();
    }
}

Kodeforklaring:

  • Her har vi først erklæret Web Driver-objektet "wd" og initialiseret det til chrome-driver.
  • Vi bruger List til det samlede antal kolonner i "kol".
  • findElements-kommandoer returnerer en liste over ALLE elementer, der matcher den angivne locator
  • ved at bruge findElements og X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th får vi alle kolonnerne
  • På samme måde gentager vi processen for rækker.

Output:

Hent antal rækker og kolonner

Eksempel: Hent celleværdi for en bestemt række og kolonne i den dynamiske tabel

Lad os antage, at vi har brug for 3rd række i tabellen og dens anden celles data. Se tabellen nedenfor-

Hent celleværdi af en bestemt række og kolonne

I ovenstående tabel opdateres data regelmæssigt efter et stykke tid. De data, du prøver at hente, vil være forskellige fra ovenstående skærmbillede. Koden forbliver dog den samme. Her er et eksempel på et program for at få 3rd række og 2nd kolonnens data.

Hent celleværdi af en bestemt række og kolonne

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();
    }
}

Kodeforklaring:

  • Tabellen er placeret ved hjælp af lokaliseringsegenskaben "tagnavn".
  • Ved brug af XPath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” find 3rd række og får sin tekst ved hjælp af getText () funktion
  • Brug Xpath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2]” find den 2. celle i 3rd række og får sin tekst ved hjælp af getText () funktion

Produktion:

Hent celleværdi af en bestemt række og kolonne i den dynamiske tabel

Eksempel: Få det maksimale af alle værdierne i en kolonne med dynamisk tabel

I dette eksempel vil vi få maksimum af alle værdier i en bestemt kolonne.

Se følgende tabel –

Få det maksimale af alle værdierne i en kolonne med dynamisk tabel

Her er koden

Få det maksimale af alle værdierne i en kolonne med dynamisk tabel

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>

Kodeforklaring:

  • Ved hjælp af chrome-driveren finder vi webtabellen og får det samlede antal rækker ved hjælp af XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
  • Ved at bruge for loop, itererer vi gennem det samlede antal rækker og henter værdier én efter én. For at få næste række bruger vi (i+1) i XPath
  • Vi sammenligner gammel værdi med ny værdi, og maksimal værdi udskrives i slutningen af ​​for loop

Produktion

Få det maksimale af alle værdierne i en kolonne med dynamisk tabel

Eksempel: Få alle værdierne af en dynamisk tabel

Overvej følgende tabel: https://demo.guru99.com/test/table.html

Få alle værdierne af en dynamisk tabel

Antallet af kolonner for hver række er forskelligt.

Her har række nummer 1, 2 og 4 3 celler, og række nummer 3 har 2 celler, og række nummer 5 har 1 celle.

Vi skal have værdier af alle cellerne

Her er koden:

Få alle værdierne af en dynamisk tabel

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("-------------------------------------------------- ");
    	}
   	}
}

Kodeforklaring:

  • rows_count giver det samlede antal rækker
  • for hver række får vi det samlede antal kolonner vha rows_table.get(row).findElements(By.tagName("td"));
  • Vi itererer gennem hver kolonne og af hver række og henter værdier.

Produktion:

Få alle værdierne af en dynamisk tabel

Resumé

  • By.xpath() bruges almindeligvis til at få adgang til tabelelementer.
  • Statiske web-tabeller i Selenium er konsekvente af natur. dvs. de har et fast antal rækker såvel som celledata.
  • Dynamiske webtabeller er inkonsistente, dvs. de har ikke et fast antal rækker og celledata.
  • Ved at bruge selen web-driver kan vi nemt håndtere dynamiske webtabeller.
  • Selenium Webdriver giver os adgang til dynamiske webtabeller efter deres X-sti

Læs mere Læs mere