我正在使用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 回答
您的webDriver也在其他类中声明,所以
驱动程序未在此处初始化 .
尝试重写
Base.openUrl()
方法以返回webDriver编辑:您的类字段对其他类可见,这是真的 . 但是为了从正确的类中获取一个,你应该尝试像
Base.driver
这样的东西,因为Base.driver != Login_Page.driver
edit2:这是工作类如何看起来的一个例子
}