要素の存在を確認し、コマンドを待機します Selenium

⚡ スマートサマリー

要素の存在と waitFor コマンドを確認する Selenium IDEは、ページにテストが期待する要素とテキストが含まれていることを確認し、次のステップが実行される前に、動的な条件が真になるまで再生を一時停止します。

  • 🔘 要素チェック: verifyElementPresentは、ロケーターがページ上の何かに一致した場合にTRUEを返し、verifyElementNotPresentはその正反対です。
  • ☑️ テキストチェック: verifyTextPresent はページ全体を検索し、大文字と小文字を区別するため、「Atlanta」は「atlanta」とは一致しません。
  • ✅ 位置確認: verifyElementPositionLeft と verifyElementPositionTop は、要素のページ端からのピクセルオフセットを比較します。
  • 🧪 ページ読み込み: clickAndWaitなどのandWaitコマンドは、新しいページの読み込みが完了するまでスクリプトを一時停止します。
  • 🛠️ 動的コンテンツ: waitForコマンドは、ページの読み込みではなく条件を満たすまで待機するため、ページが再読み込みされないAJAX画面に適しています。
  • 📊 現在のIDE: このブラウザ拡張機能は、これらの手順の名前を変更し、各待機コマンドにそれぞれミリ秒単位のタイムアウトを設定します。

要素が存在することを確認し、waitFor コマンドを Selenium IDE

記録された Selenium IDE スクリプトはクリックや入力は行いますが、アプリケーションが正しく動作したかどうかを単独で判断することはありません。その判断を行うのが、以下の2つのコマンド群です。 確認する ページの状態をチェックするコマンド、そして wait ページがチェックできる状態になるまで実行を保留するコマンド。

⚠️ バージョンに関する注意: 以下のスクリーンショットはオリジナルからのものです Firefox-プラグイン Selenium IDE はもはや配布されておらず、キャメルケースの Selenese 名を使用しています。現在の IDE は Chrome です。 Firefox とエッジ ブラウザの拡張機能ここで説明した動作は依然として適用されますが、いくつかのコマンド名が変更されています。マップping 表はこの記事の後半に掲載されており、すべてのオリジナルコマンドとスクリーンショットは公開されたとおりにそのまま保存されています。

要素の存在を確認する

要素の存在を確認するには、次の 2 つのコマンドを使用できます。

  • verifyElementPresent – 指定された要素がページ内で見つかった場合はTRUEを返し、そうでない場合はFALSEを返します。
  • verifyElementNotPresent – 指定された要素がページ内のどこにも見つからなかった場合は TRUE を返します。 存在する場合は FALSE。

どちらのコマンドも要素を受け取ります ロケータ に選出しました。 Target フィールド — ID、名前、CSSセレクタ、リンクテキスト、または XPath 式 — どちらも値を必要としません。

以下のテストスクリプトは、UserNameテキストボックスが Mercury ツアーのホームページには「First Name」テキストボックスは表示されません。First Nameテキストボックスは実際にはツアーの登録ページにある要素です。 Mercury ツアーはホームページには載っていません。

Selenium ユーザー名ボックスにはverifyElementPresent、名ボックスにはverifyElementNotPresentを使用するIDEスクリプト

なぜなら、これらは 確認する コマンドではなく アサート コマンドが失敗した場合、ログにエラーが記録されますが、残りの手順は引き続き実行されます。この違いについては、後ほど詳しく説明します。

コマンド内の特定のテキストの存在を確認する Selenium

要素が存在するかどうかを確認するだけでは十分でない場合もあります。多くの場合、テストではユーザーに表示されるテキストを検証する必要があります。2つのテキストコマンドは、そのようなケースに対応します。

  • verifyTextPresent – 指定されたテキスト文字列がページ内のどこかに見つかった場合はTRUEを返し、そうでない場合はFALSEを返します。
  • verifyTextNotPresent – 指定されたテキスト文字列がページ内のどこにも見つからなかった場合は TRUE を返します。 見つかった場合は FALSE

これらのコマンドでは大文字と小文字が区別されることに注意してください。

以下のログは、同じページが同じフレーズの異なるスペルで2回チェックされたことを示しています。

Selenium IDEログには、アトランタからラスベガスへのverifyTextPresentが成功し、アトランタからラスベガスへのverifyTextPresentが失敗していることが示されています。

上記のシナリオでは、「Atlanta to Las Vegas」と「atlanta to Las Vegas」は異なる扱いを受けました。これは、「Atlanta」の「A」が前者では大文字、後者では小文字だったためです。verifyTextPresentコマンドをそれぞれに対して実行したところ、一方は合格、もう一方は不合格となりました。

要素の特定の位置を確認する

レイアウトの欠陥がロケータを壊すことは稀であるため、存在チェックではそれらを見逃してしまう。位置指定コマンドはこのギャップを埋める。

