如何在全球范围内初始化Web驱动程序?

时间:2015-06-10 05:26:47

标签: java selenium-webdriver nullpointerexception

我正在使用selenium webdriver,java进行自动化。获取 nullpointerexception 并表示驱动程序为空。

我的代码结构如下:

套餐实用程序

  • 基类
  • 登录类
  • App_constant Class

包添加用户

  • 添加用户类

实用程序包代码:

 package Utility;

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

public class Base {

public static WebDriver driver = null;


//CALL WEB BROWSER AND OPEN WEBSITE
public static void openURL()
{

    try{

    System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
    driver = new ChromeDriver();
    driver.get(Constant_value_utility.URL);
    }catch(Exception E)

    {
        E.printStackTrace();


    }
}

 }
package Utility;

public class Constant_value_utility {


//OPEN URL
public static final String URL = "Site URL";


//LOGIN FIELDS
public static final String loginbox = "UserName";
public static final String passbox = "Password";

//LOGIN DATA
public static final String username = "test";
public static final String password = "test";
public static final String loginbt = "btnsubmit";

  }

}

添加用户包代码

 package Utility;

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


 public class Login_Page {

public static WebDriver driver;


public static void login()
{

       Base.openURL();


       driver.manage().window().maximize();

       driver.findElement(By.id(Constant_value_utility.loginbox)).sendKeys(Constant_value_utility.username);
       driver.findElement(By.id(Constant_value_utility.passbox)).sendKeys(Constant_value_utility.password);
       driver.findElement(By.id(Constant_value_utility.loginbt)).click();

  }

现在我的问题是我已经在基类中创建了公共静态方法 openurl(),并在那里初始化了webdriver。但是当我在同一个包和其他包的其他类中调用相同的方法时,为什么它为webdriver提供了nullpointerexception?

是否有必要编写代码来初始化webdriver并在每个类中调用浏览器。如何在全局范围内初始化Web驱动程序,因此我将其声明一次并可以调用我项目中的任何位置。

1 个答案:

答案 0 :(得分:1)

您的webDriver也在其他类中声明,所以

   Base.openURL();


   driver.manage().window().maximize();

驱动程序未在此处初始化。

尝试重写您的Base.openUrl()方法,以便返回webDriver

编辑:您的类字段对其他类可见,这是真的。但是为了从正确的班级中获得一个,你应该尝试Base.driver之类的东西。 因为Base.driver != Login_Page.driver

edit2:这是工作类看起来像

的一个例子
   package Utility;

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


   public class Login_Page {

   //public static WebDriver driver;


   public static void login()
   {

   Base.openURL();

   //note the change from driver  to Base.driver
   Base.driver.manage().window().maximize();
   Base.driver.findElement(By.id(Constant_value_utility.loginbox)).sendKeys(Constant_value_utility.username);
   Base.driver.findElement(By.id(Constant_value_utility.passbox)).sendKeys(Constant_value_utility.password);
   Base.driver.findElement(By.id(Constant_value_utility.loginbt)).click();

}