Selenium コア拡張機能 (User-Extensions.js)

⚡ スマートサマリー

Selenium コア拡張機能(ユーザー拡張機能とも呼ばれる)は、カスタムアクション、アクセサー、ロケーター戦略を Selenium IDE を添付して Javaスクリプト関数 Selenium IDE起動時にPageBotプロトタイプオブジェクトも作成されます。

  • 🔘 3つの柱: Seleneseのすべてのコマンドは、アクション、アクセサーまたはアサーション、あるいはロケーター戦略のいずれかです。
  • ☑️ 命名規則: アクションは do で始まり、アクセサーは get または is で始まり、ロケーターは locateElementBy で始まります。
  • フリー待機コマンド: doTextUpperCaseを登録すると、IDEがtextUpperCaseAndWaitを自動的に生成します。
  • 🧪 負荷機構: IDEは起動時にuser-extensions.jsを読み込むため、編集後は毎回ツールを再起動する必要があります。
  • 🛠️ レガシーステータス: Selenium コアと Firefox-plugin IDE は廃止され、 Selenium 3. JARファイルからユーザー拡張機能のサポートを削除しました。
  • 📊 現代のルート: 現在のブラウザ拡張機能IDEは、代わりにプラグインマニフェストとスクリプト実行コマンドを公開している。

Selenium コア拡張機能とuser-extensions.jsファイル

Selenium コア拡張機能

拡張機能を理解するために、まず、 Selenium IDEIDEで記録または入力するすべてのコマンドは、以下の3つのカテゴリのいずれかに属し、各スクリーンショットは、そのカテゴリがIDEコマンドリストでどのように表示されるかを示しています。

  1. アクション: UI画面上でどのような操作を行っていますか?

    Selenium クリックや入力などのアクションコマンドを表示するIDEコマンドリスト

  2. アクセサー/アサーション: UIから取得したデータに対して、どのような検証を行いますか。

    Selenium get、is、verify、assert で始まる IDE アクセサおよびアサーションコマンド

  3. ロケーター戦略: UI上でその要素を見つける方法。

    Selenium IDEのターゲットボックスリストのロケーター戦略には、id、name、css、xpathなどがあります。

Selenium IDEには、既に多くのアクション、アクセサー、アサーション、ロケーター戦略を含む成熟したライブラリが付属しています。

しかし、プロジェクトによっては、そのライブラリに含まれていない機能が必要になる場合があります。そのような場合は、独自のカスタム拡張機能を追加することでライブラリを拡張できます。これらのカスタム拡張機能は、 ユーザー拡張機能.

例えば、Web要素にテキストを入力する前に、テキストを大文字に変換するアクションが必要だとします。デフォルトのライブラリにはそのようなアクションは存在しないため、独自のユーザー拡張機能を作成する必要があります。このチュートリアルでは、テキストを大文字に変換するユーザー拡張機能の作成方法を学びます。

⚠️ 始める前に: ここで説明するワークフローは Selenium コアとオリジナル Firefox-プラグイン Selenium IDE. Selenium Core は廃止され、ユーザー拡張機能のサポートは削除されました。 Selenium 瓶の中に Selenium 3. 以下の手順とコードは、多くの旧来のSeleneseスイートが依然としてこれらに依存しているため、そのまま残されています。最新の代替手段については、この記事の後半で説明します。

作成要件 Selenium ユーザー拡張機能

ユーザー拡張機能を作成するには Selenium IDEでは、基本的な概念が必要です。 Javaスクリプト そして、特に、 Javaスクリプトプロトタイプオブジェクト。下の図は、ユーザー拡張機能が自身を関連付ける2つのプロトタイプオブジェクトを示しています。

の図 Selenium ユーザー拡張機能で使用されるプロトタイプおよびPageBotプロトタイプオブジェクト

ユーザー拡張機能を作成するには、次のように記述します。 Javaスクリプトメソッドを追加して Selenium オブジェクトプロトタイプとPageBotオブジェクトプロトタイプ。

認定条件 Selenium IDEがユーザー拡張機能を認識する

ユーザー拡張機能が追加された後 Selenium IDEが起動すると、それらのすべての関数が登録されます Javaスクリプトのプロトタイプが読み込まれ、 Selenium IDEはそれぞれを名前で認識します。そのため、次のセクションで説明する命名接頭辞はスタイルの選択ではなく、IDEがコマンドを分類する方法なのです。

ユーザー拡張機能の作成方法

ステップ 1) アクション – すべてのアクションは以下から始まります do. アクションがテキストを大文字に変換する場合、その名前は doTextUpperCaseこのアクションメソッドを追加すると、 Selenium IDE では、IDE 自体が対応する待機メソッドを作成するので、 doTextUpperCase 待機関数も生成します テキスト大文字で待ってこのメソッドは2つのパラメータを受け入れることができます。

例: 大文字テキストアクション

