での例外処理 Selenium Webドライバー(種類)

⚡ スマートサマリー

例外処理 Selenium WebDriverは失敗したコマンドを停止させないようにしますping 完全なテスト実行。 Java try-catch、複数のcatchブロック、throw、throws、そして最後に、それぞれがスクリプトに異なる回復方法を提供します。

  • 🔘 定義: 例外とは、プログラムの実行中に発生するエラーのことで、処理されない例外はプログラムの実行をクラッシュさせる。
  • ☑️ 範囲: Selenium WebDriverには40種類以上の例外クラスが含まれており、それらはすべてWebDriverExceptionから派生しています。
  • 常習犯: NoSuchElementException、TimeoutException、StaleElementReferenceException、およびElementNotInteractableExceptionは、現実世界におけるほとんどの障害の原因となります。
  • 🧪 取り扱い: try-catch のペアは 1 つのエラータイプを分離し、複数の catch ブロックは複数のエラーを分離し、最後に必ず実行されます。
  • 🛠️ エスカレーション: throw および throws キーワードは、現在のメソッドが例外を解決できない場合に、例外を呼び出し元に返します。
  • 📊 診断: プリントスタックTrace()、toString()、getMessage()はそれぞれ、障害に関する異なるレベルの詳細情報を報告します。

例外処理 Selenium try-catch、throw、finally を使用した WebDriver

例外とは何ですか?

例外とは、プログラムの実行時に発生するエラーのことです。プログラムの実行中に、プログラミング言語は例外を生成しますが、この例外は適切に処理されなければ、プログラムはクラッシュします。

この例外は、イベントが発生する可能性はあるものの、この種のイベントはまれにしか発生しないことを示しています。メソッドが例外を処理できない場合、呼び出し元の関数に例外がスローされます。 Javaほとんどを駆り立てる Selenium スイートでは、すべての WebDriver 例外はチェックされないため、コンパイラは例外をキャッチすることを強制しません。未処理のエラーは実行時にのみ顕在化します。

例外の種類 Selenium webdriver

WebDriverException は階層構造の基底クラスであり、それより下位のすべての例外はこれを継承します。以下の表には、発生する可能性のある 41 種類の例外と、それぞれの例外が発生する条件が一覧表示されています。

