Kuinka käsitellä dynaamisia verkkotaulukoita Selenium

⚡ Älykäs yhteenveto

Dynaamisten verkkotaulukoiden käsittely Selenium WebDriver opettaa iteroimaan, lukemaan ja validoimaan taulukoita, joiden rivit tai sarakkeet muuttuvat suorituksen aikana, ja se käsittelee tunnistamista, XPath-käskyjä, loo-ohjelmointia ja muita vastaavia menetelmiä.pingja esimerkkejä.

  • 📋 Dynaamiset taulukot: Taulukot, jotka lataavat rivien määrän ja sisällön suorituksen aikana.
  • 🧭 Paikanninstrategia: Rakenna XPath rivi- ja sarakepaikkamerkeillä.
  • 🔁 Toista rivit: Suorita silmukka findElements ilman kiinteästi koodattuja rivimääriä.
  • 📊 Lue arvot: Käytä getText()-funktiota esimerkin tekemiseentract ja vaadi solutietoja.
  • ⏳ Älykkäät odotusajat: WebDriverWait pitää tauon, kunnes rivien renderöinti on valmis.
  • 🤖 AI-apu: Tekoälytyökalut tunnistavat rakenteet automaattisesti ja korjaavat itse itsensä paikantamalla.

Kuinka käsitellä dynaamisia verkkotaulukoita Selenium

Verkkotaulukko sisään Selenium

Verkossa on julkaistu kahdenlaisia ​​HTML-taulukoita.

  1. Staattiset taulukot: Tiedot ovat staattisia eli rivien ja sarakkeiden määrä on kiinteä.
  2. Dynaamiset taulukot: Tiedot ovat dynaamisia eli rivien ja sarakkeiden lukumäärä EI ole kiinteä.

Kuinka käsitellä dynaamista taulukkoa Selenium

Alla on esimerkki dynaamisesta verkkotaulukosta Selenium myynnissä. Syöttöpäivämääräsuodattimien perusteella rivien lukumäärää muutetaan. Se on siis luonteeltaan dynaaminen.

Käsittele dynaamista taulukkoa Selenium

Staattisen taulukon käsittely on helppoa, mutta dynaamisten taulukoiden käsittely sisään Selenium on hieman vaikeaa, koska rivit ja sarakkeet eivät ole vakioita.

X-Pathin käyttäminen Web-taulukkoelementtien paikantamiseen

Ennen kuin löydämme verkkoelementin, ymmärrämme ensin -

Mikä on verkkoelementti?

Verkkoelementit eivät ole mitään muuta kuin HTML-elementtejä, kuten tekstilaatikko, avattavat valintanapit, lähetyspainikkeet jne. Nämä HTML-elementit on kirjoitettu Alkaa -tunniste ja päättyy an loppu tunnisteita.

Esimerkiksi,

Ensimmäinen HTML-dokumenttini.

Vaiheet etsittävän verkkoelementin X-polun löytämiseksi.

Vaihe 1) Siirry Chromessa osoitteeseen https://demo.guru99.com/test/web-table-element.php

X-Pathin käyttäminen Web-taulukkoelementtien paikantamiseen

Vaihe 2) Napsauta hiiren kakkospainikkeella verkkoelementtiä, jonka x-polku haetaan. Meidän tapauksessamme napsauta hiiren kakkospainikkeella "Yritys" Valitse Tarkista vaihtoehto. Seuraava näyttö tulee näkyviin -

X-Pathin käyttäminen Web-taulukkoelementtien paikantamiseen

Vaihe 3) Napsauta korostettua verkkoelementtiä hiiren kakkospainikkeella > Valitse Kopioi -> Kopioi x-polku.

X-Pathin käyttäminen Web-taulukkoelementtien paikantamiseen

Vaihe 4) Käytä kopioitua X-polkua "//*[@id="leftcontainer"]/table/thead/tr/th [1] Selenium WebDriver elementin paikallistamiseksi.

Esimerkki: Hae rivien ja sarakkeiden lukumäärä Dynamic WebTable -taulukosta

Dynaamisen verkkotaulukon käsittelyn aikana Selenium, emme voi ennustaa sen rivien ja sarakkeiden määrää.

Käyttäminen Selenium web-ajuri, voimme löytää

  • Verkkotaulukon rivien ja sarakkeiden määrä Selenium
  • X-rivin tai Y-sarakkeen tiedot.

Alla on ohjelma rivien ja sarakkeiden kokonaismäärän hakemiseksi verkkotaulukon käsittelyä varten Selenium:

