での例外処理 Selenium Webドライバー(種類)
⚡ スマートサマリー
例外処理 Selenium WebDriverは失敗したコマンドを停止させないようにしますping 完全なテスト実行。 Java try-catch、複数のcatchブロック、throw、throws、そして最後に、それぞれがスクリプトに異なる回復方法を提供します。
例外とは何ですか?
例外とは、プログラムの実行時に発生するエラーのことです。プログラムの実行中に、プログラミング言語は例外を生成しますが、この例外は適切に処理されなければ、プログラムはクラッシュします。
この例外は、イベントが発生する可能性はあるものの、この種のイベントはまれにしか発生しないことを示しています。メソッドが例外を処理できない場合、呼び出し元の関数に例外がスローされます。 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ブロック内で撮影したスクリーンショットと組み合わせることで、実行が失敗した場合に何が壊れたのか、そしてページがどのように表示されたのかの両方を確認できます。
