Automation

Kiểm thử tự động Selenium đơn giản với JUnit

Chào mọi người, ở bài viết trước mình đã hướng dẫn config InteliJ cũng như tạo project và cài plugin. Còn ở bài viết này mình sẽ hướng dẫn chi tiết hơn về Kiểm thử tự động Web Selenium với JUnit. Theo dõi phần hướng dẫn của mình ở bên dưới nhé!

CÀI VÀ THIẾT LẬP CƠ BẢN VỚI INTELLIJ CHO KIỂM THỬ TỰ ĐỘNG đã hướng dẫn tạo các package và class đơn giản. Giờ thì hãy áp dụng nó và tạo ra các thư mục theo khuôn mẫu sau. Mình gọi nó là Page Object. Ở đây mình sẽ có folder tên java có chứa các package (Pages, Actions, TestCases).

-Pages: đây sẽ là nơi chứa các class (mỗi class sẽ tương đương 1 màn hình), bên trong mỗi class sẽ khai báo các element (như xpath, id, …)
– Actions: là nơi chứa các hành động đối với element vừa khai báo ở Pages như click, sendKeys, …
– Tests: sẽ là nơi thực hiện kịch bản. 

1.Pages:

Mình thường hay đặt tên của Class theo format <TenManHinhPage>. Ví dụ: HomePage, LoginPage, SearchPage, …
Đây sẽ là nơi mình define ra các xpath của element. Ví dụ:

public static String txtCoupon = "//input[@id=\"coupon_code\"]";

Có thể xem phần ví dụ ảnh dưới mình khai báo một vài element đối với trang web https://thanhtrungit.net

Mình đã đánh sẵn số thứ tự (1,2,3,4,5) tương ứng đối với những element mình đã define ở trong class AddToCartPage

2. Actions:

Tương tự như Pages, mình đặt tên của Class theo format <TenManHinhAction>. Ví dụ: HomeAction, LoginAction, SearchAction, …
Đây sẽ là nơi mình viết ra các hàm đối với các element ở ở class bên Page như là các hành động: input, click, … Ví dụ:

a) Input: sử dụng sendKeys() để truyền value vào editText.

driver.findElement(By.xpath(AddToCartPage.txtCoupon)).sendKeys(code);

==> Tìm element có xpath của txtCoupon được define ờ class AddToCartPage và sau đó nhập text vào.

b) Click: sử dụng click() để click element

driver.findElement(By.xpath(AddToCartPage.btnApply)).click();

==> Tìm element có xpath của txtCoupon được define ờ class AddToCartPage và sau đó click vào element đó.

Như ở đây mình viết những hành động có đánh số thứ tự tương ứng cho từng element đã define ở class AddToCartPage

3. Tests:

Mình sẽ đặt tên các class với format <TC_TenManHinh>. Ví dụ: TC_Home, TC_Login, TC_Search, …
Với ví dụ lần này mình đặt tên TC_AddToCart. Ở đây sẽ là nơi thực hiện bộ Test case. Muốn vậy hãy gọi các hàm từ Actions sang để sử dụng. Và ở đây mình đang hướng dẫn dùng JUnit hãy dùng @Test ở đầu của mỗi Test Case nha. Ví dụ:

@Test
public void TC_AddProduct() throws InterruptedException {
   AddToCartAction.clickAdd(driver);
   driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);   
   String ProductXpath = "//td//a[text()=\"Thanh toán tự động Vietcombank cho Woocommerce\"]";   
   
   boolean isProduct = driver.findElement(By.xpath(ProductXpath)).isDisplayed();   
   Assert.assertEquals(true,isProduct);
}

