1

我試圖通過使用多組從外部excel表格登錄cridential的使用TestNG但在我所編寫的代碼之間登錄的Facebook拋出:解決NullPointerException異常在我的TestNG的測試用例

FAILED: f 
java.lang.NullPointerException 
    at DataDriven.loginRetesting.f(loginRetesting.java:31) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) 
    at org.testng.TestRunner.privateRun(TestRunner.java:767) 
    at org.testng.TestRunner.run(TestRunner.java:617) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:240) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149) 
    at org.testng.TestNG.run(TestNG.java:1057) 
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) 
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) 
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) 

代碼:

@Test 
    public void f() throws Exception{ 
     FileInputStream fi=new FileInputStream("E:\\workspace99\\SeleniumAutomations\\testdata\\LoginData.xls"); 
     Workbook w=Workbook.getWorkbook(fi); 
     Sheet s=w.getSheet(0); 
     for (int i = 1; i < 8; i++) { 
      driver.findElement(By.id("email")).sendKeys(s.getCell(0,i).getContents()); 
      driver.findElement(By.id("pass")).sendKeys(s.getCell(1,i).getContents()); 
      driver.findElement(By.id("u_0_1")).click(); 
      Thread.sleep(1000); 
      if (selenium.isElementPresent("id=userNavigationLabel")) { 
       //driver.findElement(By.cssSelector("span.gb_V.gbii")).click(); 
       driver.findElement(By.id("userNavigationLabel")).click(); 
       driver.findElement(By.cssSelector("input.uiLinkButtonInput")).click(); 
       Thread.sleep(1000); 
      } 
       else{ 
        System.out.println("invalid cridential"); 
        driver.findElement(By.id("email")).clear(); 
        driver.findElement(By.id("pass")).clear(); 

       } 


     } 

    } 

我無法找出問題出在哪裏?所以如何解決它。

回答

0

堆棧跟蹤表示問題是代碼中的第31行,但您的代碼段不允許我們確定第31行的位置。

您正在調用「selenium.isElementPresent」。 「硒」可能是零嗎?

1

空指針表示變量的執行值爲空。

請檢查文件是否存在於指定路徑「E:\ workspace99 \ SeleniumAutomations \ testdata \ LoginData.xls」中,並從文件中正確獲取該值。

+0

這個外部文件路徑是有效的路徑 – rishy

2

首先,不要在方法聲明中使用「throws Exception」。相反,使用「not null斷言」在方法內部設置try塊。

請記住,您從不想在測試方法中拋出典型的異常,因爲它會讓您早日退出測試生命週期並跳過您的@After階段。在@Before註釋的方法中引發的異常可能會導致SkipAssertion。

所以,你想要做的是失敗的斷言。因此,如果您有時會發生異常情況,請吞下異常(不要拋出異常)並使用斷言來處理異常。

例如:

try { 

} catch (NullPointerException e) { 
    Assert.assertTrue("There was an error in blah.", false); 
} 
相關問題