Selenium IDE は、要素の位置を、ブラウザ ウィンドウの左端または上端からの距離 (ピクセル単位) を測定することによって示します。

  • verifyElementPositionLeft – 指定されたピクセル数がページの左端からの要素の距離と一致するかどうかを検証します。 指定された値が左端からの距離と一致しない場合、FALSE が返されます。
  • 要素の位置を確認する – 指定されたピクセル数がページの上端からの要素の距離と一致するかどうかを検証します。 指定された値が上端からの距離と一致しない場合、FALSE が返されます。

以下のスクリプトは、予想されるピクセルオフセットを「値」列に記録します。

Selenium IDEの手順で、value列にピクセル値を指定してverifyElementPositionLeftとverifyElementPositionTopを使用します。

これらの2つのコマンドは慎重に扱ってください。ピクセルオフセットはウィンドウサイズ、ズームレベル、インストールされているフォントによって変化するため、あるマシンで正常に動作する固定値でも、別のマシンでは失敗する可能性があります。

コマンドを待つ Selenium

検証コマンドは画面に表示されているものしか検査できないため、アプリケーションが正常に動作していても、早すぎるタイミングで実行されるとチェックが失敗します。待機コマンドはこのタイミングの問題を解決します。

以下は待機コマンドの種類です。 Selenium

andWait コマンド

これらは、次のコマンドに進む前に、新しいページが読み込まれるのを待機するコマンドです。

例としては、

  • クリックして待つ
  • typeAndWait
  • 選択して待つ

以下に記録した手順が示すように、それらはすべてAndWaitという接尾辞が付いた通常のアクションコマンドです。

記録されたクリックアンドウェイトステップは、 Selenium 次のページが読み込まれるまでIDEスクリプトを実行します

waitFor コマンド

これらは、(新しいページのロードに関係なく) 次のコマンドに進む前に、指定された条件が true になるのを待つコマンドです。 これらのコマンドは、ページ全体をリロードせずに値や要素を変更する AJAX ベースの動的 Web サイトでの使用に適しています。 例としては次のものが挙げられます。

  • タイトル待ち
  • waitForTextPresent
  • アラート待ち

以下の Facebook のシナリオを考えてみましょう。

Facebookのサインアップフォームで、「誕生日を入力する必要がある理由」というリンクがクリックされる前に表示されます。

「click」と「waitForTextPresent」の組み合わせを使用して、「誕生日の提供」というテキストの存在を確認できます。

Selenium IDE の手順は、click と waitForTextPresent を組み合わせて、誕生日テキストの入力を待つようにしています。

「誕生日を入力する必要があるのはなぜですか?」をクリックしてもページが読み込まれないため、clickAndWait は使用できません。 リンク。 そうした場合、テストは失敗します

同じルールは、ナビゲーションではなくスクリプトによって挿入されたコンテンツにも適用されます。 AJAX駆動の画面 ほとんどの場合、andWaitではなくwaitForを使用する必要があります。

Assert、Verify、waitFor コマンド Selenium IDE

初心者はしばしば間違ったファミリーを選択し、スイートが最初の欠陥で停止する理由や、すべての欠陥が20件の失敗として報告される理由を疑問に思う。 trac1に戻る。3つの接頭辞は3つの異なる質問に答えている。

接頭辞 何それがありません 失敗した場合 最適な用途
アサート 状態を即座にチェックします 失敗をログに記録し、テストケースを停止します。 前提条件 ― 他のすべてが意味を成す前に必ず成功しなければならないログイン
確認する 状態を即座にチェックします 失敗をログに記録し、次のコマンドに進みます。 独立したチェック、例えば1つの確認ページに複数のラベルを貼るなど
待機 条件が真になるまで世論調査を行う タイムアウトが経過するとエラーをログに記録し、その後処理を続行します。 遅れて表示されるものすべて ― AJAXレスポンス、スピナー、ダイアログなど

実用的なパターンは、これら3つを組み合わせます。まず、アクセスしたページをアサートし、次に非同期で到着する要素をwaitForし、最後に各フィールドを個別に検証します。この順序で実行することで、ナビゲーションの不具合が1つでも発生すればテストは早期に終了し、いくつかの外観上の不一致はすべて1回の実行で報告されます。同じ規律は、 Selenium コードで記述されたテスト。これに相当するものは、ハードアサーション、ソフトアサーション、明示的な待機です。

現在の検証コマンドと待機コマンド Selenium IDE

その Firefox上記のスクリーンショットを作成したプラグインIDEは廃止され、コマンドセットは現在のブラウザ拡張機能用に再構築されました。Seleneseの名前はいくつか残され、いくつかは名前が変更され、いくつかは削除されました。以下の表は、この記事で使用されているコマンドを、公式ドキュメントから取得した現在の同等のコマンドにマッピングしたものです。 Selenium IDEコマンドリファレンス.

レガシー・セレネーゼ・コマンド 現在のIDEのコマンド
verifyElementPresent 要素が存在することを確認する
verifyElementNotPresent 要素が存在しないことを確認する
verifyTextPresent テキストを検証する(ページ全体ではなく、要素ロケーターの範囲に限定)
verifyTextNotPresent テキストではないことを検証する(要素ロケーターにスコープ指定)
タイトルを確認する タイトルを確認する
要素の左位置を確認する / 要素の上位置を確認する 同等のものはなく、立場表明は取り下げられた。
clickAndWait、typeAndWait、selectAndWait AndWaitサフィックスは不要です。openコマンドは既にページの読み込みを待機します。
waitForElementPresent 要素が存在するまで待機します(待機時間はミリ秒単位)。
アラート待ち ダイアログが表示された後、アラートをアサートするか、アラートテキストを検証する

