2015-02-07 186 views
0

我用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

回答

0

從啓動中刪除@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

相關問題