出现错误:java.lang.NullPointerException:无法调用“org.openqa.selenium.WebDriver.get(String)”,因为“this.driver”为空 我正在尝试创建示例框架,但面临问题,因为 url 无法正确打开,而且浏览器打开两次。
Chrome 浏览器打开两次,并且在调试驱动程序时我们看到空值。
以下是步骤定义文件:
公开课步骤{
private WebDriver driver;
Baseclass base = new Baseclass(driver);
Loginpage login = new Loginpage(driver);
public static Logger logfile = LogManager.getLogger(steps.class.getName());
@Given("open chrome browser")
public void openBrowser() {
base.intiatingDriver();
}
@And("Login to application url")
public void loginAppicaltionUrl() {
login.openUrlLogin("https://opensource-demo.orangehrmlive.com/web/index.php/auth/login");
}
@And("^enter the valid \"(.*)\"$")
public void enterValidUsername(String username) {
login.enteringUsername(username);
}
@And("^enter valid \"(.*)\"$")
public void enterValidPassword(String password) {
login.enteringPassword(password);
}
基类:
公共类基类{
private WebDriver driver=null;
public static Logger logfile = LogManager.getLogger(Baseclass.class.getName());
public static String parentWindow;
public Baseclass(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
public void intiatingDriver() {
driver =new ChromeDriver();
driver.manage().window().maximize();
}
public void openUrl() throws Throwable{
driver.get("https://opensource-demo.orangehrmlive.com/web/index.php/auth/login");
threadsleep(5000);
logfile.info("Url opened successfully");
}
public void sendKeysUsingCss(WebElement element,String username) {
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(40));
element.sendKeys(username);
}
登录班级:
公共课登录页面{
private WebDriver driver=null;
public Loginpage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
Baseclass base = new Baseclass(driver);
@FindBy(how=How.CSS, using="input[name^='username']")
private WebElement name;
@FindBy(how=How.CSS,using="input[name^='password']")
private WebElement passwrd;
public void openUrlLogin(String url) {
try {
driver.get(url);
driver.manage().window().maximize();
base.threadsleep(5000);
base.logfile.info("Url opened successfully");
} catch (Throwable e) {
e.printStackTrace();
System.out.println(e);
Assert.fail("Url not opened");
}
}
public void enteringUsername(String username) {
name.sendKeys(username);
}
您得到
NullPointerException
,因为您尚未初始化任何驱动程序实例。
在
BaseClass
和 LoginClass
中,您在构造函数中传递驱动程序,然后调用
PageFactory.initElements(driver, this);
。 initElements
方法期望驱动程序已经作为实例存在,但此时它为空。
此行在类创建时在运行时调用。此时您没有任何驱动程序实例,因此您会遇到异常。
private WebDriver driver;
Baseclass base = new Baseclass(driver);
Loginpage login = new Loginpage(driver);
要解决此问题,您应该创建一个方法来初始化驱动程序并在创建类之前调用。
private WebDriver driver;
@BeforeClass
public static void setupAll() {
WebDriverManager.getInstance().setup();
driver = new ChromeDriver();
}
其中
WebDriverManager
定义为 pom.xml
中的依赖关系
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.3.2</version>
</dependency>