# 例外 発生した場合
1 ElementNotVisibleException DOM内の既存要素に、非表示として設定された機能があります。
2 ElementNotSelectableException その要素はDOM内に存在しますが、選択できないため、操作は不可能です。
3 NoSuchElementException 要素が見つかりませんでした ロケータ 供給。
4 NoSuchFrameException その フレーム 切り替え先のターゲットが存在しません。
5 NoAlertPresentException への切り替え アラート アラートが表示されない場合に実行されます。
6 NoSuchWindowException 切り替え先のウィンドウターゲットが存在しません。
7 古い要素参照例外 ウェブ要素は現在の DOM.
8 SessionNotFoundException WebDriverは、ブラウザを終了した後も動作します。
9 タイムアウト例外 コマンドが時間内に完了しませんでした。たとえば、待機時間内に検索対象の要素が見つかりませんでした。
10 WebDriverException 他の WebDriver 例外の基底クラス。ブラウザを閉じた直後に WebDriver が動作した場合にも発生します。
11 接続が閉じられた例外 ドライバーに障害が発生しています。
12 ElementClickInterceptedException イベントを受け取る要素が、クリックが要求された要素を隠蔽しています。
13 ElementNotInteractableException その要素はDOM内に存在しますが、操作することはできません。
14 ErrorInResponseException とのやり取り中に何かが失敗しました Firefox 拡張子またはリモートドライバーサーバー。
15 エラーハンドラー.UnknownServerException サーバーがスタックトレースなしでエラーを返した場合のプレースホルダーとして使用されます。 trace.
16 IMEActivationFailedException IMEエンジンの起動に失敗しました。
17 ImeNotAvailableException IMEはサポートされていません。
18 InsecureCertificateException ナビゲーションによりユーザーエージェントがヒットしました 証明書の警告これは、無効または期限切れのTLS証明書が原因となる可能性があります。
19 無効な引数例外 引数が想定される型に属していません。
20 InvalidCookieDomainException A クッキー 現在のドメインではなく、別のドメインに追加されます URL.
21 InvalidCoordinatesException 一致した相互作用操作は無効です。
22 InvalidElementStateException 要素が無効なため、コマンドを完了できません。
23 InvalidSessionIdException 指定されたセッションIDはアクティブなセッションに含まれていないため、存在しないか、非アクティブです。
24 無効なスイッチTarget例外 切り替え先のフレームまたはウィンドウが存在しません。
25 Javascript例外 実行中にエラーが発生しました Javaユーザーが指定したスクリプト。
26 JsonException セッションが作成されていない場合、セッションが要求されます。
27 NoSuchAttributeException 要素の属性が見つかりませんでした。
28 移動Target境界外例外 ActionChains の move() メソッドに指定されたターゲットが無効です (例: ドキュメントの範囲外)。
29 NoSuchContextException モバイルデバイスのテストを行うContextAwareは、要求されたコンテキストを見つけることができません。
30 NoSuchCookieException 現在閲覧中のドキュメントのクッキーの中に、指定されたパス名に一致するクッキーは見つかりませんでした。
31 見つかりません例外 WebDriverExceptionのサブクラスで、DOM上の要素が存在しない場合に発生します。
32 RemoteDriverServerException 記載されている機能が適切ではないため、サーバーが応答していません。
33 ScreenshotException 画面をキャプチャすることはできません。
34 セッション作成不可例外 新しいセッションを正常に作成できませんでした。
35 UnableToSetCookieException ドライバーはクッキーを設定できません。
36 UnexpectedTagNameException サポートクラスが期待どおりにWeb要素を取得できませんでした。
37 未処理のアラート例外 警告は発生していますが、WebDriver は警告処理を実行できません。
38 予期しないアラート提示例外 予期せぬアラートが表示されます。
39 UnknownMethodException 要求されたコマンドは既知のものと一致する URL しかし、その特定の方法ではない URL.
40 到達不能ブラウザ例外 ブラウザが開けないか、何らかの理由でクラッシュしました。
41 サポートされていないコマンド例外 リモートWebDriverが期待どおりに有効なコマンドを送信しません。

日常のデバッグで支配的な3つの要素: NoSuchElementExceptionは間違った XPath またはレンダリングされていない要素、TimeoutException は、 AJAX 応答があり、StaleElementReferenceException が続きます ダイナミック 再レンダリングする。

例外を処理する方法 Selenium

例外処理の標準的な構成要素は次のとおりです。 Selenium WebDriver。それぞれはプレーンです Javaなので、どんな状況でも機能します WebDriverスクリプト 追加のライブラリなしで。

ステップ1) トライキャッチ

このメソッドは、try と catch キーワードを組み合わせて例外を捕捉できます。try コマンドはブロックの開始を示し、catch は try ブロックの最後に配置され、そこで例外を解決します。

try
{
// Code
} catch (Exception e) {
// Code for Handling exception
}

ステップ 2) 複数の catch ブロック

例外には様々な種類があり、1つのコードブロックで複数の例外が発生する可能性があります。複数のcatchブロックを使用することで、それぞれの例外タイプを個別のコードで処理できます。catchブロックは2つ以上使用でき、追加できる数に制限はありません。

try
{
//Code
} catch (ExceptionType1 e1) {
//Code for Handling Exception 1
} catch (ExceptionType2 e2) {
//Code for Handling Exception 2
}

ステップ3) 投げる

例外を発生させたい場合、throw キーワードを使用すると、実行時に例外が処理されます。現在のメソッド内で例外を解決するのではなく、例外を次の処理に渡す場合は、throw を使用してください。