日々の作業において最も重要な違いは2つあります。まず、現在の待機コマンド(要素が存在するまで待機、要素が表示されているまで待機、要素が編集可能になるまで待機、およびそれらの否定版)はそれぞれミリ秒単位で明示的な待機時間を指定するため、処理の遅いステップがグローバルなタイムアウトを共有する必要がなくなりました。次に、ページ全体のテキスト検索が廃止されました。テキストの検証にはロケーターが必要となり、通常はより精度の高いチェックが可能になります。

VerifyコマンドとwaitForコマンドでよくあるエラー

これらのコマンドに関する報告されている問題のほとんどは、IDEの不具合ではありません。以下に、最も頻繁に発生する不具合とその解決策を一覧で示します。

  • 要素は存在するが、それでもチェックが失敗する。 存在状態と可視状態は異なる状態です。CSSルールによって隠された要素もDOM内には存在するため、テストがユーザーの実際の視覚状態に依存する場合は、存在チェックと要素の可視状態確認を組み合わせましょう。
  • テキストチェックは、見た目が全く同じ文言に対して失敗する。 デザインドキュメントからコピーされた改行なしスペース、末尾の空白、および波括弧付きアポストロフィはすべて、完全一致を妨げます。期待される文字列を貼り付けるのではなく、手入力してください。
  • 明らかにページが読み込まれた後、待機コマンドがタイムアウトする。 要素は通常、iframe 内にあります。最初に select frame を実行してください。そうしないと、ロケーターが誤ったドキュメントに対して評価されます。
  • clickAndWait がシングルページアプリケーションでハングアップする。 ナビゲーションは発生しないため、待機する対象はありません。代わりに、クリック操作と適切なwaitForコマンドを追加してください。
  • ローカル環境では位置チェックが成功するが、ビルドサーバー上では失敗する。 画面サイズとフォントのレンダリングは異なります。存在チェックまたはテキストチェックを行うか、テスト開始時にウィンドウサイズを明示的に設定してください。
  • スイート全体が最初の不一致で停止する。 本来検証コマンドを実行するべき箇所で、アサートコマンドが記録されました。プレフィックスを変更すると、最初の失敗だけでなく、すべての失敗が報告されます。

スクリプトがこれらの罠を突破したら、次のステップは通常 実行時値を変数に格納する そのため、チェックはハードコードされた文字列ではなく、実際のデータと比較されます。

よくあるご質問

従来のIDEでは、すべてのwaitForステップで共通のグローバルタイムアウトが共有されており、setTimeoutコマンドで変更されていました。現在の拡張機能では、各waitコマンドでミリ秒単位の明示的な待機時間を指定できるため、1つの画面の処理が遅くても、他のすべてのステップが同じ時間待機する必要がなくなりました。

いいえ。Pauseは常に全時間スリープするため、ページの読み込みが速い場合は時間を無駄にし、遅い場合はやはり失敗します。デモ中に手順を説明する場合にのみ使用し、繰り返し実行する予定のプログラムには絶対に使用しないでください。

そうではありません。存在とは、ノードがDOMに存在することを意味し、CSSで非表示にされている要素や画面外に配置されている要素でも常に真です。テストがユーザーの視覚情報に依存する場合は、存在チェックに加えて要素が表示されるまで待機する処理を追加してください。

はい、そして現在のIDEではそれが必須です。テキスト検証コマンドは、要素ロケーターと期待される文字列を引数として受け取ります。これは以前のページ全体検索よりも厳格で、本来満たすべきではないチェックを無関係なメニュー項目が満たしてしまうことを防ぎます。

Code exportコマンドは、各コマンドを対象言語の同等のステートメントに変換するため、待機ステップは明示的なWebDriver待機になります。生成されたファイルを信頼する前に必ず確認してください。タイムアウトや、ソフト障害とハード障害の動作は、翻訳後もそのまま維持されるとは限らないためです。

機械学習モデルは過去の実行データを読み取り、一貫して失敗するのではなく断続的に失敗するステップを特定します。これは待機処理が欠落している兆候です。AI支援によるロケーター修復は、マークアップが変更された際に新しいセレクタを提案することで、もう一つの一般的な原因に対処します。

機械的な部分はうまく処理します。待機ステップを、期待される条件を持つ WebDriverWait に変換します。 Rev生成されるプレゼンス条件は、多くの場合、可視性条件である必要があるため、タイムアウトと条件を確認してください。

ロケーターは現在選択されているドキュメントに対して評価されますが、iframeは別の対象です。後続の手順が誤ったコンテキストで検索されないように、まずフレーム選択コマンドを実行し、次にチェックを実行し、最後に最上位のドキュメントに戻ってください。