Firefoxでは、僕は主にDeveloper Editionを使っています。
先日、バージョン36へアップデートすると
『permission denied to access property 'call'』
というエラーが出て、user-extensions.jsで追加している自作コマンドが動かなくなりました。
因みにうちはまだ1.x系を使ってます
理由としては、
- テストケースを書くのはプログラマーとは限らない(超重要)
- WebDriverのコマンド体系はテスト向きではない*1。個人的には回りくどくて面倒に感じる
- ウチのターゲットは「フツーの業務用Webアプリ」が大半のため、WebDriverのウリである「よりネイティブに近い自動操作」は不要
といったところです。
ただしSelenium1.x系の保守は終息へ向かっている状況ですので、完全に開発がストップしたら、そこからは自分でフォークする覚悟です。
現象と解決策
閑話休題。
で、Firefoxのバージョンを上げただけで動かなくなるとか何?
と思いつつ、昔懐かしののprintfデバッグを行ってみたところ、jQuery.eachが原因であることが判明。ちょwwwおまwww
jQuery.eachなんて至るところで使ってるぞ?使わないように修正するは無理でごわす!
と思ったので、代用品を作ることにしました。
jQuery.fn.forEach = function(handler) { for (/** @type {!number} */ var i = 0; i < this.length; i++) { handler.call(this[i], i); } };
たったのこれだけ。あとはeachをforEachに入れ替えるだけで、問題なく動くようになりました。