2017-09-08 6 views
0

@BeforeTestを実行した後に@Testの部分にjava.lang.NullPointerExceptionと表示されます。@BeforeTestの中でコードを実行した後に、@ Testの与えられたヌルポインタの例外

エラーが表示さ:

Starting ChromeDriver 2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8) on port 34173 
    Only local connections are allowed. 
    Sep 08, 2017 10:40:43 AM org.openqa.selenium.remote.ProtocolHandshake createSession 
    INFO: Detected dialect: OSS 
    FAILED CONFIGURATION: @AfterTest Aftertest 
    java.lang.NullPointerException 
     at SampleTesting.Test1.Aftertest(Test1.java:71) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108) 
     at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:523) 
     at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:224) 
     at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:146) 
     at org.testng.TestRunner.afterRun(TestRunner.java:958) 
     at org.testng.TestRunner.run(TestRunner.java:606) 
     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.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132) 
     at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230) 
     at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76) 

    FAILED: Test1 
    java.lang.NullPointerException 
     at SampleTesting.Test1.Test1(Test1.java:27) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     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.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132) 
     at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230) 
     at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76) 


    =============================================== 
     Default test 
     Tests run: 1, Failures: 1, Skips: 0 
     Configuration Failures: 1, Skips: 0 
    =============================================== 


    =============================================== 
    Default suite 
    Total tests run: 1, Failures: 1, Skips: 0 
    Configuration Failures: 1, Skips: 0 
    =============================================== 

コードに使用

package SampleTesting; 
    import org.testng.annotations.Test; 
    import org.testng.annotations.BeforeTest; 
    import org.testng.annotations.AfterMethod; 
    import org.testng.annotations.AfterTest; 
    import org.testng.annotations.BeforeMethod; 
    import org.testng.*; 

    import java.util.Date; 
    import java.util.concurrent.TimeUnit; 

    import org.openqa.selenium.By; 
    import org.openqa.selenium.WebDriver; 
    import org.openqa.selenium.WebElement; 
    import org.openqa.selenium.chrome.ChromeDriver; 
    import org.openqa.selenium.chrome.ChromeOptions; 
    import org.openqa.selenium.support.ui.Select; 

    public class NameClassTest { 

     WebDriver driver; 
     ChromeOptions options; 


     @Test 
     public void Test1() { 
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
      WebElement tabAgreement = driver.findElement(By.xpath("***Value***")); 
      tabAgreement.click(); 

      WebElement btnNew = driver.findElement(By.xpath("***Value***")); 
      btnNew.click(); 

      Select lstRecordType = new Select(driver.findElement(By.id***Value***)); 
      lstRecordType.selectByVisibleText("MSA"); 

      WebElement btnContinue = driver.findElement(By.xpath("***Value***")); 
      btnContinue.click(); 

      WebElement txtAgreementName = driver.findElement(By.xpath("***Value***")); 
      txtAgreementName.clear(); 
      txtAgreementName.sendKeys("***Value***"); 

      Date date = new Date(); 
      System.out.println("Date is "+ date); 


     } 
     @BeforeTest 
     public void BeforeTest() { 
      options = new ChromeOptions(); 
      options.addArguments("user-data-dir=C:\\\\Users\\UserName\\AppData\\Local\\Google\\Chrome\\User Data"); 
      String exepath = 

     "C:\\\\Users\\UserNAme\\Downloads\\chromedriver_win32\\chromedriver.exe"; 
       System.setProperty("webdriver.chrome.driver",exepath); 
       WebDriver driver = new ChromeDriver(options); 
       driver.manage().window().maximize(); 
       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
       driver.get("***URL***"); 
       WebElement userName = driver.findElement(By.id("username")); 
       WebElement password = driver.findElement(By.id("password")); 
       WebElement btnLogin = driver.findElement(By.id("Login")); 

       userName.sendKeys("****userName****"); 
       password.sendKeys("****password****"); 
       btnLogin.click(); 

      } 

      @AfterTest 
      public void Aftertest() { 
       WebElement drpUserName = driver.findElement(By.id***Value***); 
       drpUserName.click(); 

       WebElement lnkLogout = driver.findElement(By.xpath(***Value***)); 
       lnkLogout.click(); 

       driver.close(); 

      } 

     } 

TestNG.xmlファイル

  <?xml version="1.0" encoding="UTF-8"?> 
      <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
      <suite name="Suite_SuiteName"> 
       <test name="Test_TestName"> 
       <classes> 
        <class name="SuiteName.ClassName"/> 
       </classes> 
       </test> <!-- Test_TestName --> 
      </suite> <!-- Suite_SuiteName --> 

@BeforeTestのブロックを正常に実行していますが、そのときには@Testの部分にエラーメッセージ-が書き込まれます。私は自分のコードでここで何を間違えたのかよく分かりません。

答えて

0

これは、@BeforeMethod注釈付きメソッドにWebDriver driver = new ChromeDriver(options);と記載されているためです。そのため、あなたのwebdriverインスタンスは、そのメソッドに対してのみ制限されています。だから、

それはドライバーがこれだけまだ問題がある場合は、私に教えてくださいWebDriver

@BeforeTest 
    public void BeforeTest() 
    { 
     options = new ChromeOptions(); 
     options.addArguments("user-data-dir=C:\\\\Users\\UserName\\AppData\\Local\\Google\\Chrome\\User Data"); 
     String exepath = "C:\\\\Users\\UserNAme\\Downloads\\chromedriver_win32\\chromedriver.exe"; 
     System.setProperty("webdriver.chrome.driver",exepath); 
     driver = new ChromeDriver(options); // remove "WebDriver" from this line 
     driver.manage().window().maximize(); 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
     driver.get("***URL***"); 

ここからを削除 NullPointerException

をスロー初期化されていませんでしょう@testアノテーション付きメソッドに行けば。感謝:)あなた@BeforeTest注釈付きの方法では

+0

ありがとうTuks。今働いている。 – Santy6192

0

あなたがヒット、これはあなたの@Testメソッドは、ドライバにアクセスしようとすると、あなたのコードは非常にクラスレベルのデータメンバをシャドウとになり

WebDriver driver = new ChromeDriver(options);

このラインを持っていますa NullPointerException

これを修正するには、@BeforeTest注釈付きの方法でをdriver = new ChromeDriver(options);に変更してください。

@BeforeTestメソッドが<test>タグごとに1回しか呼び出されないため、@BeforeTestを使用する代わりに、次のいずれかを使用することをお勧めします。あなたは@BeforeTest方法に依存している2つのテストクラスを持っているのであれば、あなたは再びNullPointerException

  1. @BeforeClassを見ている - webdriverをテストクラスごとに一度インスタンス化され、その後のすべての@Test方法で共有されるように、クラス。問題は、並列実行がテストメソッドをお互いの靴に乗せさせる可能性があるため、逐次実行のみに頼る必要があることです。
  2. @BeforeMethod - ウェブドライブが@Testメソッドごとに1回実行されるようにします。これにより、すべてのテストメソッドに対してブラウザがスピンオフされます。この方法の裏側は、メソッドを並列に実行する場合は、ThreadLocalを使用する必要があるということです。シーケンシャル実行が問題ない場合は、何も追加する必要はありません。
+0

スクリプトを強化する2つの方法を共有してくれてありがとうKrishnan。 – Santy6192

0

後述するように、あなたの問題を解決することを、webdriverを外@BeforeTests のオブジェクトを作成する

public class nameClassTest { 
WebDriver driver = new ChromeDriver(options); 

    @BeforeTest 
     public void BeforeTest() 
{ 

} 

を試してみてください。

関連する問題