Kuidas hallata dünaamilisi veebitabeleid Selenium

Veebitabel sisse Selenium

Veebis avaldatakse kahte tüüpi HTML-tabeleid -

  1. Staatilised tabelid: Andmed on staatilised, st ridade ja veergude arv on fikseeritud.
  2. Dünaamilised tabelid: Andmed on dünaamilised, st ridade ja veergude arv EI OLE fikseeritud.

Dünaamilise tabeli käsitlemine Selenium

Allpool on näide dünaamilise veebitabeli kohta Selenium müügiks. Sisestuskuupäeva filtrite põhjal muudetakse ridade arvu. Seega on see oma olemuselt dünaamiline.

Käsitsege dünaamilist tabelit Selenium

Staatiliste tabelite käsitlemine on lihtne, kuid dünaamiliste tabelitega Selenium on veidi keeruline, kuna read ja veerud ei ole konstantsed.

X-Pathi kasutamine veebitabeli elementide leidmiseks

Enne veebielemendi leidmist mõistame kõigepealt

Mis on veebielement?

Veebielemendid pole muud kui HTML-elemendid, nagu tekstikast, rippmenüüde raadionupud, esitamisnupud jne. Need HTML-i elemendid on kirjutatud algus silt ja lõpeb an-ga lõpp tag.

Näiteks,

Minu esimene HTML-dokument.

Meetmed selle veebielemendi X-tee leidmiseks, mille asukohta soovime.

Step 1) Avage Chrome'is https://demo.guru99.com/test/web-table-element.php

X-Pathi kasutamine veebitabeli elementide leidmiseks

Step 2) Paremklõps veebielemendil, mille x-tee tuuakse. Meie puhul paremklõpsake "Ettevõte" Valige suvand Kontrolli. Kuvatakse järgmine ekraan –

X-Pathi kasutamine veebitabeli elementide leidmiseks

Step 3) Paremklõpsake esiletõstetud veebielemendil > valige suvand Kopeeri -> Kopeeri x-tee.

X-Pathi kasutamine veebitabeli elementide leidmiseks

Step 4) Kasutage kopeeritud X-teed „//*[@id=”leftcontainer”]/table/thead/tr/th [1] Selenium WebDriver elemendi asukoha leidmiseks.

Näide: tooge dünaamilise veebitabeli ridade ja veergude arv

Dünaamilise veebitabeli käsitlemise ajal Selenium, me ei saa ennustada selle ridade ja veergude arvu.

Kasutamine Selenium veebidraiveri, leiame

  • Veebitabeli ridade ja veergude arv Selenium
  • X rea või Y veeru andmed.

Allpool on programm ridade ja veergude koguarvu toomiseks veebitabeli käsitlemiseks Selenium:

Tõmba ridade ja veergude arv

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

Koodi selgitus:

  • Siin oleme esmalt deklareerinud veebidraiveri objekti "wd" &initsialiseerinud selle kroomi draiveriks.
  • Kasutame nimekirja veergude koguarvuni.
  • käsud findElements tagastab KÕIKIDE elementide loendi, mis vastavad määratud lokaatorile
  • kasutades findElements ja X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th saame kõik veerud
  • Samamoodi kordame protsessi ridade jaoks.

Väljund:

Tõmba ridade ja veergude arv

Näide: tooge dünaamilise tabeli konkreetse rea ja veeru lahtri väärtus

Oletame, et vajame 3rd tabeli rida ja selle teise lahtri andmed. Vaata allolevat tabelit -

Konkreetse rea ja veeru lahtri väärtuse toomine

Ülaltoodud tabelis värskendatakse andmeid teatud aja möödudes regulaarselt. Andmed, mida proovite tuua, erinevad ülaltoodud ekraanipildist. Kood jääb aga samaks. Siin on näidisprogramm 3rd rida ja 2nd veeru andmed.

Konkreetse rea ja veeru lahtri väärtuse toomine

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

Koodi selgitus:

  • Tabel asub asukoha atribuudi "tagname" abil.
  • Kasutamine XPath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” leidke 3rd rida ja hangib selle teksti funktsiooni getText () abil
  • Kasutades Xpathi „//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2], leidke lahtris 2 teine ​​lahterrd rida ja hangib selle teksti funktsiooni getText () abil

Väljund:

Tõmba dünaamilise tabeli konkreetse rea ja veeru lahtri väärtus

Näide: hankige dünaamilise tabeli veerus olevate väärtuste maksimum

Selles näites saame konkreetse veeru kõigi väärtuste maksimumi.

Vaadake järgmist tabelit -

Hankige dünaamilise tabeli veerus maksimaalselt kõik väärtused

Siin on kood

Hankige dünaamilise tabeli veerus maksimaalselt kõik väärtused

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>

Koodi selgitus:

  • Chrome'i draiveri abil leiame veebitabeli ja saame XPathi abil ridade koguarvu ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
  • Kasutades tsüklit, kordame ridade koguarvu ja hangime väärtusi ükshaaval. Järgmise rea saamiseks kasutame XPathis (i+1).
  • Võrdleme vana väärtust uue väärtusega ja maksimaalne väärtus trükitakse tsükli lõppu

Väljund

Hankige dünaamilise tabeli veerus maksimaalselt kõik väärtused

Näide: hankige kõik dünaamilise tabeli väärtused

Mõelge järgmisele tabelile: https://demo.guru99.com/test/table.html

Hankige kõik dünaamilise tabeli väärtused

Iga rea ​​veergude arv on erinev.

Siin on ridadel 1, 2 ja 4 3 lahtrit ning real 3 on 2 lahtrit ja real 5 on 1 lahter.

Peame saama kõigi rakkude väärtused

Siin on kood:

Hankige kõik dünaamilise tabeli väärtused

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

Koodi selgitus:

  • ridade_arv annab ridade koguarvu
  • iga rea ​​kohta saame veergude koguarvu kasutades rows_table.get(row).findElements(By.tagName("td"));
  • Kordame läbi iga veeru ja iga rea ​​ning toome väärtused.

Väljund:

Hankige kõik dünaamilise tabeli väärtused

kokkuvõte

  • By.xpath() kasutatakse tavaliselt tabelielementidele juurdepääsuks.
  • Staatilised veebitabelid sisse Selenium on oma olemuselt järjekindlad. st neil on fikseeritud ridade arv ja ka rakuandmed.
  • Dünaamilised veebitabelid on ebajärjekindlad, st neil pole fikseeritud ridade ja lahtrite arvu.
  • Seleeni veebidraiverit kasutades saame hõlpsalt hakkama dünaamiliste veebitabelitega.
  • Selenium Veebidraiver võimaldab meil nende kaudu juurde pääseda dünaamilistele veebitabelitele X-tee. Seleenis veebitabeli käsitlemise mõistmine on tõhusa automatiseerimise testimise jaoks ülioluline.