我的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)
答案 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。