Cum să gestionați tabelele web dinamice în Selenium

Tabel Web în Selenium

Există două tipuri de tabele HTML publicate pe web-

  1. Tabele statice: Datele sunt statice, adică numărul de rânduri și coloane este fix.
  2. Tabelele dinamice: Datele sunt dinamice, adică numărul de rânduri și coloane NU este fix.

Cum să gestionați tabelul dinamic în Selenium

Mai jos este un exemplu de tabel web dinamic în Selenium pentru vanzari. Pe baza filtrelor de date introduse, numărul de rânduri va fi modificat. Deci, este de natură dinamică.

Manevrați tabelul dinamic în Selenium

Manipularea tabelelor statice este ușoară, dar gestionarea tabelelor dinamice Selenium este puțin dificil, deoarece rândurile și coloanele nu sunt constante.

Utilizarea X-Path pentru a localiza elementele tabelului web

Înainte de a găsi elementul web, mai întâi să înțelegem-

Ce este un element web?

Elementele web nu sunt altceva decât elemente HTML, cum ar fi caseta de text, butoanele radio dropdown, butoanele de trimitere etc. Aceste elemente HTML sunt scrise cu Începe etichetă și se termină cu un capăt etichetă.

De exemplu,

Primul meu document HTML.

Pași pentru obținerea căii X a elementului web pe care dorim să-l găsim.

Pas 1) În Chrome, accesați https://demo.guru99.com/test/web-table-element.php

Utilizarea X-Path pentru a localiza elementele tabelului web

Pas 2) Faceți clic dreapta pe elementul web a cărui cale x urmează să fie preluată. În cazul nostru, faceți clic dreapta pe „Companie” Selectați opțiunea Inspectare. Va fi afișat următorul ecran -

Utilizarea X-Path pentru a localiza elementele tabelului web

Pas 3) Faceți clic dreapta pe elementul web evidențiat > Selectați Copiere -> Copiere opțiunea x-path.

Utilizarea X-Path pentru a localiza elementele tabelului web

Pas 4) Utilizați calea X ​​copiată „//*[@id="leftcontainer”]/table/thead/tr/th [1]” în Selenium WebDriver pentru a localiza elementul.

Exemplu: Preluați numărul de rânduri și coloane din Dynamic WebTable

În timp ce tabelul web dinamic se manipulează Selenium, nu putem prezice numărul său de rânduri și coloane.

Utilizarea Selenium driver web, putem găsi

  • Numărul de rânduri și coloane ale tabelului web în Selenium
  • Datele rândului X sau ale coloanei Y.

Mai jos este programul pentru preluarea numărului total de rânduri și coloane pentru manipularea tabelului web Selenium:

Preluați numărul de rânduri și coloane

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

Explicația codului:

  • Aici am declarat mai întâi obiectul Web Driver „wd” și l-am inițializat în driverul Chrome.
  • Folosim Listă la numărul total de coloane din „col”.
  • Comenzile findElements returnează o listă cu TOATE elementele care se potrivesc cu locatorul specificat
  • folosind findElements și X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th obținem toate coloanele
  • În mod similar, repetăm ​​procesul pentru rânduri.

ieșire:

Preluați numărul de rânduri și coloane

Exemplu: Preluați valoarea celulei unui anumit rând și coloană din tabelul dinamic

Să presupunem că avem nevoie de 3rd rândul tabelului și datele celei de-a doua celule. Vezi tabelul de mai jos -

Preluați valoarea celulei pentru un anumit rând și coloană

În tabelul de mai sus, datele sunt actualizate în mod regulat după o anumită perioadă de timp. Datele pe care încercați să le preluați vor fi diferite de captura de ecran de mai sus. Cu toate acestea, codul rămâne același. Iată un exemplu de program pentru a obține 3rd rând și 2nd datele coloanei.

Preluați valoarea celulei pentru un anumit rând și coloană

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

Explicația codului:

  • Tabelul este localizat folosind proprietatea de localizare „tagname”.
  • Utilizarea XPath „//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” găsiți cele 3rd rând și își primește textul folosind funcția getText ().
  • Folosind Xpath „//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2]” găsiți a doua celulă în 2rd rând și își primește textul folosind funcția getText ().

producție:

Preluați valoarea celulei pentru un anumit rând și coloană din tabelul dinamic

Exemplu: Obțineți maximul tuturor valorilor dintr-o coloană a tabelului dinamic

În acest exemplu, vom obține maximul tuturor valorilor dintr-o anumită coloană.

Consultați următorul tabel -

Obțineți maximul tuturor valorilor dintr-o coloană a tabelului dinamic

Iată codul

Obțineți maximul tuturor valorilor dintr-o coloană a tabelului dinamic

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>

Explicația codului:

  • Folosind driverul Chrome, găsim tabelul web și obținem numărul total de rând folosind XPath „.//*[@id='leftcontainer']/table/tbody/tr/td[1]”
  • Folosind bucla for, repetăm ​​numărul total de rânduri și obținem valori unul câte unul. Pentru a obține următorul rând, folosim (i+1) în XPath
  • Comparăm valoarea veche cu valoarea nouă, iar valoarea maximă este tipărită la sfârșitul buclei for

Ieșire

Obțineți maximul tuturor valorilor dintr-o coloană a tabelului dinamic

Exemplu: Obțineți toate valorile unui tabel dinamic

Luați în considerare următorul tabel: https://demo.guru99.com/test/table.html

Obțineți toate valorile unui tabel dinamic

Numărul de coloane pentru fiecare rând este diferit.

Aici rândul numărul 1, 2 și 4 au 3 celule, iar rândul numărul 3 are 2 celule, iar rândul numărul 5 are 1 celulă.

Trebuie să obținem valorile tuturor celulelor

Iată codul:

Obțineți toate valorile unui tabel dinamic

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

Explicația codului:

  • rows_count oferă numărul total de rânduri
  • pentru fiecare rând obținem numărul total de coloane folosind rows_table.get(row).findElements(By.tagName("td"));
  • Repetăm ​​fiecare coloană și fiecare rând și obținem valori.

producție:

Obțineți toate valorile unui tabel dinamic

Rezumat

  • By.xpath() este folosit în mod obișnuit pentru a accesa elementele tabelului.
  • Tabelele web statice în Selenium sunt consistente în natură. adică au un număr fix de rânduri, precum și date pentru celule.
  • Tabelele web dinamice sunt inconsistente, adică nu au un număr fix de date de rânduri și celule.
  • Folosind driverul web selenium, putem gestiona cu ușurință tabelele web dinamice.
  • Selenium Webdriver ne permite să accesăm tabelele web dinamice în funcție de acestea Calea X. Înțelegerea modului de manipulare a tabelului web în seleniu este crucială pentru testarea eficientă a automatizării.

Citește mai mult Readmore

Buletin informativ zilnic Guru99

Începe-ți ziua cu cele mai recente și importante știri despre inteligența artificială, livrate chiar acum.