public static void anyFunction() throws Exception{

try {
// write your code here
} catch (Exception b) {
// Do whatever you want to perform 
// Throw the Exception back to the system
throw(b);
}
}

ステップ 4) 複数の例外

throws句には、さまざまな例外を記述できます。

public static void anyFunction() throws ExceptionType1, ExceptionType2{

try {
// write your code here
} catch (ExceptionType1 e1) {
// Code to handle exception 1
} catch (ExceptionType2 e2) {
// Code to handle exception 2
}

ステップ5) 最後に

finally キーワードは、try ブロックの下にブロックを作成します。例外が発生したかどうかに関わらず実行されるため、ドライバを閉じたり、ファイル ハンドルを解放したりするのに最適な場所です。

try {
//Code
} catch (ExceptionType1 e1) {
//Catch block
} catch (ExceptionType2 e2) {
//Catch block
} catch (ExceptionType3 e3) {
//Catch block
} finally {
//The finally block always executes.
}

例外情報を表示する方法

例外が捕捉されると、オブジェクト自体に診断の詳細情報が格納されます。以下のメソッドを使用して、その情報を表示できます。

方法 報告内容
プリントスタックTrace() スタックを印刷します trace、例外の名前、およびその他の有用な説明。
toString() 例外名と説明を記載したテキストメッセージを返します。
getMessage() 例外の説明を単独で表示します。

これらをcatchブロック内で撮影したスクリーンショットと組み合わせることで、実行が失敗した場合に何が壊れたのか、そしてページがどのように表示されたのかの両方を確認できます。

よくあるご質問

WebDriverの例外はすべてRuntimeExceptionからWebDriverExceptionを継承しているため、チェックされません。そのため、コンパイラはtry-catchブロックを要求しません。これは便利な反面、ガードされていないロケータの失敗はテストが実際に実行されたときにのみ明らかになるという問題も生じます。

参照をキャッシュするのではなく、要素を操作する直前に要素を再配置してください。例外を無視してノードを再度取得する短いリトライループは、長いスリープよりもReactやVueの再レンダリングをはるかに確実に処理します。

それらは時間を大幅に短縮しますが、完全に削除することはありません。明示的な待機はタイミングの問題を解決するだけで、誤ったロケータ、傍受されたクリック、または閉じられたセッションは例外を発生させ、それを吸収できるのはcatchブロックだけです。

Selenium 4 は同じ階層構造を維持していますが、wait コンストラクタは整数タイムアウトではなく Duration を受け取るようになり、W3C 引数検証がより厳格になったため、次の値に対して InvalidArgumentException が発生します。 Selenium 3件は苦情なく受け入れられた。

自己修復型位置特定エンジン tracセレクタが壊れて、動作する代替品に置き換えられるkは、N​​oSuchElementExceptionエラーの大部分を解消します。類似のモデルは、繰り返しスタックをクラスタリングします。 tracそうすることで、真に新しい欠陥が不安定な再実行の中に埋もれてしまうことがなくなります。

Copilotは定型コードの作成に優れています。try-catchブロックの骨組み、適切な順序のcatchチェーン、ドライバを終了するfinallyブロックなどです。ただし、アプリケーションがどのような例外をスローするかはCopilotでは把握できないため、生成されたcatchブロックはすべて確認してください。

これらはテストを補完する役割を果たします。ITestListener は、失敗したテストのログ記録とスクリーンショットを一元管理することで、テスト本体を簡潔に保ちます。try-catch は、エラーを報告するだけでなく、スクリプトがエラー発生後も処理を継続する必要がある場合にのみ使用してください。

catchブロックまたはfinallyブロック内でドライバをTakesScreenshotにキャストし、セッションが閉じられる前にファイルを書き込みます。テストメソッドと同じ名前を画像に付けることで、ローカルで障害を再現しなくても、失敗したCI実行結果を読み取ることができます。