Jak zacházet s dynamickými webovými tabulkami v Selenium

⚡ Chytré shrnutí

Zpracování dynamických webových tabulek v Selenium WebDriver učí, jak iterovat, číst a ověřovat tabulky, jejichž řádky nebo sloupce se mění za běhu, a zahrnuje identifikaci, XPath, loo...pinga příklady.

  • ???? Dynamické tabulky: Tabulky, které načítají počet řádků a obsah za běhu.
  • 🧭 Strategie lokátoru: Vytvořte XPath se zástupnými symboly pro řádky a sloupce.
  • 🔁 Iterovat řádky: Smyčka findElements bez pevně zadaného počtu řádků.
  • 📊 Přečtené hodnoty: Použijte getText() k expozicitract a prohlásit data buňky.
  • Chytré čekání: WebDriverWait se pozastaví, dokud se nedokončí vykreslování řádků.
  • 🤖 Asistence AI: Nástroje umělé inteligence automaticky detekují strukturu a samoopravují lokátory.

Jak zacházet s dynamickými webovými tabulkami v Selenium

Webová tabulka v Selenium

Na webu jsou publikovány dva typy HTML tabulek -

  1. Statické tabulky: Data jsou statická, tj. počet řádků a sloupců je pevný.
  2. Dynamické tabulky: Data jsou dynamická, tj. počet řádků a sloupců NENÍ pevný.

Jak zacházet s dynamickým stolem v Selenium

Níže je uveden příklad dynamické webové tabulky v Selenium pro Prodej. Na základě vstupních datových filtrů se počet řádků změní. Má tedy dynamický charakter.

Manipulujte s dynamickým stolem Selenium

Manipulace se statickou tabulkou je snadná, ale manipulace s dynamickými tabulkami v Selenium je trochu obtížné, protože řádky a sloupce nejsou konstantní.

Použití X-Path k vyhledání prvků webové tabulky

Než najdeme webový prvek, nejprve si ujasněme-

Co je webový prvek?

Webové prvky nejsou nic jiného než prvky HTML, jako je textové pole, přepínače rozevírací nabídky, tlačítka pro odeslání atd. Tyto prvky HTML jsou napsány pomocí Začít tag a končí na konec štítek.

Například,

Můj první HTML dokument.

Kroky pro získání X-path webového prvku, který chceme najít.

Krok 1) V Chrome přejděte na https://demo.guru99.com/test/web-table-element.php

Použití X-Path k vyhledání prvků webové tabulky

Krok 2) Klikněte pravým tlačítkem na webový prvek, jehož x-cesta má být načtena. V našem případě klikněte pravým tlačítkem na „Společnost“ Vyberte možnost Inspect. Zobrazí se následující obrazovka –

Použití X-Path k vyhledání prvků webové tabulky

Krok 3) Klikněte pravým tlačítkem na zvýrazněný webový prvek > vyberte možnost Kopírovat -> Kopírovat cestu x.

Použití X-Path k vyhledání prvků webové tabulky

Krok 4) Použijte zkopírovanou cestu X „//*[@id=”leftcontainer”]/table/thead/tr/th [1]” v Selenium WebDriver k nalezení prvku.

Příklad: Načtení počtu řádků a sloupců z dynamické webové tabulky

Při zpracování dynamických webových tabulek v Selenium, nemůžeme předpovědět jeho počet řádků a sloupců.

Použití Selenium webový ovladač, najdeme

  • Počet řádků a sloupců webové tabulky v Selenium
  • Data řádku X nebo sloupce Y.

Níže je uveden program pro načtení celkového počtu řádků a sloupců pro manipulaci s webovou tabulkou Selenium:

Načíst počet řádků a sloupců

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 Vysvětlení:

  • Zde jsme nejprve deklarovali objekt webového ovladače „wd“ &inicializovali jsme jej na ovladač chrome.
  • Používáme Seznam na celkový počet sloupců ve „sloupec“.
  • Příkazy findElements vrátí seznam VŠECH prvků odpovídajících zadanému lokátoru
  • pomocí findElements a X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th získáme všechny sloupce
  • Podobně postup opakujeme pro řádky.

