java, selenium,

Using Java8 to test web table

Ha Do Ha Do Follow Feb 02, 2019 · 3 mins read
Using Java8 to test web table
Share this

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ách List

  • 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>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 Email 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);
    }
}
Ha Do
Written by Ha Do Follow
Hi, I am Ha, the author of Tvn education center site