Java 测试类中的驱动程序实例为null

Java 测试类中的驱动程序实例为null,java,selenium-webdriver,webdriver,Java,Selenium Webdriver,Webdriver,我正在使用testng+webdriver&以以下方式初始化浏览器- public class base{ private WebDriver driver; @Test public void launch(){ System.out.println("In base class"); driver = new FirefoxDriver(); } public WebDriver getdriver(){

我正在使用testng+webdriver&以以下方式初始化浏览器-

public class base{
    private WebDriver driver;
    @Test
    public void launch(){
        System.out.println("In base class");
        driver = new FirefoxDriver();
    }
    public WebDriver getdriver(){
        return driver;
    }
}
然后测试类就像-

public class test extends base{
    WebDriver driver;
    @BeforeClass
    public void init(){
        driver = getdriver(); //getdriver method from base class
    }
    @Test   
    public void test1(){
        driver.get("http://www.yahoo.co.in"); //null pointer exception here
    }
}
但在测试类中,我得到null指针异常作为null中的驱动程序实例。 测试类中驱动程序为空的原因是什么?
有没有办法在执行开始时只启动一个浏览器并在结束时关闭而不使用static?

从启动中删除@Test并从getdriver中调用启动。您似乎可以在launch/getdriver中执行以下操作:

public WebDriver getDriver(){
    return new FirefoxDriver();
}


在本例中,每当我从任何测试类调用getdriver()时,它都会打开新的浏览器实例。我只想打开浏览器一次。在不使用静态驱动程序实例的情况下可以做到这一点吗?这就是我的答案。。。它将在getdriver中打开一个浏览器实例,并返回该实例,因为new只调用一次。如果它的打开次数超过一次,那么您的代码中有错误……为什么要避免使用静态变量?这似乎是单例的一个潜在候选。我正在从代码创建结果xml。在使用静态和并行执行时,静态驱动程序会导致问题。它将一个测试的结果覆盖为另一个测试的xml。
private WebDriver driver;
public void launch(){
    System.out.println("In base class");
    driver = new FirefoxDriver();
}
public WebDriver getDriver(){
    launch();
    return driver;
}