Hvordan håndtere dynamiske netttabeller i Selenium

Webtabell i Selenium

Det er to typer HTML-tabeller publisert på nettet-

  1. Statiske tabeller: Data er statisk dvs. Antall rader og kolonner er faste.
  2. Dynamiske tabeller: Data er dynamisk dvs. Antall rader og kolonner er IKKE faste.

Hvordan håndtere dynamisk tabell i Selenium

Nedenfor er et eksempel på en dynamisk netttabell i Selenium for salg. Basert på inndatafiltre vil antall rader bli endret. Så det er dynamisk i naturen.

Håndter dynamisk bord inn Selenium

Det er enkelt å håndtere statiske tabeller, men å håndtere dynamiske tabeller i Selenium er litt vanskelig da rader og kolonner ikke er konstante.

Bruke X-Path for å finne webtabellelementer

Før vi finner webelement, la oss først forstå-

Hva er et webelement?

Nettelementer er ikke annet enn HTML-elementer som tekstboks, alternativknapper for rullegardinmenyene, send inn-knapper osv. Disse HTML-elementene er skrevet med Begynn tag og slutter med en slutt tag.

For eksempel,

Mitt første HTML-dokument.

Trinn for å få X-banen til webelementet som vi ønsker å finne.

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

Bruke X-Path for å finne webtabellelementer

Trinn 2) Høyreklikk på webelementet hvis x-bane skal hentes. I vårt tilfelle, høyreklikk på "Selskap" Velg alternativet Inspiser. Følgende skjerm vil vises -

Bruke X-Path for å finne webtabellelementer

Trinn 3) Høyreklikk på uthevet webelement > Velg Kopier -> Kopier x-banealternativ.

Bruke X-Path for å finne webtabellelementer

Trinn 4) Bruk den kopierte X-banen "//*[@id="leftcontainer"]/table/thead/tr/th [1]" i Selenium WebDriver for å finne elementet.

Eksempel: Hent antall rader og kolonner fra Dynamic WebTable

Mens dynamisk netttabellhåndtering i Selenium, kan vi ikke forutsi antall rader og kolonner.

Ved hjelp av Selenium nettdriver, kan vi finne

  • Antall rader og kolonner i netttabellen Selenium
  • X rad eller Y kolonnes data.

Nedenfor er program for å hente totalt antall rader og kolonner for håndtering av webtabell i Selenium:

Hent antall rader 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ært Web Driver-objektet "wd" og initialisert det til chrome-driver.
  • Vi bruker List til totalt antall kolonner i "col".
  • findElements-kommandoer returnerer en liste over ALLE elementene som samsvarer med den spesifiserte lokatoren
  • ved å bruke findElements og X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th får vi alle kolonnene
  • På samme måte gjentar vi prosessen for rader.

Utgang:

Hent antall rader og kolonner

Eksempel: Hent celleverdi for en bestemt rad og kolonne i den dynamiske tabellen

La oss anta at vi trenger 3rd rad i tabellen og dens andre celles data. Se tabellen nedenfor-

Hent celleverdi for en bestemt rad og kolonne

I tabellen ovenfor oppdateres data regelmessig etter en viss tid. Dataene du prøver å hente vil være forskjellig fra skjermbildet ovenfor. Imidlertid forblir koden den samme. Her er eksempelprogram for å få 3rd rad og 2nd kolonnens data.

Hent celleverdi for en bestemt rad 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 lokalisert ved å bruke locator-egenskapen "tagname".
  • Ved hjelp av XPath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” finn 3rd rad og henter teksten ved hjelp av getText ()-funksjonen
  • Bruk Xpath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2]” finn den andre cellen i 2rd rad og henter teksten ved hjelp av getText ()-funksjonen

Produksjon:

Hent celleverdi av en bestemt rad og kolonne i den dynamiske tabellen

Eksempel: Få maksimalt av alle verdiene i en kolonne med dynamisk tabell

I dette eksemplet vil vi få maksimum av alle verdier i en bestemt kolonne.

Se følgende tabell –

Få maksimalt av alle verdiene i en kolonne med dynamisk tabell

Her er koden

Få maksimalt av alle verdiene i en kolonne med dynamisk tabell

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 å bruke Chrome-driveren finner vi netttabellen og får totalt antall rader ved å bruke XPath “.//*[@id='leftcontainer']/table/tbody/tr/td[1]”
  • Ved å bruke for loop, itererer vi gjennom totalt antall rader og henter verdier én etter én. For å få neste rad bruker vi (i+1) i XPath
  • Vi sammenligner gammel verdi med ny verdi og maksimal verdi skrives ut på slutten av for loop

Produksjon

Få maksimalt av alle verdiene i en kolonne med dynamisk tabell

Eksempel: Få alle verdiene til en dynamisk tabell

Tenk på følgende tabell: https://demo.guru99.com/test/table.html

Få alle verdiene til en dynamisk tabell

Antall kolonner for hver rad er forskjellig.

Her har rad nummer 1, 2 og 4 3 celler, og rad nummer 3 har 2 celler, og rad nummer 5 har 1 celle.

Vi må få verdier av alle cellene

Her er koden:

Få alle verdiene til en dynamisk tabell

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 gir det totale antallet rader
  • for hver rad får vi totalt antall kolonner ved hjelp av rows_table.get(row).findElements(By.tagName("td"));
  • Vi itererer gjennom hver kolonne og av hver rad og henter verdier.

Produksjon:

Få alle verdiene til en dynamisk tabell

Sammendrag

  • By.xpath() brukes ofte for å få tilgang til tabellelementer.
  • Statiske netttabeller inn Selenium er konsistente i naturen. dvs. de har fast antall rader samt celledata.
  • Dynamiske webtabeller er inkonsekvente, dvs. at de ikke har fast antall rader og celledata.
  • Ved å bruke selenwebdriver kan vi enkelt håndtere dynamiske webtabeller.
  • Selenium Webdriver lar oss få tilgang til dynamiske netttabeller etter deres X-bane. Å forstå hvordan man håndterer netttabeller i selen er avgjørende for effektiv automatiseringstesting.