Web table là một trong nhưng dạng đối tượng thường gặp trên các trang web hiện nay. Đối tượng này dùng để hiển thị các dạng thông tin dữ liệu ở dạng lưới gồm cột và hàng tương tự như một ma trận 2 chiều.
-
Java8 là phiên bản có rất nhiều cải tiến đáng đồng tiền bát gạo. Một trong nhưng feature mới đó là là
Stream
giúp làm việc với các danh sáchList
-
Comparator
class giúp lấy giá trị lớn nhất và bé nhất từ một danh sách. -
Kết hợp hàm
findElements() -> List<WebElement>
vàStream
giúp chúng ta có thể dễ dàng làm việc với WebTable.
Trong ví dụ này mình có sử dụng thêm 1 thư viện đó là Lombok
. Giúp viết các hàm Getter & Setter
cũng nhưng các Constructor
của một đối tượng đơn giản hơn.
Với 1 table có dạng dưới đây
Last Name | First Name | Due | Web Site | Action | |
---|---|---|---|---|---|
Smith | John | jsmith@gmail.com | $50.00 | http://www.jsmith.com | edit delete |
Bach | Frank | fbach@yahoo.com | $51.00 | http://www.frank.com | edit delete |
Doe | Jason | jdoe@hotmail.com | $100.00 | http://www.jdoe.com | edit delete |
Conway | Tim | tconway@earthlink.net | $50.00 | http://www.timconway.com | edit delete |
Test case :
- Kiểm tra ngừoi có có
Due
lớn nhất làDoe Jason
Thực hiện
- Tạo class
Person
@Data
public class Person {
private final String lastName;
private final String firstName;
private final String email;
private final float due;
private final String website;
/**
Constructors and Getters Setters
**/
}
- Tạo class
TableTest
:
public class TableTest {
@Test
void getPersonWhoHasMaxOfDue() {
WebDriver driver = new ChromeDriver();
driver.get("https://the-internet.herokuapp.com/tables");
List<WebElement> rows = driver.findElements(By.xpath("//table[@id='table1']/tbody/tr"));
List<Person> persons = rows.stream()
.map(this::toPerson).collect(Collectors.toList());
Person largestDuePerson = persons
.stream()
.max(Comparator.comparing(Person::getDue))
.orElseThrow(NoSuchElementException::new);
Assert.assertEquals(String.format("%s %s", largestDuePerson.getLastName(), largestDuePerson.getFirstName()), "Doe Jason");
}
/**
* element is a row in table
*
* @param element
* @return
*/
private Person toPerson(WebElement element) {
String lastName = element.findElements(By.tagName("td")).get(0).getText();
String firstname = element.findElements(By.tagName("td")).get(1).getText();
String email = element.findElements(By.tagName("td")).get(2).getText();
Float due = Float.valueOf(element.findElements(By.tagName("td")).get(3).getText().trim().replace("$", ""));
String website = element.findElements(By.tagName("td")).get(4).getText();
return new Person(firstname, lastName, email, website, due);
}
}