डायनेमिक वेब टेबल्स को कैसे हैंडल करें Selenium

वेब तालिका में Selenium

वेब पर दो प्रकार की HTML तालिकाएँ प्रकाशित होती हैं-

  1. स्थैतिक तालिकाएँडेटा स्थिर है अर्थात पंक्तियों और स्तंभों की संख्या निश्चित है।
  2. गतिशील तालिकाएँडेटा गतिशील है अर्थात पंक्तियों और स्तंभों की संख्या निश्चित नहीं है।

डायनेमिक टेबल को कैसे हैंडल करें Selenium

नीचे एक गतिशील वेब तालिका का उदाहरण दिया गया है Selenium बिक्री के लिए। इनपुट तिथि फ़िल्टर के आधार पर, पंक्तियों की संख्या बदल जाएगी। इसलिए, यह प्रकृति में गतिशील है।

गतिशील तालिका को संभालें Selenium

स्थैतिक तालिका को संभालना आसान है, लेकिन गतिशील तालिकाओं को संभालना Selenium यह थोड़ा कठिन है क्योंकि पंक्तियाँ और स्तंभ स्थिर नहीं हैं।

वेब तालिका तत्वों का पता लगाने के लिए X-पथ का उपयोग करना

वेब तत्व का पता लगाने से पहले, आइए समझते हैं-

वेब तत्व क्या है?

वेब तत्व कुछ और नहीं बल्कि HTML तत्व हैं जैसे टेक्स्टबॉक्स, ड्रॉपडाउन रेडियो बटन, सबमिट बटन आदि। ये HTML तत्व लिखे गए हैं प्रारंभ टैग और के साथ समाप्त होता है समाप्त टैग।

उदाहरण के लिए,

मेरा पहला HTML दस्तावेज़.

उस वेब तत्व का X-पथ प्राप्त करने के चरण जिसे हम खोजना चाहते हैं।

चरण 1) क्रोम में, यहां जाएं https://demo.guru99.com/test/web-table-element.php

वेब तालिका तत्वों का पता लगाने के लिए X-पथ का उपयोग करना

चरण 2) उस वेब एलिमेंट पर राइट क्लिक करें जिसका x-path प्राप्त करना है। हमारे मामले में, “कंपनी” पर राइट क्लिक करें और इंस्पेक्ट विकल्प चुनें। निम्न स्क्रीन दिखाई देगी –

वेब तालिका तत्वों का पता लगाने के लिए X-पथ का उपयोग करना

चरण 3) हाइलाइट किए गए वेब तत्व पर राइट क्लिक करें > कॉपी -> कॉपी x-पथ विकल्प चुनें।

वेब तालिका तत्वों का पता लगाने के लिए X-पथ का उपयोग करना

चरण 4) कॉपी किए गए X-पथ “//*[@id=”leftcontainer”]/table/thead/tr/th [1]” का उपयोग करें Selenium WebDriver का उपयोग कर तत्व का पता लगाएं।

उदाहरण: डायनामिक वेबटेबल से पंक्तियों और स्तंभों की संख्या प्राप्त करें

जबकि गतिशील वेब तालिका हैंडलिंग Selenium, हम इसकी पंक्तियों और स्तंभों की संख्या का अनुमान नहीं लगा सकते।

का प्रयोग Selenium वेब ड्राइवर, हम पा सकते हैं

  • वेब तालिका में पंक्तियों और स्तंभों की संख्या Selenium
  • X पंक्ति या Y स्तंभ का डेटा.

नीचे वेब तालिका को संभालने के लिए पंक्तियों और स्तंभों की कुल संख्या प्राप्त करने का कार्यक्रम है Selenium:

पंक्तियों और स्तंभों की संख्या प्राप्त करें

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 स्पष्टीकरण:

  • यहां हमने सबसे पहले वेब ड्राइवर ऑब्जेक्ट "wd" घोषित किया है और इसे क्रोम ड्राइवर में इनिशिएलाइज़ किया है।
  • हम सूची का उपयोग करते हैं “col” में कुल स्तंभों की संख्या तक।
  • findElements कमांड निर्दिष्ट लोकेटर से मेल खाने वाले सभी तत्वों की सूची लौटाता है
  • findElements और X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th का उपयोग करके हमें सभी कॉलम मिलते हैं
  • इसी प्रकार, हम पंक्तियों के लिए भी यही प्रक्रिया दोहराते हैं।

आउटपुट:

पंक्तियों और स्तंभों की संख्या प्राप्त करें

उदाहरण: डायनामिक टेबल की किसी विशेष पंक्ति और कॉलम का सेल मान प्राप्त करें

मान लें हमें 3 की जरूरत हैrd तालिका की पंक्ति और उसके दूसरे सेल का डेटा। नीचे दी गई तालिका देखें-

किसी विशेष पंक्ति और कॉलम का सेल मान प्राप्त करें