Selenium.prototype.doTextUpperCase = function(locator, text) {
// Here findElement is itself capable to handle all type of locator(xpath,css,name,id,className), We just need to pass the locator text
var element = this.page().findElement(locator);

// Create the text to type
text = text.toUpperCase();

// Replace the element text with the new text
this.page().replaceText(element, text);
};

ステップ2)アクセサー/アサーション – すべてのアクセサ Selenium オブジェクトのプロトタイプには、 取得する or is例えば、getValueFromCompoundTable や isValueFromCompoundTable などです。アクセサは、テストケースのターゲットと値フィールドの 2 つのパラメーターを受け入れることができます。以下のスクリーンショットは、拡張機能がロードされた後にこれらのプレフィックスがどのように表示されるかを示しています。

Selenium ユーザー拡張機能から生成されたgetおよびisアクセサーコマンドを表示するIDE

各アクセサについて、 Selenium IDE は、対応する検証関数をプレフィックス付きで生成します。 確認する (NAIST) と アサート、さらに、で始まる待機関数 待機.

例:大文字テキストアクセサーの場合

Selenium.prototype.assertTextUpperCase = function(locator, text) {
// All locator-strategies are automatically handled by "findElement"
var element = this.page().findElement(locator);

// Create the text to verify
text = text.toUpperCase();

// Get the actual element value
var actualValue = element.value;

// Make sure the actual value matches the expected
Assert.matches(expectedValue, actualValue);
};

Selenium.prototype.isTextEqual = function(locator, text) {
return this.getText(locator).value===text;
};

Selenium.prototype.getTextValue = function(locator, text) {
return this.getText(locator).value;
};

ステップ3)ロケーター戦略 – 要素を見つけるための独自の関数を作成したい場合は、PageBot プロトタイプを、プレフィックス付きの関数で拡張します。 locateElementByこのコマンドは、ロケーター文字列と、要素を検索する対象となるドキュメントという2つのパラメータを受け取ります。

例: 大文字テキストロケーターの場合

// The "inDocument" is a document you are searching.
PageBot.prototype.locateElementByUpperCase = function(text, inDocument) {
// Create the text to search for
var expectedValue = text.toUpperCase();

// Loop through all elements, looking for ones that have
// a value === our expected value
var allElements = inDocument.getElementsByTagName("*");
// This star '*' is a kind of regular expression it will go through every element (in HTML DOM every element surely have a tag name like<body>,<a>,<h1>,<table>,<tr>,<td> etc. ). Here our motive is to find an element which matched with the Upper Case text we have passed so we will search it with all elements and when we get match we will have the correct web element.
for (var i = 0; i < allElements.length; i++) {
var testElement = allElements[i];
if (testElement.innerHTML && testElement.innerHTML === expectedValue) {
return testElement;
}
}
return null;
};

3つの関数すべてを1つのファイルに保存します。 user-extensions.jsファイルはプレーンです Javaスクリプトなので、どんなテキストエディタでも構いません。

新しく作成されたコア拡張機能の使用方法

ファイルの読み込みは、オリジナルでは4つのステップからなる作業です。 Firefox-プラグインIDE。以下の各スクリーンショットは、その横にある番号付きの手順に対応しています。

  1. に行く Selenium IDE をクリックしてクリック オプション -> オプション…

    Selenium IDEオプションメニューを開いてオプションダイアログにアクセスします。

  2. 全般 セクションで、新しく作成した場所を選択します Selenium コア拡張機能。

    Selenium IDEオプションダイアログの一般タブ Selenium コア拡張機能ファイルパスフィールド

  3. 詳しくはこちら OK そして再起動 Selenium IDE

    確認プロンプトが表示されるとき Selenium IDEを再起動して拡張ファイルを読み込みます

  4. 拡張機能はコマンド一覧の中にあります。

    Selenium IDEコマンドのドロップダウンリストに、user-extensions.jsから新しいtextUpperCaseコマンドが表示されます。

Selenium コア拡張機能と Selenium IDE拡張機能

古い資料ではこの2つの用語は interchangeably(互換的に)使われているが、実際には異なるレイヤーを表しており、カスタムロジックをどこに配置するかを決定する際には、この区別が重要になる。

側面 Selenium コア拡張 Selenium IDE拡張機能
それが拡張するもの 再生中に使用されるSeleneseコマンドライブラリ IDEアプリケーション自体
ファイルが読み込まれました user-extensions.js 従来のIDEではuser-extensions-ide.js、現在のIDEではプラグインマニフェスト
典型的な使用 新しいアクション、アクセサー、ロケーター戦略 新しいメニュー項目、パネル、フォーマット、およびレコーダーの動作
触れた物 Selenium.prototype および PageBot.prototype IDEエディタおよびレコーダーAPI
実行中 テスト実行 執筆と録音

つまり、Core拡張機能はテストができることを変更するのに対し、IDE拡張機能はツールができることを変更する。

現代の Selenium IDEはuser-extensions.jsを置き換えます

