0

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.

+3

Où initialisez-vous le 'driver'? – Guy

+0

Quel pilote? Je l'ai initialisé sur les deux classes –

+1

Je ne vois aucune initialisation nulle part dans le code que vous avez fourni. – Guy

Répondre

0

Il semble que votre code n'ait pas inité WebDriver et essaie de l'utiliser, alors il lance le NullPointerException. Dans TestNG, vous pouvez utiliser @BeforeSuite, @BeforeTest, @BeforeClass pour initialiser vos dépendances. L'exemple ci-dessous montre comment initialiser le pilote web dans '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(); 
    } 

}