2017-08-24 77 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。