无法使用EventFiringWebDriver检索WebDriver Wrapper

时间:2013-10-16 04:57:21

标签: java webdriver selenium-webdriver dynamic-proxy

我有自己的CustomDriver扩展ChromeDriver

public CustomDriver extends ChromeDriver

对于某些需要,我将CustomDriver包装在EventFiringWebDriver内。一切正常。但是当我尝试在EventFiringWebDriver中打开底层驱动程序时,我得到以下异常。

java.lang.ClassCastException: com.sun.proxy.$Proxy14 cannot be cast to com.test.CustomDriver.

以下是我试图解开我的驱动程序的代码。

    private CustomDriver extract(EventFiringWebDriver wd) {
        return (CustomDriver)  wd.getWrappedDriver();
    }

任何人都可以帮忙,这是Selenium 2.0的错误还是它所需要的功能,如果是,那么我怎么能实现它呢。

3 个答案:

答案 0 :(得分:1)

selenium修正的问题。上面提到的答案只是解决方法。请参考selenium的修复。

答案 1 :(得分:0)

在这种情况下,Selenium看起来像是使用JDK动态代理。此代理包含在您的实现中,有效地隐藏它。如果确实如此,您可以尝试Proxy.isProxyClass(wd)进行检查。一般情况下,无法从代理中提取代理人,但您可以尝试查看InvocatioinHandler获得的Proxy.getInvocationHandler(wd),可能是从CustomDriver提取的private CustomDriver extract(EventFiringWebDriver wd) { if (Proxy.isCroxyClass(wd)){ InvocationHandler ih = Proxy.getInvocationHandler(wd); // examine ih with debugger or reflection, your CustomDriver is likely to be somewhere inside } } :< / p>

{{1}}

答案 2 :(得分:0)

我可以用这种方式实现它。最终EventFiringWebDriver对代理对象做了什么并不重要。

public class EventFiringWebDriverWrapper extends EventFiringWebDriver {
    private WebDriver driver;

public EventFiringWebDriverWrapper(WebDriver driver) {
    super(driver);
    this.driver= driver;
}

@Override
public WebDriver getWrappedDriver() {
    return driver;

}
}

我可以通过这种方式提取它,这很不错

private CustomDriver extract(EventFiringWebDriverWrapper wd) {
    return  (CustomDriver) wd.getWrappedDriver();
 }