2017-08-24 60 views
-1

只需投入Java!試圖實現BDD風格的框架...... 我遇到這個問題跨類|創建webdriver實例硒Java

我Driver.java看起來是這樣的:

public class Driver { 

    public static WebDriver Instance; 


    @Before 
    public void InitializeTest() { 
     System.setProperty("webdriver.chrome.driver", "C://chromedriver.exe"); 
     Instance = new ChromeDriver(); 
    } 


    @After 
    public void TearDownTest(Scenario scenario) { 
     //close the browser 
     if (scenario.isFailed()) { //take Screenshot 
      System.out.println(scenario.getName()); 
     } 

     Instance.close(); 
    } 

} 

我的步驟定義文件:

public class MyStepdefs { 

    public static String Url = "https://ebay.com/staging/"; 
    LoginPage loginPage = new LoginPage(); 

    @Given("^I login to Ebay as \"([^\"]*)\"$") 
    public void iLoginToEbayAs(String username) throws Throwable { 
     Driver.Instance.navigate().to(Url); 
     loginPage.setUserName().sendKeys(username); 
     loginPage.setPassword().sendKeys("seeeev"); 
    } 

收到此錯誤:

java.lang.NullPointerException 
    at Steps.MyStepdefs.iLoginToEbayAs(MyStepdefs.java:4) 

MyStepdefs.java:4 == Driver.Instance.navigate().to(Url);

幫我通過這個!

+0

你從未提及過你面臨的問題? –

+0

對不起,芽!剛剛更新... – cashanzlo

+0

您正在使用哪個庫或測試框架? –

回答

0

您在步驟定義中缺少參數。它應該在下面給出。

@Given("^I login to Ebay as \"([^\"]*)\"$") 
public void iLoginToEbayAs(String role) throws Throwable { 
    Driver.Instance.navigate().to(Url); 
} 

您是否已經導入了驅動程序類?

+0

對不起Murthi ...剛剛更新了步驟定義文件...我沒有通過字符串 – cashanzlo

+0

是否有代碼中的導入? – Myszsoda

+0

@Myszsoda有! – cashanzlo

1

您的Driver類永遠不會被初始化,我打賭Instance爲null。我認爲你至少有兩個選擇,可能更多的方式,但這是我在想什麼。

  1. 而不是使用@Before,因爲你沒有在類中的任何測試方法永遠也不會被執行的,只是使您按順序調用靜態「初始化」的方法來初始化實例變量

  2. 使您的Driver類成爲MyStepDefs類擴展的抽象類。當你運行方法iLoginToEbayAs()時,它會默認調用父類中的@Before方法,並按照你的預期初始化你的Instance變量。

目前,如果您在@Before方法中設置斷點,我打賭它永遠不會執行,因此NPE。