首页 文章

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

提问于
浏览 1362 次
0

我正在使用selenium webdriver,java进行自动化 . 得到 nullpointerexception ,它说驱动程序为空 .

我的代码结构如下:

Package Utility

  • 基类

  • 登录类

  • App_constant类

Package Add user

  • 添加用户类

Utility package code :

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();

  }

}


Add user Package code

package Adduser;
import Utility.Base;
 import Utility.Login_Page;

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

 public class Add_User {

  public static void main(String[] args){
   {


    //LOGIN TO SITE
     Base.openURL();
     Login_Page.login();
    }}}

现在我的问题是我已经在基类中创建了 public static method openurl()并且在那里初始化了webdriver . 但是当我在同一个包和其他包中的其他类中调用相同的方法时,为什么它给了我对webdriver的nullpointerexception?

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

1 回答

  • 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();
    

    }

相关问题