2017-04-02 63 views
-1
public class Base 
{ 
    public WebDriver driver; 

    @BeforeMethod 
    public void setUp() 
    { 
     driver = new FirefoxDriver(); 
    } 

} 

public class useFunction extends Base 
{ 

    public useFunction(WebDriver driver) 
    { 
     this.driver = driver; 
    } 

    public void func1() 
    { 
     driver.findElement().click(); //driver is null 
     -------- 
     --------- 
    } 
} 

Public class Test extends Base 
{ 
    useFunction funObj = new useFunction(driver); 
    @Test 
    public void testMethod1() 
    { 
     funObj.func1(); 
     ---- 
     ------ 

    } 
} 

如何使用webdriver的實例中UseFunction class初始化值不聲明webdriver的實例作爲靜態的。當我通過駕駛員的UseFunction class構造而創建其對象內部Test class,得到空指針異常在基類構造如何使用初始化實例的webdriver從基類到子類的Java

+0

你能解釋一下爲什麼不使用你的驅動程序作爲靜態的嗎? –

回答

0

初始化網絡驅動器和在測試類延伸的基類然後分配駕駛員Base.driver。

以下代碼嘗試

基類:

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class Base 
{ 
public WebDriver driver; 

public Base(){ 
    driver = new ChromeDriver(); 
} 
} 

UseFunction類:

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 

public class useFunction 
{ 
    WebDriver driver; 

    public useFunction(WebDriver driver) 
    { 
    this.driver = driver; 
    } 

    public void func1() 
    { 
    driver.findElement(By.id("id of the element")).click(); 
    } 
    } 

測試1類:

import org.testng.annotations.Test; 

public class Test1{ 

@Test 
public void testMethod1() 
{ 
    Base base = new Base(); 
    useFunction funObj = new useFunction(base.driver); 
    funObj.func1(); 

} 
} 

試試吧,讓我知道它是否適合你

+0

我需要初始化它而不用聲明它爲** Static **。謝謝 – user3598844

+0

通過刪除驅動程序對象的靜態關鍵字更新我的答案,請驗證並讓我知道如果您有任何疑問 – Akarsh

+0

- 感謝。它以這種方式工作,但它是一個很好的做法,編寫整個邏輯初始化webdriver實例內部構造的基類。我如何使用註釋,或者如果我需要在初始化驅動程序後執行一些更多操作。 – user3598844