NỘI DUNG BÀI HỌC
✅ 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ề là đố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ổ SignIn và Dashboard 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 😁