无法使用 EventFireringWebDriver 检索 WebDriver 包装器



我有自己的CustomDriver,可以扩展ChromeDriver

public CustomDriver extends ChromeDriver

出于某种需要,我将自定义驱动程序包装在EventFiringWebDriver内。一切正常.但是当我尝试在事件射击Web驱动程序中解开下面的驱动程序时,我得到以下异常。

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的错误还是所需的功能,如果是,那么我该如何实现它。

硒修复的问题。上面提到的答案只是变通方法。请参考硒的修复。

在这种情况下,

Selenium 似乎使用 JDK 动态代理。此代理被包装在您的实现中,有效地隐藏了它。您可以尝试Proxy.isProxyClass(wd)检查,如果这是真的。一般来说,没有办法从代理中抽取委托,但您可以尝试查看Proxy.getInvocationHandler(wd)获得的InvocatioinHandler,很有可能可以从那里提取您的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
    }
}

我可以通过这种方式实现它。对我来说,EventFireringWebDriver最终对代理对象做什么并不重要。

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

最新更新