Výstup:

Načíst počet řádků a sloupců

Příklad: Načtení hodnoty buňky konkrétního řádku a sloupce dynamické tabulky

Předpokládejme, že potřebujeme 3rd řádek tabulky a data jeho druhé buňky. Viz tabulka níže -

Načíst hodnotu buňky konkrétního řádku a sloupce

Ve výše uvedené tabulce jsou data pravidelně aktualizována po určité době. Data, která se pokusíte načíst, se budou lišit od výše uvedeného snímku obrazovky. Kód však zůstává stejný. Zde je ukázkový program pro získání 3rd řádek a 2nd údaje sloupce.

Načíst hodnotu buňky konkrétního řádku a sloupce

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 Vysvětlení:

  • Tabulka je umístěna pomocí vlastnosti lokátoru „tagname“.
  • Použití XPath „//*[@id=\”leftcontainer\”]/table/tbody/tr[3]“ najděte 3rd řádek a získá svůj text pomocí funkce getText ().
  • Pomocí Xpath „//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2]“ najděte 2. buňku ve 3rd řádek a získá svůj text pomocí funkce getText ().

Výstup:

Načíst hodnotu buňky konkrétního řádku a sloupce dynamické tabulky

Příklad: Získejte maximum ze všech hodnot ve sloupci dynamické tabulky

V tomto příkladu získáme maximum ze všech hodnot v konkrétním sloupci.

Podívejte se na následující tabulku –

Získejte maximum ze všech hodnot ve sloupci dynamické tabulky

Zde je kód

Získejte maximum ze všech hodnot ve sloupci dynamické tabulky

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 Vysvětlení:

  • Pomocí ovladače chrome najdeme webovou tabulku a získáme celkový počet řádků pomocí XPath „.//*[@id='leftcontainer']/table/tbody/tr/td[1]“
  • Pomocí cyklu for iterujeme celkovým počtem řádků a načítáme hodnoty jednu po druhé. K získání dalšího řádku použijeme (i+1) v XPath
  • Porovnáváme starou hodnotu s novou hodnotou a maximální hodnota je vytištěna na konci cyklu for

Výstup

Získejte maximum ze všech hodnot ve sloupci dynamické tabulky

Příklad: Získejte všechny hodnoty dynamické tabulky

Zvažte následující tabulku: https://demo.guru99.com/test/table.html

Získejte všechny hodnoty dynamické tabulky

Počet sloupců pro každý řádek je jiný.

Zde má řádek číslo 1, 2 a 4 3 buňky a řádek číslo 3 má 2 buňky a řádek číslo 5 má 1 buňku.

Potřebujeme získat hodnoty všech buněk

Zde je kód:

Získejte všechny hodnoty dynamické tabulky

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 Vysvětlení:

  • rows_count udává celkový počet řádků
  • pro každý řádek dostaneme celkový počet sloupců pomocí rows_table.get(row).findElements(By.tagName("td"));
  • Iterujeme každý sloupec a každý řádek a načítáme hodnoty.

Výstup:

Získejte všechny hodnoty dynamické tabulky

Nejčastější dotazy

Tabulka s řádky nebo sloupci, které se mění za běhu pomocí AJAXu nebo filtrů.

Umělá inteligence automaticky detekuje strukturu, generuje XPath a sama opravuje selektory při posunu sloupců.

Ano. Copilot generuje XPath pro řádkovou smyčku, getText extracce a tvrzení.

//table[@id]//tr[ROW]/td[COL] s nahrazenými zástupnými symboly uvnitř smyček.

Použijte WebDriverWait s visibilityOfElementLocated v tabulce.

Smyčka provede každou buňku ve sloupci, analyzuje text, track nejvyšší hodnota.

Tabulka byla znovu vykreslena. Přemístěte prvky uvnitř smyčky.

Použijte driver.findElements(By.xpath(“//table//tr”)).size().

Shrňte tento příspěvek takto: