与WebDriverEventListener一起使用时,驱动程序实例不会保留

时间:2016-05-27 07:24:49

标签: selenium-webdriver webdriver

我的EventListner类如下所示:

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

    }
}

我的邮件类如下:

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

此处浏览器打开并执行第一个语句,但驱动程序在尝试执行第二个语句时变为空。

有人能告诉我这里缺少什么吗?

输出:

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)

1 个答案:

答案 0 :(得分:0)

我在EventHandlerEx类中也遇到了同样的问题,对于任何使用WebElement变量的方法,WebElement变为null,这就是我们得到NULLPOINTEREXCEPTION的原因。

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

对于变通方法,我使用By变量而不是WebElement。