繁体   English   中英

空指针异常 - 驱动程序为空

[英]Null pointer exception - driver null

我开始在 Java 中学习 Selenium,但遇到了很大的障碍。

import org.junit.After;
import org.junit.Before;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class FirstTest {
    WebDriver driver;

    @Before
    public void driverSetup() {
        System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().setSize(new Dimension(1280, 720));
    }

    @After
    public void driverQuit() {
        driver.quit();
    }

    @Test
    public void getMethod() {
        driver.get("http://google.pl");
    }

}

我不知道如何解决它,因为在“getMethod”中驱动程序为 NULL。

您已经定义了WebDriver driver; 在全局级别,然后您再次在driverSetup方法中定义和实例化另一个WebDriver driver ,因此全局驱动程序从未被实例化。
您需要在driverSetup方法中进行单行更改,它会起作用。
您的driverSetup应该是这样的:

@Before
public void driverSetup() {
    System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe");
    // Instantiating the global driver here
    driver = new ChromeDriver();
    driver.manage().window().setSize(new Dimension(1280, 720));
}

你很接近。 您已经定义了一个WebDriver实例,即driver作为全局实例,如下所示:

WebDriver driver;

您可以在@Before@Test@After重用相同的实例。 因此, @Before像您一样在@Before声明WebDriver 的任何其他实例:

WebDriver driver = new ChromeDriver();

解决方案

解决方案是使用相同的全局WebDriver实例,如下所示:

WebDriver driver;

@Before
public void driverSetup() {
    System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe");
    driver = new ChromeDriver();
    driver.manage().window().setSize(new Dimension(1280, 720));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM