読者です 読者をやめる 読者になる 読者になる

この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

Firefox36ではSelenium IDE上でjQuery.eachが使えない

Firefoxでは、僕は主にDeveloper Editionを使っています。
先日、バージョン36へアップデートすると


permission denied to access property 'call'


というエラーが出て、user-extensions.jsで追加している自作コマンドが動かなくなりました。

因みにうちはまだ1.x系を使ってます

理由としては、

  • テストケースを書くのはプログラマーとは限らない(超重要)
    • 少なくともウチは開発要員とテスト要員は分けてますし、テスト要員の中にはプログラミングができない人もいるのでSelenium IDEは必須
    • Selenium BuilderはUIが良くないし動作もやや不安定。業務用途はまだ厳しいという感想
  • 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に入れ替えるだけで、問題なく動くようになりました。

*1:汎用Webオートメーションツールを標榜しているので当然ではあるが。