Hae rivien ja sarakkeiden määrä

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 Selitys:

  • Tässä olemme ensin ilmoittaneet Web Driver -objektiksi "wd" & alustaneet sen kromiohjaimeksi.
  • Käytämme listaa sarakkeiden kokonaismäärään sarakkeessa.
  • findElements-komennot palauttaa luettelon KAIKISTA määritettyä paikanninta vastaavista elementeistä
  • käyttämällä findElements- ja X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th saamme kaikki sarakkeet
  • Samalla tavalla toistamme prosessin riveille.

lähtö:

Hae rivien ja sarakkeiden määrä

Esimerkki: Hae dynaamisen taulukon tietyn rivin ja sarakkeen soluarvo

Oletetaan, että tarvitsemme 3rd taulukon rivi ja sen toisen solun tiedot. Katso alla oleva taulukko -

Hae tietyn rivin ja sarakkeen soluarvo

Yllä olevassa taulukossa tietoja päivitetään säännöllisesti jonkin ajan kuluttua. Tiedot, joita yrität hakea, eroavat yllä olevasta kuvakaappauksesta. Koodi pysyy kuitenkin samana. Tässä on esimerkkiohjelma 3rd rivi ja 2nd sarakkeen tiedot.

Hae tietyn rivin ja sarakkeen soluarvo

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 Selitys:

  • Taulukko sijoitetaan käyttämällä paikannusominaisuutta "tagname".
  • Käyttäminen XPath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” etsi 3rd riville ja saa sen tekstin getText () -funktiolla
  • Etsi Xpath:n avulla "//*[@id=\"leftcontainer\”]/table/tbody/tr[3]/td[2] 2:n toinen solurd riville ja saa sen tekstin getText () -funktiolla

ulostulo:

Hae dynaamisen taulukon tietyn rivin ja sarakkeen soluarvo

Esimerkki: Hanki enimmäisarvo kaikista dynaamisen taulukon sarakkeen arvoista

Tässä esimerkissä saamme suurimman osan kaikista arvoista tietyssä sarakkeessa.

Katso seuraava taulukko -

Hanki enimmäisarvo kaikista dynaamisen taulukon sarakkeen arvoista

Tässä on koodi

Hanki enimmäisarvo kaikista dynaamisen taulukon sarakkeen arvoista

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 Selitys:

  • Chrome-ohjaimen avulla paikannamme verkkotaulukon ja saamme rivien kokonaismäärän käyttämällä XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
  • For-silmukan avulla iteroimme rivien kokonaismäärän ja haemme arvot yksitellen. Saadaksesi seuraavan rivin käytämme XPathissa (i+1).
  • Vertaamme vanhaa arvoa uuteen arvoon ja maksimiarvo tulostetaan for-silmukan loppuun

ulostulo

Hanki enimmäisarvo kaikista dynaamisen taulukon sarakkeen arvoista

Esimerkki: Hanki kaikki dynaamisen taulukon arvot

Tarkastellaan seuraavaa taulukkoa: https://demo.guru99.com/test/table.html

Hanki kaikki dynaamisen taulukon arvot

Jokaisen rivin sarakkeiden määrä on erilainen.

Tässä riveillä 1, 2 ja 4 on 3 solua, ja rivillä 3 on 2 solua ja rivillä 5 on 1 solu.

Meidän on saatava kaikkien solujen arvot

Tässä on koodi:

Hanki kaikki dynaamisen taulukon arvot

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 Selitys:

  • rivien_määrä antaa rivien kokonaismäärän
  • jokaiselle riville saamme sarakkeiden kokonaismäärän käyttämällä rows_table.get(row).findElements(By.tagName("td"));
  • Iteroimme jokaisen sarakkeen ja jokaisen rivin läpi ja haemme arvot.

ulostulo:

Hanki kaikki dynaamisen taulukon arvot

UKK

Taulukko, jonka rivit tai sarakkeet muuttuvat suorituksen aikana AJAXin tai suodattimien avulla.

Tekoäly tunnistaa automaattisesti rakenteen, luo XPath-lausekkeet ja korjaa valitsimet itse, kun sarakkeet siirtyvät.

Kyllä. Copilot luo rivisilmukan XPath-path-tiedoston, getText-esimerkin.tracja väitteitä.

//table[@id]//tr[RIW]/td[COL], jossa paikkamerkit korvataan silmukoiden sisällä.

Käytä WebDriverWait-funktiota ja visibilityOfElementLocated-elementtiä taulukossa.

Silmukoi jokainen sarakkeen solu, jäsennä teksti, track suurin arvo.

Taulukko on renderöity uudelleen. Sijoita elementit uudelleen silmukan sisällä.

Käytä funktiota driver.findElements(By.xpath(“//table//tr”)).size().

Tiivistä tämä viesti seuraavasti: