2016-12-15 41 views
0

我想要使用getAttribute函數獲取屬性值,但是獲取NullPointerException。可能的原因似乎是在屬性值開始時的雙引號。Selenium WebDriver - 獲取「java.lang.NullPointerException」,同時試圖通過使用「getAttribute」獲取屬性值

任何人都可以提出其他選擇嗎?

硒Java命令:

driver.findElement(By.xpath("//tbody[@role='alert']/tr[@class='error']")).getAttribute("data-suppression-reason"); 

HTML代碼片段:

<tbody role="alert" aria-live="polite" aria-relevant="all"> 
    <tr class="odd"> 
    <tr class="even"> 
    <tr class="error" data-suppression-reason=""Email" is empty."> 
    <tr class="error" data-suppression-reason=""Email" is empty."> 
    <tr class="odd"> 
</tbody> 

堆棧跟蹤:

java.lang.NullPointerException 
    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: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.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132) 
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236) 
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81) 
+0

請張貼堆棧跟蹤爲好。 – Guy

+0

你確定你的'driver'被初始化了嗎? –

+0

表格在網頁上是否可見?發佈整個表格HTML代碼 –

回答

1

測試您的XPA你的html有2個問題。

  1. 關閉您的tr元素。這可能與html沒問題,但xpath預計格式良好xml

  2. 屬性值上的雙引號也將被視爲格式錯誤的xml。請逃避它們,例如使用&quot;代替""

+0

謝謝!你的建議有幫助。 –

+0

@SameerPatil請接受它作爲答案。 –

1

試試這個

List <WebElement> trElement = driver.findElements(By.xpath("//tbody[@role='alert']/tr[@class='error']")); 
for(WebElement tr_ele : trElement){ 
    sysout(tr_ele.getAttribute("data-suppression-reason")); 
} 

這應該打印使用類=錯誤考慮您的XPath是正確的每個元素的屬性內容。如果不工作,那麼你需要調查你的Element xpath。

或者您可以在上面的代碼中嘗試下面的定位器。

By.xpath("//td[@class='error']") 
By.Classname("error") 
css = "td[class='error']" 

希望這有助於

+0

沒有爲我工作。 –

相關問題