我正在使用selenium webdriver,java进行自动化。获取 nullpointerexception 并表示驱动程序为空。
我的代码结构如下:
套餐实用程序
包添加用户
实用程序包代码:
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驱动程序,因此我将其声明一次并可以调用我项目中的任何位置。
答案 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();
}