Mình đã từng nói về lỗi này trong bài 18, nhưng có vẻ không dễ cho các bạn mới bắt đầu học về Selenium Webdriver.
Nội dung bài viết
I. Định nghĩa và ví dụ
Đơn giản: Bạn đang sử dụng 1 biến mà nó đang có giá trị là null
(không trỏ đến bất kỳ object nào cả)
NullPointerException
là Unchecked Exception
nên compiler sẽ không giúp bạn phát hiện và báo cho bạn được, bạn phải tự xử lý.
Ví dụ: Code lỗi
package features; import org.junit.jupiter.api.Test; import org.openqa.selenium.WebDriver; public class Demo4Test { WebDriver driver; @Test void name() { driver.get("https://google.com"); } }
II. Nguyên nhân và cách fix lỗi
- Nguyên nhân là biến
driver
đang là giá trịnull
, nên khi sử dụng nó sẽ bị lỗiNullPointerException
. null
là giá trị mặc định của 1 biến có kiểu dữ liệu object- Cách fix là bạn cần assign object vào cho cái biến đó. Ở đây, assign
ChromeDriver
object vào cho biếndriver
.
@Test void name() { driver = new ChromeDriver(); driver.get("https://google.com"); }
Tại sao lại như vậy? Chúng ta quay lại bài học vỡ lòng về Class và Object
- Class là nơi định nghĩa ra object sẽ có thuộc tính gì (properties) và có những hành động gì (methods)
- object là 1 thực thể (instance) của class
Đại khái quá trình tạo object sẽ như sau:
WebDriver driver = new ChromeDriver(); //hoặc WebDriver driver; // driver = null driver = new ChromeDriver(); // bây giờ driver đã trỏ vào 1 object
Nó giống như việc, chúng ta đẻ 1 đứa con, rồi chúng ta đặt tên cho nó:
- Đứa con là
new ChromeDriver()
- Tên của con là
driver
Nếu đứa con chưa ra đời, thì bạn có bảo nó đứng lên, ngồi xuống được không???
Chưa tạo ra browser thì sao bảo nó mở trang web google.com được.
III. Tổng kết
Bất cứ lúc nào bạn gặp lỗi NullPointerException
thì hãy xem dòng lỗi đó là dòng nào, biến để gọi method đã được assign object nào chưa, nếu chưa thì hãy assign đi. Vậy thôi. Nếu bạn không biết assign thế nào, vậy thì bạn phải học thêm về class, object và constructor rồi.