NỘI DUNG BÀI HỌC

Tạo liên kết giữa các Page với cấu trúc Page Object Model trong Selenium Java

✅ Thiết lập quan hệ giữa các trang là gì?

Giả sử bạn có hai trang, Trang A và Trang B. Khi bạn nhấp vào một phần tử web nào đó trên Trang A, nó sẽ điều hướng đến Trang B. Vì vậy, bạn nên tạo phương thức sao cho sau khi nhấp vào phần tử web trên trang A hoặc thao tác gì đó rồi sau đó nó cho bạn quyền kiểm soát trên trang B luôn (khởi tạo đối tượng trang B). Người dùng không cần tạo một đối tượng của trang B riêng sau đó để truy cập các thành viên của Trang B.

Lấy ví dụ về CRM System đang làm hổm rài. Từ trang SignIn, khi người dùng thực hiện đăng nhập thì nó chuyển hướng đến trang Dashboard. Vậy thì mình sẽ tạo mối quan hệ giữa 2 trang này với hành động đăng nhập bằng cách bạn tạo một phương thức "signIn" và đặt kiểu trả vềđối tượng của trang Dashboard. Nó được gọi là thiết lập mối quan hệ giữa các trang.

✅ Tạo mối liên kết giữa các trang

Các bạn xem lại bài hôm trước bên Test Case khi SignIn xong và vào Dashboard mở Doucment Management:

@Test(priority = 1)
public void signIn(){

    signInPage = new SignInPage(driver);

    Assert.assertTrue(signInPage.verifySignInPageTitle(), "Sign In page title doesn't match");
    Assert.assertTrue(signInPage.verifySignInPageText(), "Header page text not matching");

    signInPage.signin("admin02@mailinator.com", "Demo@123");

}

@Test(priority = 2)
public void openClients(){

    dashboardPage = new DashboardPage(driver);

    Assert.assertTrue(dashboardPage.verifySignInPageTitle(), "Dashboard page title doesn't match");
    dashboardPage.openClientsPage();

}

Có vấn đề chưa hay ở chổ: Từ bước signIn sang bước mở Clients chưa thấy sự liên kết cũng như luồng đi liền mạch của nó. Bên trên khởi tạo đối tượng signInpage và bên dưới phải khởi tạo thêm giá trị cho đối tượng dashboardPage một lần nữa. Rõ ràng là nó y như rời rạc nhau.

Thực sự thì như vậy vẫn được chả sao cả. Nhưng nhìn nó chưa hay. Kiểu là mình đã dùng POM mà nhìn project như vậy sau nhiều trang sẽ thấy nó rời rạc nhau không đẹp và logic chưa chặt chẽ.


==> Bây giờ mình sửa nó lại để cho nó có sự liên kết


Đầu tiên
chúng ta xác định 1 điều là khi nào có sự chuyển hướng sang trang mới. Nghĩa là sự kết nối trang bắt đầu từ đâu.

Xét ví dụ trên chổ SignInDashboard thì chúng ta thấy là khi thực hiện hàm signin thành công thì nó chuyển hướng đến trang Dashboard. Vậy thì mình sẽ chỉnh lại hàm signIn trong SignInPage class chút.

Bình thường thì hàm signin sẽ là:

public void signin(String username, String password) {
    enterEmail(username);
    enterPassword(password);
    clickSignIn();
}

Theo như lý thuyết trên thì mình sẽ cho nó trả về là 1 đối tượng của class DashboardPage

public DashboardPage signin(String username, String password) {
    enterEmail(username);
    enterPassword(password);
    clickSignIn();

    return new DashboardPage(driver);
}

Chúng ta thấy là nó sẽ trả về (return) là một khởi tạo mới giá trị cho class DashboardPage với driver đi cùng luôn.

Vậy thì sang test case ta sẽ chỉnh như sau:

@Test(priority = 1)
public void signIn() {
    
    signInPage = new SignInPage(driver);

    Assert.assertTrue(signInPage.verifySignInPageTitle(), "Sign In page title doesn't match");
    Assert.assertTrue(signInPage.verifySignInPageText(), "Header page text not matching");

    //Chổ này gán hàm signin cho đối tượng dashboardPage luôn vì hàm signin trả về là 1 khởi tạo trang DashboardPage
    //Và đã có mang driver đi cùng rồi
    dashboardPage = signInPage.signin("thaian@mailinator.com", "Demo@123");
}

@Test(priority = 2)
public void openDocument() {
    //Bên dưới này không cần khởi tạo đối tượng dashboardPage nữa
    Assert.assertTrue(dashboardPage.verifySignInPageTitle(), "Dashboard page title doesn't match");
    dashboardPage.openClientsPage();
}


Nó sẽ rõ ràng hơn với luồng đi liền mạch nối đuôi nhau.

Các bạn cũng sẽ giảm bớt được các dòng code khởi tạo đối tượng cho trang. Hệ thống nhiều trang thì sẽ thấy nó rõ ràng và gọn hơn nhiều.

Giờ thử viết tiếp từ trang Dashboard sang trang Clients/Customer và Projects thử nào 😁

Teacher

Teacher

Anh Tester

Software Quality Engineer

Đường dẫu khó chân vẫn cần bước đi
Đời dẫu khổ tâm vẫn cần nghĩ thấu

Cộng đồng Automation Testing Việt Nam:

🌱 Telegram Automation Testing:   Cộng đồng Automation Testing
🌱 
Facebook Group Automation: Cộng đồng Automation Testing Việt Nam
🌱 
Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium
🌱 Telegram
Manual Testing:   Cộng đồng Manual Testing
🌱 
Facebook Group Manual: Cộng đồng Manual Testing Việt Nam

Chia sẻ khóa học lên trang

Bạn có thể đăng khóa học của chính bạn lên trang Anh Tester để kiếm tiền

Danh sách bài học