Với case này mình đang kiểm tra rằng sau khi bấm vào nút “Mua hàng” thì sẽ chuyển hướng sang trang giỏ hàng thì sản phẩm đó có xuất hiện trong giỏ hàng hay không. Cụ thể các step như sau:
B1: Click vào nút “Mua hàng”
B2: Cho đợi 2 giây để màn hình giỏ hàng hiển thị (vì sau step 1 thì thực hiện ngay step tiếp theo, không có step 2 này thì sẽ thực hiện step 3, khi đó trình duyệt đang load chưa hiển thị được mà step 3 chạy thì element đó sẽ không được tìm thấy. Trong trường hợp này thì sẽ bị Fail ngay, còn nếu load kịp thì vẫn có thể Pass). <Về hàm wait này mình sẽ giới thiệu chi tiết thêm sau.>
B3: Define xpath của sản phẩm đó
B4: isDisplayed() sử dụng để kiểm tra element đó có hiển thị hay không. Nên ở đâu mình dùng kiểu boolean để trả về True (nếu hiển thị) hoặc False (nếu không hiển thị).
B5: So sánh có đúng là sản phẩm đó hiển thị hay không. <Về hàm so sánh này mình cũng sẽ chi tiết sau.>

Nhưng vẫn chưa chạy được đâu, bạn cần phải có bước mở trình duyệt. Hãy dùng @Before ở trước hàm setup(). Nó sẽ tự hiểu và khởi chạy trước mỗi @Test. Một đoạn setup đơn giản để mở được trình duyệt và truy cập vào url tương ứng như sau:

WebDriver driver;
@Before
public void setup(){
   System.setProperty("webdriver.chrome.driver", "./src/test/Resources/drivers/chromedriver");
   ChromeOptions options = new ChromeOptions();
   options.addArguments("--disable-notifications"); 
   driver = new ChromeDriver(options);   
   driver.get("https://thanhtrungit.net/mua/");   
   driver.manage().window().maximize();  
}

Trước @Before mình có khai báo WebDriver nữa nha.

-Chỗ đường dẫn hãy truyền vào đường dẫn đến nơi chứa Web Driver của bạn. Nên sử dụng đường dẫn tương đối (như ví dụ trên) thay vì đường dẫn tuyệt đối (đi từ thư mục gốc cho đến đích đến của file Web Driver) để có thể chạy tuỳ ý nếu cài trên máy khác.
driver.get(“url”) với url đường dẫn để bạn truy cập vào web
driver.manage().window().maximize() để có thể mở full cửa sỏ tình duyệt.
Ngoài ra còn có thể tuỳ chỉnh size cho trình duyệt bằng:

driver.manage().window().setSize(w,h);    //w là chiều ngang, h là chiều dài cửa sổ browser

Và nếu đã có @Before thì sẽ có @After. Nó sẽ khởi chạy sau mỗi @Test. Theo dõi ví dụ bên dưới:

@After
public void closeBrowser(){
   driver.close(); //đóng của sổ browser
}

Tại đây mình sẽ cho đóng cửa sổ browser sau mỗi lần chạy xong 1 test case. Bạn có thể thử nếu không có @After này thì cửa sổ trình duyệt của bạn sẽ không tự đóng đâu, chạy nhiều test case thì các cửa sổ sẽ hiển thị hàng loạt ra luôn í.

*Đối với Window: Ở lần chạy đầu tiên bạn hãy vào Web Driver và bấm vào file chromedriver.exe để mở và cho phép nhé.

** Với JUnit muốn Run có thể những cách sau:

1: Chạy riêng 1 test case: Bấm chuột phải tại ngay test case đó và chọn Run

2.  Chạy toàn bộ test case trong 1 class: Bấm chuột phải ở class đó và chọn

*** Kết quả sau chạy sẽ hiển thị khi Pass sẽ được tick xanh, còn fail sẽ là màu đỏ:

Passed:

Failed:

Đó là phần hướng dẫn viết Automation đơn giản sử dụng JUnit. Còn về những TestNG hay Cucumber thì sao. Cùng chờ và đón xem tiếp nhé!

5 5 votes
Article Rating
Subscribe
Notify of
guest
4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Thành Trung
7 months ago

Bài viết hay, chi tiết 😀 cơ mà ai cho lấy web tui ra làm demo test >.<

Bùi Đức Hiệp
7 months ago

uầy, có một bạn nữ pro viết blog nè