0

LocatorBuilder 関数を定義し、それを LocatorBuilders 配列の最初の要素として挿入しました。それはうまく機能しています。ただし、関数の先頭に alert() を追加すると、記録されたユーザーのクリックごとに関数が 2 回呼び出されていることがわかります。具体的には、記録をオンにしてページ上のボタンをクリックすると、一連のイベントは次のようになります。1) 関数が呼び出され、2) 作成したロケーター式を使用してクリックが記録され、3) ブラウザーがクリックを処理します。 、 4) 関数が再度呼び出されます。

注 - これはどこにも文書化されていませんが、基本的に、レコーダーは LocatorBuilders リスト内の各関数を呼び出し、ページ上の 1 つの要素と正確に一致する null 以外の式を取得するまで、候補のロケーター式を返します。 .

したがって、私の関数は期待どおりに機能しますが、余分な関数呼び出しは冗長に見えます。式ビルダー関数を複数回呼び出す必要がある正当な理由はありますか? たとえば、件名の HTML 要素が呼び出し間で変わる可能性はありますか? 私の関数への連続した呼び出しの間にレコーダーは何をしていますか?

編集:DOH!関数を LocatorBuilders.order リストに 2 回追加していることに気付きました。したがって、私の関数は 2 回しか呼び出されません。それでも、なぜ複数の呼び出しが必要なのですか?

4

1 に答える 1

0

LocatorBuilders.add(name, func) を介して locator-builder を定義すると、Selenium は名前をグローバル配列 LocatorBuilders.order に追加します。レコーダーは、ユーザー イベントごとにこれらの名前を反復処理し、各ビルダー関数を順番に呼び出します。

カスタム定義は、スクリプトを「コア拡張機能」または「IDE 拡張機能」として構成することで、IDE にロードされます。Selenium IDE ウィンドウが開くと (IDE の次にコア)、拡張機能の両方のセットが読み込まれるため、どちらを指定しても問題ないように思われる場合があります。ただし、IDE ウィンドウでコマンドが初めて再生されるときに、 Core 拡張スクリプトが再ロードされることに注意してください。したがって、コア拡張機能として構成されたスクリプトはべき等である必要があります

locator-builder は Recorder 機能であるため、IDE 拡張機能として構成すると、一度だけ読み込まれます。何らかの理由でランタイム コードと共存する必要がある場合 (共有ロジックの可能性が高い)、それをコア拡張機能として読み込むことができますが、べき等であることを確認してください。(また、IDE でのみロードすることもできます。) 次に例を示します。

if ("SeleniumIDE" in window) { // we're running in the IDE window
  var i = LocatorBuilders.order.indexOf(locatorName);
  if (i != -1)
    LocatorBuilders.order.splice(i, 1); // remove a previous entry
  LocatorBuilders.add(locatorName, function(elem) { ...
}

(indexOf() および splice() 配列メソッドはすべてのブラウザーでサポートされているわけではありませんが、Firefox ではサポートされていることに注意してください。これは IDE ロジックです。)

于 2010-10-18T16:38:10.687 に答える