2016-12-15 5 views
0

Ich versuche, erhalten Attributwert mit getAttribute Funktion von Selen aber bekommen NullPointerException. Möglicher Grund scheint doppelte Anführungszeichen am Anfang des Attributwerts zu sein.Selenium WebDriver - Get "java.lang.NullPointerException" beim Versuch, Attributwert mit "getAttribute"

Kann jemand andere Option vorschlagen?

Selen Java-Befehl:

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

HTML-Code-Schnipsel:

<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> 

Stack Trace:

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

Bitte senden Sie das Stack-Trace auch. – Guy

+0

Sind Sie sicher, dass Ihr 'Treiber' initialisiert ist? –

+0

Ist die Tabelle für Sie auf der Webseite sichtbar? Veröffentlichen Sie den gesamten Tabellen-HTML-Code –

Antwort

1

Getestet Ihre xpa th, 2 Probleme mit Ihrem HTML.

  1. Schließen Sie Ihre tr Elemente. Es kann in Ordnung mit HTML sein, aber xpath erwartet wohlgeformtes xml

  2. Die doppelten Anführungszeichen auf dem Attributwert werden auch als missformed xml behandelt. Bitte entgeht ihnen, z.B. verwenden &quot; statt ""

+0

Danke! Ihre Vorschläge haben geholfen. –

+0

@SameerPatil Bitte akzeptieren Sie es als Antwort. –

1

Versuchen Sie, diese

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")); 
} 

Dies sollte Ihr Attribut Inhalt für jedes Element mit class = Fehler Unter Berücksichtigung Ihrer XPath richtig ist drucken. Wenn das nicht funktioniert, müssen Sie den Element-XPath untersuchen.

Alternativ können Sie unter Locators im obigen Code versuchen.

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

hoffe, das hilft

+0

Hat nicht für mich gearbeitet. –

Verwandte Themen