Omgaan met dynamische webtabellen met behulp van Selenium webdriver

Webtabel in Selenium

Er zijn twee soorten HTML-tabellen gepubliceerd op internet:

  1. Statische tabellen: Gegevens zijn statisch, dwz het aantal rijen en kolommen staat vast.
  2. Dynamische tabellen: Gegevens zijn dynamisch, dwz het aantal rijen en kolommen staat NIET vast.

Hoe u met dynamische tabellen omgaat Selenium

Hieronder ziet u een voorbeeld van een dynamische webtabel in Selenium te koop. Op basis van invoerdatumfilters wordt het aantal rijen gewijzigd. Het is dus dynamisch van aard.

Behandel dynamische tabel in Selenium

Het omgaan met statische tabellen is eenvoudig, maar het omgaan met dynamische tabellen is eenvoudig Selenium is een beetje moeilijk omdat rijen en kolommen niet constant zijn.

X-Path gebruiken om webtabelelementen te lokaliseren

Voordat we het webelement lokaliseren, moeten we eerst begrijpen:

Wat is een webelement?

Webelementen zijn niets anders dan HTML-elementen zoals tekstvakken, keuzerondjes, verzendknoppen, enz. Deze HTML-elementen zijn geschreven met begin tag en eindigt met een einde label.

Bijvoorbeeld,

Mijn eerste HTML-document.

Stappen voor het verkrijgen van het X-pad van het webelement dat we willen lokaliseren.

Stap 1) Ga in Chrome naar https://demo.guru99.com/test/web-table-element.php

X-Path gebruiken om webtabelelementen te lokaliseren

Stap 2) Klik met de rechtermuisknop op het webelement waarvan het x-pad moet worden opgehaald. In ons geval klikt u met de rechtermuisknop op "Bedrijf" en selecteert u de optie Inspecteren. Het volgende scherm wordt weergegeven:

X-Path gebruiken om webtabelelementen te lokaliseren

Stap 3) Klik met de rechtermuisknop op het gemarkeerde webelement> Selecteer Kopiëren -> Kopieer x-padoptie.

X-Path gebruiken om webtabelelementen te lokaliseren

Stap 4) Gebruik het gekopieerde X-pad “//*[@id=”leftcontainer”]/table/thead/tr/th [1]” in Selenium WebDriver om het element te lokaliseren.

Voorbeeld: Haal het aantal rijen en kolommen op uit Dynamic WebTable

Terwijl dynamische webtabellen worden verwerkt Selenium, kunnen we het aantal rijen en kolommen niet voorspellen.

gebruik Selenium webdriver, kunnen we vinden

  • Aantal rijen en kolommen van de webtabel in Selenium
  • Gegevens van X-rij of Y-kolom.

Hieronder vindt u een programma voor het ophalen van het totale aantal rijen en kolommen voor het verwerken van de webtabel Selenium:

Haal het aantal rijen en kolommen op

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

Code Verklaring:

  • Hier hebben we eerst het Web Driver-object “wd” gedeclareerd en geïnitialiseerd naar de Chrome-driver.
  • Wij gebruiken Lijst naar het totale aantal kolommen in “col”.
  • findElements-opdrachten retourneren een lijst met ALLE elementen die overeenkomen met de opgegeven locator
  • met behulp van findElements en X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th krijgen we alle kolommen
  • Op dezelfde manier herhalen we het proces voor rijen.

Output:

Haal het aantal rijen en kolommen op

Voorbeeld: Haal de celwaarde op van een bepaalde rij en kolom van de dynamische tabel

Laten we aannemen dat we er 3 nodig hebbenrd rij van de tabel en de gegevens van de tweede cel. Zie de onderstaande tabel-

Haal de celwaarde van een bepaalde rij en kolom op

In bovenstaande tabel worden de gegevens na enige tijd regelmatig bijgewerkt. De gegevens die u probeert op te halen, zullen verschillen van de bovenstaande schermafbeelding. De code blijft echter hetzelfde. Hier is een voorbeeldprogramma om de 3 te krijgenrd rij en 2nd kolomgegevens.

Haal de celwaarde van een bepaalde rij en kolom op

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

Code Verklaring:

  • De tabel wordt gevonden met behulp van de locator-eigenschap 'tagname'.
  • gebruik XPath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” zoek de 3rd rij en haalt de tekst op met behulp van de functie getText ().
  • Gebruik Xpath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2]” om de 2e cel in 3 te vindenrd rij en haalt de tekst op met behulp van de functie getText ().

uitgang:

Haal de celwaarde op van een bepaalde rij en kolom van de dynamische tabel

Voorbeeld: Haal het maximum op van alle waarden in een kolom met een dynamische tabel

In dit voorbeeld krijgen we het maximum van alle waarden in een bepaalde kolom.

Raadpleeg de volgende tabel:

Haal het maximale uit alle waarden in een kolom met dynamische tabellen

Hier is de code

Haal het maximale uit alle waarden in een kolom met dynamische tabellen

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>

Code Verklaring:

  • Met behulp van het Chrome-stuurprogramma lokaliseren we de webtabel en krijgen we het totale aantal rijen met XPath “.//*[@id='leftcontainer']/table/tbody/tr/td[1]”
  • Met behulp van een for-lus doorlopen we het totale aantal rijen en halen we de waarden één voor één op. Om de volgende rij te krijgen gebruiken we (i+1) in XPath
  • We vergelijken de oude waarde met de nieuwe waarde en de maximale waarde wordt aan het einde van de for-lus afgedrukt

Vermogen

Haal het maximale uit alle waarden in een kolom met dynamische tabellen

Voorbeeld: Haal alle waarden van een dynamische tabel op

Beschouw de volgende tabel: https://demo.guru99.com/test/table.html

Verkrijg alle waarden van een dynamische tabel

Het aantal kolommen voor elke rij is verschillend.

Hier hebben rij nummer 1, 2 en 4 3 cellen, en rij nummer 3 heeft 2 cellen, en rij nummer 5 heeft 1 cel.

We moeten de waarden van alle cellen verkrijgen

Hier is de code:

Verkrijg alle waarden van een dynamische 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("-------------------------------------------------- ");
    	}
   	}
}

Code Verklaring:

  • rows_count geeft het totale aantal rijen
  • voor elke rij krijgen we het totale aantal gebruikte kolommen rows_table.get(row).findElements(By.tagName("td"));
  • We doorlopen elke kolom en elke rij en halen waarden op.

uitgang:

Verkrijg alle waarden van een dynamische tabel

Samenvatting

  • By.xpath() wordt vaak gebruikt om toegang te krijgen tot tabelelementen.
  • Statische webtabellen in Selenium zijn consistent van aard. dat wil zeggen dat ze een vast aantal rijen hebben, evenals celgegevens.
  • Dynamische webtabellen zijn inconsistent, dat wil zeggen dat ze geen vast aantal rijen en celgegevens bevatten.
  • Met behulp van de Selenium-webdriver kunnen we eenvoudig dynamische webtabellen verwerken.
  • Selenium Met Webdriver hebben we toegang tot dynamische webtabellen via hun X-pad