2016-05-27 9 views
0

ich meine EventListner Klasse haben wie unten:Treiber-Instanz nicht beibehalten wird, wenn mit WebDriverEventListener mit

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.support.events.WebDriverEventListener; 

public class EventHandlerEx implements WebDriverEventListener 
{ 
    public void afterChangeValueOf(WebElement arg0, WebDriver arg1) 
    { 
     System.out.println("After change value of "+arg0.toString()); 
    } 

    public void beforeChangeValueOf(WebElement arg0, WebDriver arg1) 
    { 
     System.out.println("Before change value of "+arg0.toString()); 
    } 

    public void afterClickOn(WebElement arg0, WebDriver arg1) 
    { 
     System.out.println("After Click on "+arg0.toString()); 
    } 


    public void beforeClickOn(WebElement arg0, WebDriver arg1) 
    { 
     System.out.println("Before Click on "+arg0.toString()); 
    } 

    public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) 
    { 
     System.out.println("After find by on "+arg1.toString()+" using "+arg0.toString()); 
    } 

    public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) 
    { 
     System.out.println("Before find by on "+arg1.toString()); 
    } 

    public void afterNavigateBack(WebDriver arg0) 
    { 

    } 

    public void afterNavigateForward(WebDriver arg0) 
    { 

    } 

    public void afterNavigateTo(String arg0, WebDriver arg1) 
    { 
     System.out.println("After navigating to "+arg0.toString()); 
    } 

    public void afterScript(String arg0, WebDriver arg1) 
    { 

    } 

    public void beforeNavigateBack(WebDriver arg0) 
    { 

    } 

    public void beforeNavigateForward(WebDriver arg0) 
    { 

    } 

    public void beforeNavigateTo(String arg0, WebDriver arg1) 
    { 
     System.out.println("Before navigating to "+arg0.toString()+" with driver "+arg1.toString()); 
    } 

    public void beforeScript(String arg0, WebDriver arg1) 
    { 

    } 

    public void onException(Throwable arg0, WebDriver arg1) 
    { 

    } 

    public void afterNavigateRefresh(WebDriver driver) 
    { 

    } 

    public void beforeNavigateRefresh(WebDriver driver) 
    { 

    } 
} 

Und meine Mail-Klasse ist wie folgt:

public class testEventHandler 
{ 
    public static void main(String[] args) 
    { 
     System.setProperty("webdriver.chrome.driver", "D:\\Java Jars\\chromedriver.exe"); 
     WebDriver driver=new ChromeDriver(); 
     EventFiringWebDriver eveDriver=new EventFiringWebDriver(driver); 
     EventHandlerEx objHandle=new EventHandlerEx(); 

     eveDriver.register(objHandle); 

     eveDriver.get("http://www.google.com"); 
     eveDriver.findElement(By.name("q")).sendKeys("Cheese"); 
     eveDriver.findElement(By.className("sbico")).click(); 
     System.out.println(eveDriver.getTitle()); 
     eveDriver.quit(); 
     eveDriver.unregister(objHandle); 
    } 
} 

Hier öffnet der Browser und führt die erste Anweisung, aber der Treiber wird null, wenn er versucht, die 2. Anweisung auszuführen.

Kann mir jemand sagen, was ich hier vermisse?

Ausgang:

Starting ChromeDriver 2.16.333243 (0bfa1d3575fc1044244f21ddb82bf870944ef961) on port 42808 
Only local connections are allowed. 
Before navigating to http://www.google.com with driver ChromeDriver: chrome on XP (054108d6683078d5d8d3506574935e7e) 
After navigating to http://www.google.com 
Exception in thread "main" java.lang.NullPointerException 
    at EventHandlerEx.beforeFindBy(EventHandlerEx.java:37) 
    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.openqa.selenium.support.events.EventFiringWebDriver$1.invoke(EventFiringWebDriver.java:80) 
    at com.sun.proxy.$Proxy0.beforeFindBy(Unknown Source) 
    at org.openqa.selenium.support.events.EventFiringWebDriver.findElement(EventFiringWebDriver.java:187) 
    at testEventHandler.main(testEventHandler.java:20) 
+0

Können Sie sich dieses Beispiel ansehen https://gist.github.com/krmahadevan/1728633 – selva

+0

Ich bemerkte, dass "WebElement arg1" in afterFindBy oder beforeFindBy null wird. Nicht sicher warum und wie wir dieses Element bekommen können? – Uday

Antwort

0

Ich habe auch das gleiche Problem, in EventHandlerEx Klasse, für jedes Verfahren, bei dem Sie WebElement Variable verwenden, WebElement wurde für null und deshalb haben wir Nullpointer bekommen.

public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) 
    { 
     System.out.println("Before find by on "+arg1.toString()); 
    } 

für die Problemumgehung, ich verwendet von Variable anstelle von WebElement.

Verwandte Themen