Selenium1.0b2でXPCNativeWrapperによるテストエラー

これまで動いていたテストコードがSelenium1.0b2で動かない…大問題発生!? という事態が起こっています。

私もSelenium IDEのアドオンのアップデートで経験したのですが、OpenQAのほうでもCan not call javascript functions from browserbot anymoreというバグ報告がなされていました。

問題になる記述方法

これまで記述されていたほとんどのシチュエーションでエラーが起こります。

たとえば、普通にテストページのwindowオブジェクトを取得しようとした場合に以下のようにすると思いますが…

windowオブジェクトを取得するテストコード(XPCNativeWrapperによって失敗)

このように、すでにXPCNativeWrapperによってラップされているために、独自に追加したプロパティやメソッドにアクセスすることができません。

XPCNativeWrapperってなんだ?

mozilla developer center の、XPCNativeWrapperのところにそのものズバリの解説ページがあるのですが、要するにFirefoxが持っている機能で「よく分からないコードを勝手に追加・実行されないようにするために本来のオブジェクトをラッピングしてガードするもの」のようです。 なぜ、これがSeleniumに組み込まれているのかは謎ですが…

回避するにはどうするか?

ともかく、このやっかいな問題ですが、解決方法はありませんが回避方法はあります。 それは、対象のXPCNativeWrapperによってラップされたオブジェクト内のwrappedJSObject変数にアクセスして本来のオブジェクトを取り出す方法です。

windowオブジェクトを取得するテストコード(XPCNativeWrapperからwrappedJSObjectを取得して成功)

こうすれば、とりあえず生のwindowオブジェクトを取り出すことができます。 でも早く次のバージョンで解決してほしいものですね…

2008-07-28