gpt4 book ai didi

java - 为什么Selenium驱动上会出现NullPointerException?

转载 作者:行者123 更新时间:2023-12-02 12:11:23 25 4
gpt4 key购买 nike

我有两个独立的 Selenium Webdriver 类。我创建的第一个类运行时没有任何错误,但第二个类抛出 NullPointerException。
错误指出以下行WebDriverWait wait = new WebDriverWait(driver,40);。不仅对于 WebDriverWait,如果在代码行中实例化 driver,也会引发 NullPointer 异常。例如Actions action = new Actions(driver);
NullPointerException 也会在上面的代码中抛出。但第一个类没有任何问题。

我首先制作的类(class)

package Initiate;

import dataProvider.CommonClass;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.util.concurrent.TimeUnit;

public class NewBOM {

public WebDriver driver;
By newBomButton = By.id("btnUpdate");

public NewBOM(WebDriver driver){
this.driver=driver;
this.CreateNewBOM();

}

public void CreateNewBOM(){
Actions action = new Actions(driver);
WebDriverWait wait = new WebDriverWait(driver, 40);
wait.pollingEvery(2, TimeUnit.SECONDS);

WebElement newBomBtn = driver.findElement(newBomButton);
wait.until(ExpectedConditions.elementToBeClickable(newBomBtn));
action.moveToElement(newBomBtn).click().build().perform();
}
}

抛出空指针异常的第二个类

package Initiate;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.WebDriverWait;


public class NewBOO {
public WebDriver driver;

public NewBOO(WebDriver driver){
this.driver=driver;
}

public void test() throws InterruptedException {
WebDriverWait wait = new WebDriverWait(driver,40);
System.out.println("Test print");
}
}

我第一个类(class)的 TestNg 类(class)

import Initiate.NewBOM;
import org.junit.BeforeClass;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;

public class CreateBOM {
public WebDriver driver;

private NewBOM objNewBOM;

@Test(priority = 1)
public void clickOnNewBOMButton(){
objNewBOM = new NewBOM(driver);
objNewBOM.CreateNewBOM();
}

}

我取得第二名的类(class)的 TestNg 类(class)

import Initiate.NewBOO;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;

public class CreateBOO {
public WebDriver driver;
NewBOO objNewBOO;
@Test(priority = 1)
public void temporyTest() throws InterruptedException {
objNewBOO = new NewBOO(driver);
objNewBOO.test();
}
}

完整错误消息

java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:787)
at org.openqa.selenium.support.ui.FluentWait.<init>(FluentWait.java:96)
at org.openqa.selenium.support.ui.WebDriverWait.<init>(WebDriverWait.java:71)
at org.openqa.selenium.support.ui.WebDriverWait.<init>(WebDriverWait.java:45)
at Initiate.NewBOO.test(NewBOO.java:17)
at CreateBOO.temporyTest(CreateBOO.java:11)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:744)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)


===============================================
Default Suite`enter code here`
Total tests run: 1, Failures: 1, Skips: 0
===============================================


Process finished with exit code 0

我单独测试了两个 testNg 类,并且两个类都是独立的。但是第一个类运行时没有任何空指针异常,而第二个类则抛出空指针异常。

最佳答案

看起来您的代码没有初始化 WebDriver 并尝试使用它,因此它抛出了 NullPointerException。在TestNG中,您可以使用@BeforeSuite、@BeforeTest、@BeforeClass来初始化您的依赖项。下面的示例展示了如何在“BeforeClass”中初始化网络驱动程序。

import Initiate.NewBOM;
import org.junit.BeforeClass;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;

public class CreateBOM {
public WebDriver driver;

private NewBOM objNewBOM;

@BeforeClass
public void setupClass(){
driver = new FirefoxDriver();
}

@Test(priority = 1)
public void clickOnNewBOMButton(){
objNewBOM = new NewBOM(driver);
objNewBOM.CreateNewBOM();
}

}

关于java - 为什么Selenium驱动上会出现NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46520042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com