0

我有我自己的CustomDriver扩展ChromeDriver

public CustomDriver extends ChromeDriver

对于某些需要,我将 CustomDriver 包装在EventFiringWebDriver.Everything 中。一切正常。但是当我尝试在 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 的错误还是它所需的功能,如果是,那么我该如何实现它。

4

3 回答 3

1

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

于 2013-10-22T16:14:10.367 回答
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();
 }
于 2013-10-16T17:03:51.280 回答
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
    }
}
于 2013-10-16T05:36:08.850 回答