驱动程序实例在测试类

问题描述:

我用TestNG + webdriver的&初始化浏览器在以下way-驱动程序实例在测试类

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? 有没有办法在执行开始时只启动一个浏览器&最后关闭而不使用静态?

+0

为什么你想避免静态变量?这似乎是一个单身人士的潜在候选人。 – Jordan 2015-02-08 15:26:12

+0

我从代码创建结果xml。在使用静态和并行执行静态驱动程序导致问题。它是在另一个测试的xml中覆盖一个测试的结果。 – Deepak 2015-02-08 17:20:04

从启动中删除@Test并从getdriver中调用启动。它似乎你可以做同样的事情在发射/ getdriver为:

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

OR

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

在这种情况下,每当我从任何测试类调用getdriver()时,它都会打开新的浏览器实例。我只想打开一次浏览器。有没有可能做到这一点,而不使用静态驱动程序实例? – Deepak 2015-02-08 06:29:07

+0

这就是我的答案......它将在getdriver中打开一个浏览器实例,并且将返回该实例,因为新函数只被调用一次。如果它的开放次数超过一次,那么你在代码中做错了什么...... – 2015-02-08 10:31:58