Χειρισμός δυναμικών πινάκων Ιστού με χρήση Selenium Πρόγραμμα οδήγησης Web

Πίνακας Ιστού σε Selenium

Υπάρχουν δύο τύποι πινάκων HTML που δημοσιεύονται στον Ιστό-

  1. Στατικοί πίνακες: Τα δεδομένα είναι στατικά, δηλαδή ο αριθμός γραμμών και στηλών είναι σταθερός.
  2. Δυναμικοί πίνακες: Τα δεδομένα είναι δυναμικά, π.χ. Ο αριθμός γραμμών και στηλών ΔΕΝ είναι σταθερός.

Πώς να χειριστείτε το δυναμικό τραπέζι Selenium

Παρακάτω είναι ένα παράδειγμα δυναμικού πίνακα ιστού σε Selenium για ΠΩΛΗΣΗ. Με βάση τα φίλτρα ημερομηνίας εισαγωγής, ο αριθμός των σειρών θα αλλάξει. Άρα, έχει δυναμικό χαρακτήρα.

Χειριστείτε το Dynamic Table in Selenium

Ο χειρισμός του στατικού πίνακα είναι εύκολος, αλλά ο χειρισμός των δυναμικών τραπεζιών μέσα Selenium είναι λίγο δύσκολο καθώς οι γραμμές και οι στήλες δεν είναι σταθερές.

Χρήση X-Path για εντοπισμό στοιχείων πίνακα Ιστού

Πριν εντοπίσουμε το στοιχείο ιστού, ας καταλάβουμε πρώτα-

Τι είναι ένα στοιχείο web;

Τα στοιχεία Ιστού δεν είναι παρά στοιχεία HTML όπως το κείμενοbox, αναπτυσσόμενα κουμπιά επιλογής, κουμπιά υποβολής κ.λπ. Αυτά τα στοιχεία HTML γράφονται με Εκκίνηση ετικέτα και τελειώνει με ένα τέλος tags.

Για παράδειγμα,

Το πρώτο μου έγγραφο HTML.

Βήματα για τη λήψη της διαδρομής X του στοιχείου ιστού που θέλουμε να εντοπίσουμε.

Βήμα 1) Στο Chrome, Μεταβείτε στο https://demo.guru99.com/test/web-table-element.php

Χρήση X-Path για εντοπισμό στοιχείων πίνακα Ιστού

Βήμα 2) Κάντε δεξί κλικ στο στοιχείο ιστού του οποίου η διαδρομή x πρέπει να ληφθεί. Στην περίπτωσή μας, κάντε δεξί κλικ στην «Εταιρεία» Επιλέξτε Επιθεώρηση. Το Following θα εμφανιστεί η οθόνη -

Χρήση X-Path για εντοπισμό στοιχείων πίνακα Ιστού

Βήμα 3) Κάντε δεξί κλικ στο επισημασμένο στοιχείο web > Επιλέξτε Αντιγραφή -> Αντιγραφή διαδρομής x.

Χρήση X-Path για εντοπισμό στοιχείων πίνακα Ιστού

Βήμα 4) Χρησιμοποιήστε το αντιγραμμένο X-path “//*[@id=”leftcontainer”]/table/thead/tr/th [1]” στο Selenium WebDriver για να εντοπίσετε το στοιχείο.

Παράδειγμα: Λήψη αριθμού γραμμών και στηλών από το Dynamic WebTable

Κατά τον χειρισμό δυναμικού πίνακα ιστού Selenium, δεν μπορούμε να προβλέψουμε τον αριθμό των γραμμών και στηλών του.

Χρησιμοποιώντας Selenium πρόγραμμα οδήγησης web, μπορούμε να βρούμε

  • Αριθμός γραμμών και στηλών του πίνακα ιστού μέσα Selenium
  • Σειρά X ή δεδομένα στήλης Υ.

Παρακάτω είναι το πρόγραμμα για τη λήψη του συνολικού αριθμού γραμμών και στηλών για τη διαχείριση του πίνακα ιστού 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();
    }
}

Επεξήγηση κώδικα:

  • Εδώ έχουμε πρώτα δηλώσει το αντικείμενο του προγράμματος οδήγησης Web "wd" και το αρχικοποιήσαμε σε πρόγραμμα οδήγησης chrome.
  • Χρησιμοποιούμε List στο συνολικό αριθμό στηλών στο "col".
  • Οι εντολές findElements επιστρέφουν μια λίστα με ΟΛΑ τα στοιχεία που ταιριάζουν με τον καθορισμένο εντοπιστή
  • χρησιμοποιώντας το findElements και το X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th παίρνουμε όλες τις στήλες
  • Ομοίως, επαναλαμβάνουμε τη διαδικασία για σειρές.

Παραγωγή:

Λήψη αριθμού γραμμών και στηλών

