Fix lỗi NullPointerException khi sử dụng Selenium Webdriver

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.

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ỗi NullPointerException.
  • 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ến driver.
@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.

+2

Leave a Reply

Your email address will not be published. Required fields are marked *