Có hai loại bảng HTML được xuất bản trên web-
- Bảng tĩnh : Dữ liệu là tĩnh tức là Số hàng và cột được cố định.
- Bảng độ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ý bảng động trong Selenium:
Dưới đây là ví dụ về bảng 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ý bảng tĩnh rất dễ dàng, nhưng xử lý bảng động trong Selenium hơi khó khăn vì các hàng và cột không phải là hằng số.
Trong hướng dẫn này, bạn sẽ học-
- Sử dụng X-Path để xác định vị trí các phần tử bảng Web
- Ví dụ: Tìm nạp số hàng và cột từ Dynamic WebTable
- Ví dụ: Tìm nạp giá trị ô của một hàng và cột cụ thể của Bảng động
- Ví dụ: Nhận tối đa tất cả các giá trị trong một cột của bảng động
- Ví dụ: Nhận tất cả các giá trị của Bảng động
Sử dụng X-Path để xác định vị trí các phần tử bảng Web
Trước khi chúng tôi 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ộp văn bản, nút radio thả xuống, nút gửi, v.v. Các phần tử HTML này được viết bằng thẻ bắt đầu và kết thúc bằng thẻ kết thúc .
Ví dụ,
Tài liệu HTML đầu tiên của tôi
.Các bước để nhận X-path của phần tử web mà 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. Màn 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 / thead / 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ý bảng web động trong Selenium, chúng tôi không thể 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ó thể tìm thấy
- Số hàng và cột của bảng 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ý bảng web trong Selenium:
nhập java.text.ParseException;nhập java.util.List;nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;lớp công cộng Noofrowsandcols {public static void main (String [] args) ném 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 CộtDanh sáchcol = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("Không có col nào là: + col.size ());//No.of hàngDanh sách row = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Không có hàng nào là: + row.size ()); wd.close (); }}
Giải thích mã:
- Ở đâ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
để 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 bộ định vị được chỉ định
- sử dụng findElements và X-path // * [@ id = \ "leftcontainer \"] / table / thead / 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.
Đầu ra:
Ví dụ: Tìm nạp giá trị ô của một hàng và cột cụ thể của Bảng động
Giả sử chúng ta cần hàng thứ 3 của bảng và dữ liệu ô thứ hai của nó. Xem bảng bên dưới-
Trong bảng 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 màn hình ở trên. Tuy nhiên, mã vẫn được giữ nguyên. Đây là chương trình mẫu để lấy dữ liệu của hàng thứ 3 và cột thứ 2 .
nhập java.text.ParseException;nhập java.util.List;nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;nhập java.util.concurrent.TimeUnit;lớp công cộng RowandCell {public static void main (String [] args) ném 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 (). implicitWait (20, TimeUnit.SECONDS);WebElement baseTable = wd.findElement (By.tagName ("table"));// Để tìm hàng thứ ba của bảngWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));String rowtext = tableRow.getText ();System.out.println ("Hàng thứ ba của bảng: + rowtext);// để lấy dữ liệu cột thứ 2 của hàng thứ 3WebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));String valueIneed = cellIneed.getText ();System.out.println ("Giá trị ô là: + valueIneed);wd.close ();}}
Giải thích mã:
- Bảng được đặt bằng 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ó bằng 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ó bằng hàm getText ()
Đầu ra :
Ví dụ: Nhận tối đa tất cả các giá trị trong một cột của bảng độ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ụ thể.
Tham khảo bảng sau -
Đây là mã
nhập java.text.ParseException;nhập java.util.List;nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;nhập java.text.NumberFormat;lớp công khai MaxFromTable {public static void main (String [] args) ném 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");Chuỗi tối đa;đôi m = 0, r = 0;//Không. cộtDanh sáchcol = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Tổng số cột là: + col.size ());//No.of hàngDanh sách row = wd.findElements (By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println ("Tổng số hàng là: + row.size ()); for (int i = 1; i r) {r = m; }} System.out.println ("Giá hiện tại tối đa là: + r); }}
Giải thích mã:
- Sử dụng trình điều khiển chrome, chúng tôi định vị bảng web và nhận tổng số hàng bằng 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 theo, 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 Bảng động
Hãy xem xét bảng sau http://demo.guru99.com/test/table.html
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à mã:
nhập java.text.ParseException;nhập java.util.List;nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập java.util.concurrent.TimeUnit;nhập org.openqa.selenium.chrome.ChromeDriver;lớp công khai NofRowsColmns {public static void main (String [] args) ném ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = new ChromeDriver ();wd.manage (). timeouts (). implicitWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// Để định vị bảng.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// Để định vị các hàng của bảng.Danh sáchrows_table = mytable.findElements (By.tagName ("tr"));// Để tính toán không có hàng nào trong bảng.int row_count = row_table.size ();// Vòng lặp sẽ thực thi cho đến hàng cuối cùng của bảng.for (int row = 0; row Columns_row = rows_table.get (row) .findElements (By.tagName ("td"));// Để tính không có cột (ô). Trong hàng cụ thể đó.int column_count = Columns_row.size ();System.out.println ("Số ô Trong Hàng" + hàng + "là" + số lượng cột);// Vòng lặp sẽ thực thi cho đến ô cuối cùng của hàng cụ thể đó.for (int column = 0; column Giải thích mã:
- 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 bằng 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ị.
Đầu ra :
Tóm lược
- By.xpath () thường được sử dụng để truy cập các phần tử của bảng.
- Các bảng 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.
- Các bảng 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ó thể xử lý các bảng web động một cách dễ dàng.
- Selenium Webdriver cho phép chúng tôi truy cập các bảng web động bằng đường dẫn X của chúng
Bài viết được đóng góp bởi Kanchan Kulkarni.