J'ai deux classes de Selenium Webdriver séparées. La classe que j'ai créée en premier s'exécute sans erreur, mais la seconde classe renvoie l'exception NullPointerException.
L'erreur indique la ligne suivante WebDriverWait wait = new WebDriverWait(driver,40);
. non seulement pour le WebDriverWait
l'exception NullPointer se déclenche si driver
est instancié dans une ligne de code. par exemple Actions action = new Actions(driver);
.
Le NullPointerException jette également sur le code ci-dessus. Mais le premier cours n'a pas de problème.Pourquoi l'exception NullPointerException se produit-elle sur le pilote Selenium?
La classe I fait d'abord
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();
}
}
La deuxième classe qui jette l'exception NullPointer
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");
}
}
classe testng pour la classe I fait 1er
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();
}
}
classe testng pour la classe I faite 2e
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();
}
}
erreur complète Messages
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
je teste les deux classes de testng individuellement et les deux classes sont indépendantes. Mais la 1ère classe s'exécute sans aucune exception de pointeur nul et la 2ème classe renvoie une exception nullpointer.
Où initialisez-vous le 'driver'? – Guy
Quel pilote? Je l'ai initialisé sur les deux classes –
Je ne vois aucune initialisation nulle part dans le code que vous avez fourni. – Guy