その Firefox-プラグイン Selenium IDEが動作しなくなったのは Firefox WebExtensionsアーキテクチャに移行し、IDEはChromeとして書き直されました。 Firefox そしてEdgeブラウザ拡張機能。この書き換えにより、上記に示したオプションフィールドが削除されたため、user-extensions.jsファイルを指定する場所がなくなりました。サポートされている2つの代替手段で同じ機能が利用できます。

  • スクリプト実行コマンド。 単発の場合 Javaスクリプト、追加 スクリプトを実行する or 非同期スクリプトを実行する テストに直接ステップインし、結果を変数に格納します。これは、小さなカスタムアクションに最も近いものです。
  • プラグイン。 再利用可能なコマンドについては、IDEにマニフェストを登録するブラウザ拡張機能を作成します。マニフェストでは、各新規コマンドをID、名前、オプションのタイプ、ドキュメントとともに宣言し、新しいロケータを宣言することもできます。

マニフェストは、公式ドキュメントに示されているように、IDE拡張機能にメッセージを送信することによって登録されます。 Selenium IDEプラグインのドキュメント.

browser.runtime.sendMessage(SIDE_ID, {
uri: "/register",
verb: "post",
payload: {
name: "Selenium IDE plugin",
version: "1.0.0",
commands: [
{ id: "textUpperCase", name: "text upper case" }
]
}
}).catch(console.error);

命名規則は移行後も維持されます。プラグインコマンドは、Core拡張機能と同様に、一度宣言すればすべてのテストで再利用されます。

よく使われる拡張機能とプラグイン Selenium IDE

以下の拡張機能は、従来のIDEで最も広く使用されていたものです。フロー制御やエラー時のスクリーンショット機能など、いくつかの機能は現在のIDEに組み込まれているか、メンテナンスされているプラ​​グインとして利用可能です。

名前 目的
お気に入り テストスイートをお気に入りとしてマークし、ワンクリックで実行する
フレックスパイロットX Flex ベースの自動化の場合
フレックスモンキウム Adobe Flex ベースの記録と再生の場合 テスト in Selenium IDE
ファイルログ ログをファイルに保存する場合
フロー制御 テスト実行フローを制御するには
ハイライト要素 Web コントロールを強調表示するには
暗黙的な待機 要素を一定時間待機する
失敗時のスクリーンショット 失敗時にスクリーンショットを撮る
試験結果 を助けて テストケース ワンクリックでテストスイートの結果を取得

古い SeleniumこれらのファイルをホストしていたHQダウンロードページはもう存在しません。現在のプラグインとIDE自体は、 Selenium IDEプロジェクトサイト そしてChromeからは、 Firefox および Edge アドオン ストア。

ダウンロード Selenium このチュートリアルで使用されるコア拡張機能

よくあるご質問

慣例的な名前は user-extensions.js で、IDE レベルのアドオンは user-extensions-ide.js を使用します。従来の IDE では任意のパスを指定できたため、名前は厳密な要件ではなく慣例でしたが、ping それによって、共有スイートをより簡単に識別できるようになる。

プロトタイプ関数はIDEの読み込み中は読み取り専用なので、起動後に編集しても無視されます。ファイルを保存し、IDEを完全に閉じてから再度開いてください。 Javaスクリプトの構文エラーも、ファイル全体の読み込みをサイレントに停止させる原因となります。

ブラウザのコンソールを開いてIDEを再起動し、ファイルに解析エラーが発生していないか確認してください。ファイルの先頭にconsole.log行を追加することで、個々の関数のデバッグを開始する前にファイルが正しく読み込まれたかどうかを確認できます。

`do` を接頭辞として付けたバージョンのみを記述します。 Selenium IDEは、同じ操作を実行した後、ページの読み込みが完了するまで待機するAndWaitバリアントを自動的に生成します。アクションによってナビゲーションがトリガーされる場合は、AndWaitフォームを使用してください。

機械学習モデルは、新しいコマンドの定型文を作成し、ページのスナップショットからロケーター戦略を提案できます。カスタムのlocateElementBy関数は、マークアップが変更されると壊れてしまうコードそのものなので、AIによるロケーター修復もここで役立ちます。

部分的に。コパイロットは Selenium.prototype および PageBot.prototype パターンは古いリポジトリで広く使用されているため、このパターンは有効ですが、実際には存在しないヘルパーメソッドを生成してしまう可能性があります。提案された呼び出しはすべて、Selenese コマンドリファレンスと照らし合わせてから信頼するようにしてください。

はい。PageBot.prototype に locateElementBy 関数のみを含むファイルは有効です。新しい戦略は既存のすべてのコマンドで利用可能になるため、クリック、入力、アサートといったコマンドで要素をターゲットにすることができます。

Selenium RC はサーバー スイッチを介してユーザー拡張ファイルを受け入れましたが、RC と Selenium コアは除去されました Selenium 3. WebDriverには同等のフックがないため、同じロジックをテストフレームワーク内の通常のヘルパーメソッドとして記述します。