0

私はCustomDriver拡張する独自のものを持っていますChromeDriver

public CustomDriver extends ChromeDriver

必要に応じて、 CustomDriver をEventFiringWebDriver.Everything is working fine 内にラップしています。しかし、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によって修正されました。上記の回答は回避策です。セレンからの修正を参照してください。

于 2013-10-22T16:14:10.367 に答える
0

この場合、Selenium は JDK 動的プロキシを使用しているようです。このプロキシは実装を包み込み、効果的に隠します。Proxy.isProxyClass(wd)これが本当かどうかを確認してみてください。一般に、プロキシからデリゲートを抽出する方法はありませんが、 Geted InvocatioinHandlerbyを調べることはできます。そこから抽出できる可能性があり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 に答える