1

会社の製品の一部として、ユーザーはブラウザーにブックマークレット (URL を開く代わりに JavaScript コードを実行するブックマーク ボタン) を追加する必要があります。ブックマークレットのソース コードは次のとおりです。

javascript: (function () {
            var d = document;
            var script = d.createElement('scr'+'ipt');
            script.src = 'https://<Company_URL>/Bookmarklet/ScriptContent?scriptFile=bm-script.js&rnd=' + Math.floor(Math.random() * 99999);
            if (typeof script.onload === 'object') {
                script.onload = function () {
                     doGeneralScript();
                 };
            }
            else {
                script.onreadystatechange = function() {
                    if (this.readyState == 'complete' || this.readyState == 'loaded') {
                        doGeneralScript();
                    }
                };
            }
            d.getElementsByTagName('head')[0].appendChild(script);
            }());

コードは基本的に、いくつかのコントロールを含むフレーム ポップアップを開きます。ユーザーの次のステップは、コントロールの 1 つをクリックすることです。その間、Selenium IDE は共通領域の外にあるボタンをクリックすることができないため、Selenium IDE でブックマークレットに関連付けられたスクリプトを実行するには 2 つの方法があります。

  1. ワンライナー スクリプトを作成し、「open」ステートメントを作成します。Firefox ブラウザー バージョン 11.0 では完全に動作しますが、Firefox 23.0 では致命的ではないエラーが発生します。最終的に、スクリプトはエラーをスローした後に再開します。
  2. リクエストに応じてスクリプトを実行するカスタム ユーザー拡張機能を作成する

Selenium Core 拡張機能 (user-extensions.js) に以下の 3 つの拡張機能を追加してみました

Selenium.prototype.doMbProduction = function()
    {
      var d = document;
      var script = d.createElement('scr' + 'ipt');
      script.src = 'https://<Company_URL>/Bookmarklet/ScriptContent?scriptFile=bm-script.js&rnd=' + Math.floor(Math.random() * 99999);
      if (typeof script.onload === 'object') {
          script.onload = this.doRunGeneralScript();
      } else {
          script.onreadystatechange = this.doPerformLoad();
      }
      d.getElementByTagName('head')[0].appendChild(script);
    }

    Selenium.prototype.doRunGeneralScript = function(){
      script.doGeneralScript();
    }

    Selenium.prototype.doPerformLoad = function()
    {
if (this.readyState == 'complete' || this.readyState == 'loaded') {
    this.doRunGeneralScript();
      }
    }

しかし、それはうまくいきません。コマンドmbProductionを実行すると、スクリプトは致命的なエラーをスローします

[エラー] 予期しない例外: ReferenceError: スクリプトが定義されていません。ファイル名 -> chrome://selenium-ide/content/tools.js -> ファイル:///C:/Users/3pf/Downloads/sideflow1.js?1376849717650、行番号 -> 124

カスタム ユーザー拡張機能の 124 行目は script.doGeneralScript(); です。

誰かが私が間違っていることを見つけるのを手伝ってくれますか? 役立つ提案は大歓迎です。

4

2 に答える 2

1

私は同じ問題に遭遇しました。私がそれを修正するためにそれをしたことの下に:

  1. 「user-extensions.js」というファイル名でファイルを作成します。
  2. このファイルをサイトのパブリック ディレクトリに保存します。
  3. このファイルを [オプション] > [オプション] > [Selenium Core extensions (user-extensions.js)] にロードします。
  4. セレンを再起動する

スクリプトが見つからないというエラーのポップアップが表示される場合がありますが、そうではありません。動作するはずです。

user-extensions.js ファイルを更新したら、Seleniumを再起動する必要があります。「開発者ツールを有効にする」チェックボックスをオンにして、「リロード」ボタンを押すことができるようにします。これにより、Selenium を再起動せずにスクリプトをリロードできるようになります。

于 2013-11-07T15:19:54.830 に答える