Xử lý Dynamic Web Tables sử dụng Selenium WebDriver

Có hai loại table HTML được xuất bản trên web-

  1.  tables tĩnh : Dữ liệu là tĩnh tức là Số hàng và cột được cố định.
  2.  tables động : Dữ liệu là động tức là Số hàng và cột KHÔNG cố định.

Bây giờ, chúng ta sẽ học cách xử lý  tables động trong Selenium:

Dưới đây là ví dụ về table web động trong Selenium for Sales. Dựa trên bộ lọc ngày đầu vào, số lượng hàng sẽ được thay đổi. Vì vậy, nó là động về bản chất.

Xử lý  tables tĩnh rất dễ dàng, nhưng xử lý  tables động trong Selenium hơi khó khăn vì các hàng và cột không phải là hằng số.

Sử dụng X-Path để xác định vị trí các phần tử table Web

Trước khi xác định vị trí phần tử web, trước tiên chúng ta hãy hiểu-

Phần tử web là gì?

Phần tử web không là gì ngoài các phần tử HTML như h textbox, dropdowns radio buttons, submit buttons, v.v. Các phần tử HTML này được viết table tag start và end table tag end .

Ví dụ,

<p> Tài liệu HTML đầu tiên của tôi </p>.

Các bước để lấy X-path của phần tử web code chúng tôi muốn định vị.

Bước 1) Trong Chrome, truy cập http://demo.guru99.com/test/web-table-element.php

Bước 2) Nhấp chuột phải vào phần tử web có đường dẫn x sẽ được tìm nạp. Trong trường hợp của chúng tôi, nhấp chuột phải vào tùy chọn “Công ty” Chọn Kiểm tra. coden hình sau sẽ được hiển thị:

Bước 3) Nhấp chuột phải vào phần tử web được đánh dấu> Chọn Sao chép -> Sao chép tùy chọn đường dẫn x.

Bước 4) Sử dụng X-path đã sao chép “// * [@ id =” leftcontainer “] / table / tagad / tr / th [1]” trong Selenium WebDriver để định vị phần tử.

Ví dụ: Tìm nạp số hàng và cột từ Dynamic WebTable

Trong khi xử lý table web động trong Selenium, chúng tôi không tag dự đoán số hàng và cột của nó.

Sử dụng trình điều khiển web Selenium, chúng tôi có tag tìm thấy

  • Số hàng và cột của table web trong Selenium
  • Dữ liệu của hàng X hoặc cột Y.

Dưới đây là chương trình để tìm nạp tổng số hàng và cột để xử lý table web trong 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(“http://demo.guru99.com/test/web-table-element.php”);         

        //No.of Columns

        List col = wd.findElements(By.xpath(“.//*[@id=\”leftcontainer\”]/table/thead/tr/th”));

        System.out.println(“No of cols are : ” +col.size()); 

        //No.of rows 

        List rows = wd.findElements(By.xpath(“.//*[@id=’leftcontainer’]/table/tbody/tr/td[1]”)); 

        System.out.println(“No of rows are : ” + rows.size());

        wd.close();

    }

}

Giải thích code:

  • Ở đây đầu tiên chúng ta đã khai báo đối tượng Trình điều khiển Web “wd” và khởi tạo nó thành trình điều khiển chrome.
  • Chúng tôi sử dụng Danh sách <WebElement> để tổng số cột trong “col”.
  • Lệnh findElements trả về danh sách TẤT CẢ các phần tử phù hợp với locator được chỉ định
  • sử dụng findElements và X-path // * [@ id = \ “leftcontainer \”] / table / tagad / tr / th, chúng tôi nhận được tất cả các cột
  • Tương tự, chúng tôi lặp lại quy trình cho các hàng.

.

Output:

Ví dụ: Tìm nạp giá trị ô của một hàng và cột cụ tag của  tables động

Giả sử chúng ta cần hàng thứ 3 của table và dữ liệu ô thứ hai của nó. Xem table bên dưới-

Trong table trên, dữ liệu được cập nhật thường xuyên sau một khoảng thời gian. Dữ liệu bạn thử lấy sẽ khác với ảnh chụp coden hình ở trên. Tuy nhiên, code vẫn được giữ nguyên. Đây là chương trình codeu để lấy dữ liệu của hàng thứ 3 và cột thứ 2 .

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(“http://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();

    }

}

Giải thích code:

  • table được đặt table thuộc tính định vị “tagname”.
  • Sử dụng XPath “// * [@ id = \” leftcontainer \ “] / table / tbody / tr [3]” tìm hàng thứ 3 và lấy văn bản của nó table hàm getText ()
  • Sử dụng Xpath “// * [@ id = \” leftcontainer \ “] / table / tbody / tr [3] / td [2]” tìm ô thứ 2 trong hàng thứ 3 và lấy văn bản của nó table hàm getText ()

Output :

Ví dụ: Nhận tối đa tất cả các giá trị trong một cột của  tables động

Trong ví dụ này, chúng tôi sẽ nhận được tối đa của tất cả các giá trị trong một cột cụ tag.

Tham khảo table sau –

Đây là code

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(“http://demo.guru99.com/test/web-table-element.php”); 

String max;

    double m=0,r=0;

      //No. of Columns

        List 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 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);

    }

}

Giải thích code:

  • Sử dụng trình điều khiển chrome, chúng tôi định vị table web và nhận tổng số hàng table XPath “.//*[@id=’leftcontainer’]/table/tbody/tr/td[1]”
  • Sử dụng vòng lặp for, chúng tôi lặp qua tổng số hàng và tìm nạp từng giá trị một. Để có hàng tiếp tago, chúng tôi sử dụng (i + 1) trong XPath
  • Chúng tôi so sánh giá trị cũ với giá trị mới và giá trị lớn nhất được in ở cuối vòng lặp for

OutPut

Ví dụ: Nhận tất cả các giá trị của  tables động

Hãy xem xét table sau http://demo.guru99.com/test/table.html

Cách xử lý Bảng Web động trong Selenium WebDriver

Số lượng cột cho mỗi hàng là khác nhau.

Ở đây hàng số 1, 2 và 4 có 3 ô, và hàng số 3 có 2 ô và hàng số 5 có 1 ô.

Chúng ta cần lấy giá trị của tất cả các ô

Đây là code:

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(“http://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(“————————————————– “);

     }

    }

}

Giải thích code:

  • row_count cho biết tổng số hàng
  • cho mỗi hàng, chúng tôi nhận được tổng số cột table cách sử dụng row_table.get (row) .findElements (By.tagName (“td”));
  • Chúng tôi lặp qua từng cột và từng hàng và tìm nạp các giá trị.

Output :

Bản tóm tắt

  • By.xpath () thường được sử dụng để truy cập các phần tử của table.
  • Các table web tĩnh trong Selenium là nhất quán về bản chất. tức là chúng có số hàng cũng như dữ liệu Ô cố định.
  • table web động không nhất quán tức là chúng không có dữ liệu số hàng và ô cố định.
  • Sử dụng trình điều khiển web selen, chúng tôi có tag xử lý các table web động một cách dễ dàng.
  • Selenium Webdriver cho phép chúng tôi truy cập các table web động table đường dẫn X của chúng
Check Also
Close
Back to top button