NỘI DUNG BÀI HỌC
1. Ý tưởng xử lý
- Phải nắm được mặc định hiện bao nhiêu Item trên 1 trang - đặt là itemTotalOnePage
- Bắt tổng số item thường hiện bên dưới bảng - đặt là itemTotal
- Lấy itemTotal chia cho itemTotalOnePage để biết là nó phân trang đúng tổng số trang đó chưa (đặt là pageTotal)
- Lấy xpath nút Next để click chuyển từng trang
- Dùng vòng lặp FOR chạy từ 1 đến <= pageTotal để duyệt từng trang
- Mỗi lần duyệt trang sau khi check data như mong muốn trên table rồi thì nhấn nút Next
Vậy là xong rồi. Y như mình nhìn vào thấy là sẽ check data từng trang xong cái nhấn nút Next để check trang tiếp. Vậy thôi. Mấy cái thông số mục đích để tính toán điểm bắt đầu và dừng thôi.
Cái phần check data từng cột thì An hướng dẫn rồi: xem thêm tại đây
Tiếp theo thì xem đoạn code An viết đầy đủ kết hợp vừa check data vừa phân trang nào dựa ý tưởng trên như An nói.
2. Xử lý phân trang trên Data Table trong Selenium Java
Hàm checkSearchTableByColumn
đã chỉ bài trước: (so sánh BẰNG)
public void checkSearchTableByColumn(int column, String value) {
WebUI.waitForPageLoaded();
WebUI.sleep(2);
//Xác định số dòng của table sau khi search
List<WebElement> row = WebUI.getWebElements(By.xpath("//table[@id='example']//tbody//tr"));
int rowTotal = row.size(); //Lấy ra số dòng
System.out.println("Số dòng tìm thấy: " + rowTotal);
//Duyệt từng dòng
for (int i = 1; i <= rowTotal; i++) {
WebElement elementCheck = WebUI.getWebElement(By.xpath("//table[@id='example']//tbody/tr[" + i + "]/td[" + column + "]"));
WebUI.scrollToElement(elementCheck);
System.out.print(value + " - ");
System.out.println(elementCheck.getText());
Assert.assertEquals(elementCheck.getText(), value, "Dòng số " + i + " không chứa giá trị tìm kiếm.");
}
}
Hàm phân trang testCheckPaginationOnTable
mới đây:
@Test
public void testCheckPaginationOnTable() {
WebUI.openURL("https://datatables.net/");
//Data search read from Properties
String searchValue = PropertiesHelpers.getValue("searchValue");
//Get item on One Page
Select select = new Select(WebUI.getWebElement(By.xpath("//select[@name='example_length']")));
Log.info(select.getFirstSelectedOption().getText());
int itemTotalOnePage = Integer.parseInt(select.getFirstSelectedOption().getText());
System.out.println("Tổng số item / trang: " + itemTotalOnePage);
//Set Text on Search input
WebUI.setText(By.xpath("//input[@type='search']"), searchValue);
//Get total item
String strTotal = WebUI.getElementText(By.xpath("//div[@id='example_info']"));
ArrayList<String> list = new ArrayList<String>();
for (String strItem : strTotal.split("\\s")) {
list.add(strItem);
}
System.out.println(list);
int itemTotal = Integer.parseInt(list.get(5));
System.out.println("Tổng số item: " + itemTotal);
int pageTotal = itemTotal / itemTotalOnePage;
int sodu = itemTotal % itemTotalOnePage;
System.out.println("Tổng số nguyên: " + pageTotal);
System.out.println("Tổng số dư: " + sodu);
if (sodu > 0) {
pageTotal = pageTotal + 1;
}
System.out.println("Tổng số Page: " + pageTotal);
for (int i = 1; i <= pageTotal; i++) {
checkSearchTableByColumn(3, searchValue);
//Nhấn nút Next để đến trang tiếp theo
if (i < pageTotal) {
WebUI.clickElement(By.xpath("//a[@id='example_next']"));
}
}
}
Khi mỗi lần chuyển trang thì nó thay đổi mấy con số ở phần Info dưới bảng. Có thể check nó luôn.