Nội dung bài học
Trong bài này mình sẽ giới thiệu thêm các method Assert khác. Đây là các method tiêu biểu, bạn nào muốn xem full list thì xem ở link này.
https://javadoc.jitpack.io/com/github/cbeust/testng/master/javadoc/
I. Những method assert tiêu biểu do TestNG cung cấp
1. Hard Assert
Khẳng định cứng là những xác nhận dừng việc thực thi kiểm tra khi một câu lệnh khẳng định không thành công và các câu lệnh khẳng định tiếp theo sẽ không được thực hiện.
Nó đóng một vai trò quan trọng trong các dự án mà chúng ta có một phần tử mà không có sự xác nhận của nó, việc khẳng định các phần tử khác là vô ích.
Một ví dụ điển hình trong những trường hợp như vậy là chức năng đăng nhập. Ví dụ: nếu mình muốn xem các danh sách Client thì phải thông qua được các xác nhận bước Login. Nếu Login có gì đó sai thì không thể đi tiếp tới Client được.
Xác nhận cứng là loại xác nhận mặc định trong TestNG. Các hàm xác thực khẳng định bên dưới:
- assertEquals(actual, expected)
Dùng để so sánh bằng nhau 2 phần tử có cùng TYPE. Xin nhắc lại, chỉ so sánh 2 phần tử có cùng Type. Method này có thể so sánh rất nhiều loại: dữ liệu nguyên thủy như int, long, double, char, boolean; String; Object; Collections; Maps…
Lưu ý: cái gì phần tử thực tế (actual), ta đặt ở vị trí argument 1. Cái nào là phần tử ta mong đợi (expected), ta đặt ở argument 2.
- assertNotEquals(actual, expected)
Tương tự như phần trên, chỉ khác là so sánh KHÔNG bằng nhau.
- assertTrue(boolean condition)
Ta dùng trong trường hợp, ta mong đợi kết quả trả về là true. Nó tương đương với việc sử dụng assertEquals(actual, expected) khi actual và expected có TYPE là boolean.
- assertFalse(boolean condition)
Ta dùng trong trường hợp, ta mong đợi kết quả trả về là false.
- assertNull(Object)
Ta sử dụng trong trường hợp ta mong đợi rằng cái Object ta đang nhắm tới là Null.
- assertNotNull(Object)
Ta sử dụng trong trường hợp ta mong đợi rằng cái Object ta đang nhắm tới là Not Null.
package anhtester.com;
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestHardAssert extends SetupBrowser {
@Test(priority = 1)
public void RunTest() {
driver.get("https://anhtester.com");
String expectedTitle = "Anh Tester";
String originalTitle = driver.getTitle();
System.out.println("*** Checking For The Title ***");
Assert.assertEquals(originalTitle, expectedTitle);
}
}
2. Soft Assert
Khẳng định mềm trái ngược với khẳng định cứng. Trong các xác nhận mềm, các xác nhận tiếp theo vẫn tiếp tục chạy ngay cả khi một xác nhận xác nhận không thành công, tức là quá trình thực thi kiểm tra không dừng lại. Xác nhận mềm không bao gồm theo mặc định trong TestNG . Đối với điều này, bạn cần bao gồm gói org.testng.asserts.Softassert . Vì vậy, khi nào chúng ta nên sử dụng khẳng định mềm trong TestNG? Chúng tôi sử dụng các xác nhận mềm khi chúng tôi không quan tâm đến sự thất bại của các xác thực cụ thể và muốn quá trình thực thi kiểm tra tiếp tục và cũng muốn xem các lỗi ngoại lệ.
Một ví dụ điển hình là nhiều xác nhận trên một biểu mẫu đầu vào. Ngoài ra, cần lưu ý rằng trên nhiều nền tảng, bạn sẽ thấy " xác minh " trong khi tìm hiểu về các xác nhận. Xác nhận mềm còn được gọi là " Xác minh " và do đó đừng nhầm lẫn về điều này.
Làm thế nào để sử dụng Soft Assert trong TestNG?
Đoạn mã sau sẽ chứng minh việc sử dụng các xác nhận mềm trong TestNG. Trong mã này, chúng tôi đang xác thực tiêu đề của trang web, bỏ qua hai tiêu đề dự kiến khác nhau.
package anhtester.com;
import org.testng.asserts.SoftAssert;
import org.testng.annotations.Test;
public class TestSoftAssert extends SetupBrowser {
@Test(priority = 1)
public void RunTest() {
driver.get("https://anhtester.com");
SoftAssert softassert = new SoftAssert();
String expectedTitle = "Anh Tester";
String originalTitle = driver.getTitle();
System.out.println("*** Checking For The First Title ***");
softassert.assertEquals(originalTitle, expectedTitle);
System.out.println("*** Checking For The Second Title ***");
softassert.assertEquals(originalTitle, "Anh Tester - Automation Testing");
softassert.assertAll();
}
}
Các điểm quan trọng cần nhớ liên quan đến khẳng định mềm mà chúng ta có thể nhận thấy trong đoạn mã trên là:
- Xác nhận mềm yêu cầu nhập bên ngoài gói import org.testng.asserts.SoftAssert ;.
- Khởi tạo một đối tượng của SoftAssert để chạy các câu lệnh khẳng định .
- Câu lệnh object.assertAll() được yêu cầu để xem các ngoại lệ; nếu không, người kiểm tra sẽ không biết điều gì đã đạt và điều gì không thành công .
II. Ứng dụng thực tế
Mình đã từng viết if else và dùng các method isDisplayed() ở các page với việc return lại kiểu Boolean. Có nghĩa là nếu Page đó đang được mở ra thì isDisplayed() sẽ return true và ngược lại.
Class Login:
public void verifyCheckbox() {
WebElement msgDisplayed = driver.findElement(By.xpath("//div[@id='txtAge']"));
if (msgDisplayed.isDisplayed() == true) {
System.out.println("Vừa chọn nó xong.");
System.out.println(msgDisplayed.getText());
}
}
Từ đấy, mình sẽ sửa lại Test Case và sử dụng assertTrue
@Test
public void verifyCheckbox() {
WebElement msgDisplayed = driver.findElement(By.xpath("//div[@id='txtAge']"));
Assert.assertTrue(msgDisplayed .isDisplayed());
}
Tương tự ta sửa cho Test Case dạng so sánh bằng.
public class AnhTesterPage {
WebElement button_CheckAll = driver.findElement(By.xpath("//input[@id='check1']"));
System.out.println(button_CheckAll.getAttribute("value")); // get "Check All"
if (button_CheckAll.getAttribute("value").trim().toString().equals("Check All")) {
button_CheckAll.click(); // Click để check all
} else {
System.out.println("Không phải Text/ Không lấy được Text");
}
}
Từ đây, ta cũng sửa Test Case Login thành công và sử dụng assertEquals
@Test
public void AnhTesterPage() {
WebElement button_CheckAll = driver.findElement(By.xpath("//input[@id='check1']"));
System.out.println(button_CheckAll.getAttribute("value")); // get "Check All";
Assert.assertEquals(button_CheckAll.getAttribute("value").trim().toString(), "Check All");
button_CheckAll.click(); // Click để check all
}
Ví dụ Fail
package anhtester.com;
import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestAssert extends SetupBrowser {
@Test(priority = 1)
public void RunTestFail() {
driver.get("https://anhtester.com");
String expectedTitle = "Anh Tester";
String originalTitle = driver.getTitle();
System.out.println("*** Checking For The Title ***");
Assert.assertEquals(originalTitle, expectedTitle);
driver.findElement(By.id("btn-login")).click();
}
}
Ví dụ Pass
package anhtester.com;
import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestAssert extends SetupBrowser {
@Test(priority = 2)
public void RunTestPass() {
driver.get("https://anhtester.com");
String expectedTitle = "Anh Tester - Automation Testing";
String originalTitle = driver.getTitle();
System.out.println("*** Checking For The Title ***");
Assert.assertEquals(originalTitle, expectedTitle);
driver.findElement(By.id("btn-login")).click();
}
}
Ví dụ Add Client với Hard và Soft Assert
package anhtester.com.bai11_asserts;
import anhtester.com.SetupBrowser;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
public class TestAsserts extends SetupBrowser {
@Test
public void RunTestAssert() throws InterruptedException {
//Khai báo đối tượng của SoftAssert
SoftAssert softassert = new SoftAssert();
driver.get("https://crm.anhtester.com/signin");
Thread.sleep(500);
//Login account
driver.findElement(By.xpath("//input[@id='email']")).sendKeys("admin02@mailinator.com");
driver.findElement(By.xpath("//input[@id='password']")).sendKeys("123456");
Thread.sleep(500);
driver.findElement(By.xpath("//button[@type='submit']")).click();
Thread.sleep(500);
//Chọn menu Client và nhấn Add button
driver.findElement(By.xpath("//span[text()='Clients']")).click();
Thread.sleep(500);
driver.findElement(By.xpath("//a[normalize-space()='Add client']")).click();
Thread.sleep(1000);
//Kiểm tra giá trị Header dialog Add Client
WebElement header = driver.findElement(By.xpath("//h4[@id='ajaxModalTitle']"));
//Assert.assertEquals(header.getText(), "Add client"); //Hard Assert
softassert.assertEquals(header.getText(), "Add client"); //Soft Assert
//Điền giá trị cho Form Add Client
driver.findElement(By.id("company_name")).sendKeys("Selenium Java 06122021");
Thread.sleep(500);
//Click dropdown
driver.findElement(By.xpath("//div[@id='s2id_created_by']")).click();
Thread.sleep(500);
//SetText input
driver.findElement(By.xpath("//input[@id='s2id_autogen2_search']")).sendKeys("Admin 01");
Thread.sleep(500);
//Dùng lệnh Enter
driver.findElement(By.xpath("//div[@id='select2-drop']//input")).sendKeys(Keys.ENTER);
Thread.sleep(500);
driver.findElement(By.id("address")).sendKeys("Phuong 6");
Thread.sleep(500);
driver.findElement(By.id("city")).sendKeys("Cao Lanh");
Thread.sleep(500);
driver.findElement(By.id("state")).sendKeys("Dong Thap");
Thread.sleep(500);
//Click Save button
driver.findElement(By.xpath("//button[normalize-space()='Save']")).click();
Thread.sleep(2000);
//Click tab Clients
driver.findElement(By.xpath("//a[contains(text(),'Clients')]")).click();
Thread.sleep(500);
//Search giá trị Company Name vừa Add
driver.findElement(By.xpath("//input[@placeholder='Search']")).sendKeys("Selenium Java 06122021");
Thread.sleep(500);
//Check text của item hiển thị sau khi search
String item_client = driver.findElement(By.xpath("//table[@id='client-table']//tr[1]/td[2]//a")).getText();
//Kiểm tra giá trị Text
//Assert.assertTrue(item_client.equals("Selenium Java 06122021"));
//Assert.assertEquals(item_client, "Selenium Java 06122021");
softassert.assertTrue(item_client.equals("Selenium Java 06122021"));
Thread.sleep(1000);
softassert.assertAll(); //Bắt buộc
}
}
Anh Tester
facebook.com/anhtester
Đườ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