Παράδειγμα: Ανάκτηση τιμής κελιού μιας συγκεκριμένης γραμμής και στήλης του Δυναμικού πίνακα

Ας υποθέσουμε ότι χρειαζόμαστε 3rd γραμμή του πίνακα και τα δεδομένα του δεύτερου κελιού του. Δείτε τον παρακάτω πίνακα -

Λήψη τιμής κελιού μιας συγκεκριμένης σειράς και στήλης

Στον παραπάνω πίνακα, τα δεδομένα ενημερώνονται τακτικά μετά από κάποιο χρονικό διάστημα. Τα δεδομένα που προσπαθείτε να ανακτήσετε θα είναι διαφορετικά από το παραπάνω στιγμιότυπο οθόνης. Ωστόσο, ο κωδικός παραμένει ο ίδιος. Εδώ είναι ένα δείγμα προγράμματος για να πάρετε το 3rd σειρά και 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();
    }
}

Επεξήγηση κώδικα:

  • Ο πίνακας βρίσκεται χρησιμοποιώντας την ιδιότητα εντοπισμού "tagname".
  • Χρησιμοποιώντας XPath "//*[@id=\"leftcontainer\"]/table/tbody/tr[3]" βρείτε το 3rd γραμμή και παίρνει το κείμενό της χρησιμοποιώντας τη συνάρτηση getText ().
  • Χρησιμοποιώντας το Xpath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2]” βρείτε το 2ο κελί σε 3rd γραμμή και παίρνει το κείμενό της χρησιμοποιώντας τη συνάρτηση getText ().

Παραγωγή:

Λήψη τιμής κελιού μιας συγκεκριμένης γραμμής και στήλης του δυναμικού πίνακα

Παράδειγμα: Λάβετε το μέγιστο όλων των τιμών σε μια στήλη δυναμικού πίνακα

Σε αυτό το παράδειγμα, θα λάβουμε το μέγιστο όλων των τιμών σε μια συγκεκριμένη στήλη.

Ανατρέξτε στο ακόλουθοwing τραπέζι -

Λάβετε το μέγιστο όλων των τιμών σε μια στήλη δυναμικού πίνακα

Εδώ είναι ο κωδικός

Λάβετε το μέγιστο όλων των τιμών σε μια στήλη δυναμικού πίνακα

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>

Επεξήγηση κώδικα:

  • Χρησιμοποιώντας το πρόγραμμα οδήγησης chrome, εντοπίζουμε τον πίνακα ιστού και λαμβάνουμε τον συνολικό αριθμό σειρών χρησιμοποιώντας το XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
  • Χρησιμοποιώντας το βρόχο for, επαναλαμβάνουμε τον συνολικό αριθμό σειρών και ανακτούμε τις τιμές μία προς μία. Για να λάβουμε την επόμενη σειρά χρησιμοποιούμε το (i+1) στο XPath
  • Συγκρίνουμε την παλιά τιμή με τη νέα τιμή και η μέγιστη τιμή εκτυπώνεται στο τέλος του βρόχου for

Παραγωγή

Λάβετε το μέγιστο όλων των τιμών σε μια στήλη δυναμικού πίνακα

Παράδειγμα: Λάβετε όλες τις τιμές ενός δυναμικού πίνακα

Σκεφτείτε το ακόλουθοwing τραπέζι: 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("-------------------------------------------------- ");
    	}
   	}
}

Επεξήγηση κώδικα:

  • Το rows_count δίνει τον συνολικό αριθμό σειρών
  • για κάθε σειρά παίρνουμε τον συνολικό αριθμό στηλών που χρησιμοποιούμε rows_table.get(row).findElements(By.tagName("td"));
  • Επαναλαμβάνουμε μέσα από κάθε στήλη και κάθε γραμμή και ανακτούμε τιμές.

Παραγωγή:

Λάβετε όλες τις τιμές ενός δυναμικού πίνακα

Χαρακτηριστικά

  • Η By.xpath() χρησιμοποιείται συνήθως για πρόσβαση σε στοιχεία πίνακα.
  • Στατικοί πίνακες ιστού μέσα Selenium είναι συνεπείς στη φύση τους. δηλ. έχουν σταθερό αριθμό σειρών καθώς και δεδομένα κυψέλης.
  • Οι δυναμικοί πίνακες ιστού είναι ασυνεπείς, δηλαδή δεν έχουν σταθερό αριθμό σειρών και δεδομένων κελιών.
  • Χρησιμοποιώντας selenium πρόγραμμα οδήγησης ιστού, μπορούμε να χειριστούμε εύκολα δυναμικούς πίνακες ιστού.
  • Selenium Το Webdriver μας επιτρέπει να έχουμε πρόσβαση σε δυναμικούς πίνακες ιστού από αυτούς Χ-μονοπάτι