उपरोक्त तालिका में, डेटा नियमित रूप से कुछ समय के अंतराल के बाद अपडेट किया जाता है। आप जो डेटा प्राप्त करने का प्रयास करेंगे वह उपरोक्त स्क्रीनशॉट से अलग होगा। हालाँकि, कोड वही रहता है। 3 प्राप्त करने के लिए यहाँ नमूना कार्यक्रम हैrd पंक्ति और 2nd स्तंभ का डेटा.

किसी विशेष पंक्ति और कॉलम का सेल मान प्राप्त करें

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 स्पष्टीकरण:

  • तालिका का पता लोकेटर प्रॉपर्टी “tagname” का उपयोग करके लगाया जाता है।
  • का प्रयोग एक्सपाथ “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” 3 ढूंढेंrd पंक्ति और getText () फ़ंक्शन का उपयोग करके इसका पाठ प्राप्त करता है
  • Xpath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2]” का उपयोग करके 2 में दूसरा सेल ढूंढेंrd पंक्ति और getText () फ़ंक्शन का उपयोग करके इसका पाठ प्राप्त करता है

उत्पादन:

गतिशील तालिका की किसी विशेष पंक्ति और स्तंभ का सेल मान प्राप्त करें

उदाहरण: डायनामिक तालिका के किसी कॉलम में सभी मानों का अधिकतम मान प्राप्त करें

इस उदाहरण में, हम किसी विशेष कॉलम में सभी मानों का अधिकतम मान प्राप्त करेंगे।

निम्नलिखित तालिका देखें –

गतिशील तालिका के एक कॉलम में सभी मानों का अधिकतम मान प्राप्त करें

कोड यहाँ है

गतिशील तालिका के एक कॉलम में सभी मानों का अधिकतम मान प्राप्त करें

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 स्पष्टीकरण:

  • क्रोम ड्राइवर का उपयोग करके हम वेब तालिका का पता लगाते हैं और XPath “.//*[@id='leftcontainer']/table/tbody/tr/td[1]” का उपयोग करके पंक्तियों की कुल संख्या प्राप्त करते हैं
  • फॉर लूप का उपयोग करके, हम पंक्तियों की कुल संख्या के माध्यम से पुनरावृति करते हैं और एक-एक करके मान प्राप्त करते हैं। अगली पंक्ति प्राप्त करने के लिए हम XPath में (i+1) का उपयोग करते हैं
  • हम पुराने मान की तुलना नए मान से करते हैं और अधिकतम मान for loop के अंत में मुद्रित किया जाता है

उत्पादन

गतिशील तालिका के एक कॉलम में सभी मानों का अधिकतम मान प्राप्त करें

उदाहरण: एक गतिशील तालिका के सभी मान प्राप्त करें

निम्नलिखित तालिका पर विचार करें: https://demo.guru99.com/test/table.html

गतिशील तालिका के सभी मान प्राप्त करें

प्रत्येक पंक्ति के लिए स्तंभों की संख्या अलग-अलग है।

यहां पंक्ति संख्या 1, 2 और 4 में 3 कक्ष हैं, और पंक्ति संख्या 3 में 2 कक्ष हैं, और पंक्ति संख्या 5 में 1 कक्ष है।

हमें सभी कोशिकाओं के मान प्राप्त करने की आवश्यकता है

यहाँ कोड है:

गतिशील तालिका के सभी मान प्राप्त करें

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 स्पष्टीकरण:

  • rows_count पंक्तियों की कुल संख्या देता है
  • प्रत्येक पंक्ति के लिए हम स्तंभों की कुल संख्या प्राप्त करते हैं rows_table.get(row).findElements(By.tagName("td"));
  • हम प्रत्येक कॉलम और प्रत्येक पंक्ति को दोहराते हैं और मान प्राप्त करते हैं।

उत्पादन:

गतिशील तालिका के सभी मान प्राप्त करें

सारांश

  • By.xpath() का उपयोग सामान्यतः तालिका तत्वों तक पहुंचने के लिए किया जाता है।
  • स्थैतिक वेब तालिकाएँ Selenium प्रकृति में सुसंगत हैं। यानी उनके पास पंक्तियों के साथ-साथ सेल डेटा की निश्चित संख्या होती है।
  • गतिशील वेब टेबल असंगत होती हैं, अर्थात् उनमें पंक्तियों और कक्षों के डेटा की संख्या निश्चित नहीं होती।
  • सेलेनियम वेब ड्राइवर का उपयोग करके, हम गतिशील वेब टेबलों को आसानी से संभाल सकते हैं।
  • Selenium वेबड्राइवर हमें गतिशील वेब टेबल तक पहुंचने की अनुमति देता है एक्स-पथप्रभावी स्वचालन परीक्षण के लिए सेलेनियम में वेब तालिका को कैसे संभालना है, यह समझना महत्वपूर्ण है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: