【问题标题】:driver instance in null in test classes测试类中的驱动程序实例为空
【发布时间】:2015-02-07 21:09:18
【问题描述】:

我正在使用 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
    }
}

但在测试类中,我得到空指针异常作为空的驱动程序实例。 驱动程序在测试类中为空的任何原因? 有没有办法在执行开始时只启动一个浏览器并在结束时关闭而不使用静态?

【问题讨论】:

  • 为什么要避免使用静态变量?这似乎是单身人士的潜在候选人。
  • 我正在从代码创建结果 xml。使用静态和并行执行静态驱动程序会导致问题。它是在另一个测试的 xml 中覆盖一个测试的结果。

标签: java selenium-webdriver webdriver


【解决方案1】:

从启动中删除 @Test 并从 getdriver 中调用启动。看来你可以在启动/ getdriver 中做同样的事情:

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

或

private WebDriver driver;
public void launch(){
    System.out.println("In base class");
    driver = new FirefoxDriver();
}
public WebDriver getDriver(){
    launch();
    return driver;
}

【讨论】:

  • 在这种情况下,每当我从任何测试类调用 getdriver() 时,它都会打开新的浏览器实例。我只想打开一次浏览器。是否可以在不使用静态驱动程序实例的情况下做到这一点?
  • 这就是我的答案......它将在 getdriver 中打开一个浏览器实例并返回该实例,因为 new 只被调用一次。如果它打开不止一次,那么你的代码做错了......
猜你喜欢
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
相关资源
最近更新 更多