アラートとポップアップの対処方法 Selenium?

⚡ スマートサマリー

アラートとポップアップ Selenium   Java自動化フローを妨げるスクリプトダイアログと子ウィンドウ。この記事では、単純なアラート、プロンプト、確認アラートを識別する方法、WebDriver を使用してそれらに切り替える方法、および getWindowHandles() を使用して複数のウィンドウを管理する方法について説明します。

  • 🔔 コア定義: A Selenium アラートは Javaページ上部に表示されるスクリプトダイアログは、後続の操作を行う前に処理する必要があります。
  • 🗂️ 3種類の警告タイプ: シンプル(情報)、プロンプト(テキスト入力)、確認(はい/いいえ)はそれぞれ異なるWebDriver呼び出しを必要とします。
  • 🛠️ アラートAPI: ダイアログを操作するには、driver.switchTo().alert() を accept()、dismiss()、getText()、sendKeys() と組み合わせて使用​​します。
  • 🪟 ウィンドウ処理: getWindowHandle() は現在のウィンドウ ID を返します。getWindowHandles() は切り替え用の完全な Set を返します。
  • 🚀 Selenium 4注: Selenium マネージャーはドライバーを自動的に解決するため、chromedriver.exe のパスをハードコーディングする必要がなくなります。
  • 🤖 AI 支援: AIエージェントは、位置情報に基づいたアラートおよびウィンドウのスクリプトを生成することで、テストスイートにおける手動による枠組み作業を削減します。

アラートとポップアップの対処方法 Selenium

アラートとは何ですか Selenium?

An アラートイン Selenium 小さいです Javaユーザーに情報や通知を提供するために画面に表示されるスクリプトダイアログボックス。特定のアクションの確認、操作実行の許可要求、警告メッセージの表示などに使用できます。

このチュートリアルでは、ポップアップの処理方法を学びます。 Selenium ウェブアプリケーションで見られるさまざまな種類のアラート テストまた、アラートの処理方法についても見ていきます。 Selenium WebDriverと、アラートの種類に応じてそれを受け入れるか拒否するかを決定する方法。

アラートの種類 Selenium

Javaスクリプトは、3 つの警告ダイアログを公開します。 Selenium 異なる対応が必要だ。

1) Simple Alert

シンプルなアラートは、画面上に情報または警告を表示します。ユーザーはクリックすることでのみそれを承認できます。 OK.

ブラウザでのシンプルなアラートダイアログの例

2) Prompt Alert

プロンプトアラートは、ユーザーに入力を求めます。 Selenium WebDriver は、 sendKeys("input...").

入力フィールド付きの警告ダイアログを表示する

3) Confirmation Alert

確認アラートは、ユーザーに操作を承認またはキャンセルするよう求めます。 OK (NAIST) と キャンセル ボタン。

OKボタンとキャンセルボタンが付いた確認アラートダイアログ

アラートの処理方法 Selenium webdriver

その Alert インターフェース Selenium webdriver アラートのあらゆる操作を網羅する4つのメソッドを公開します。

  1. 無効な却下() — クリックして キャンセル
driver.switchTo().alert().dismiss();
  1. void accept() — クリックして OK
driver.switchTo().alert().accept();
  1. 文字列 getText() ―アラートメッセージを取得します。
driver.switchTo().alert().getText();
  1. void sendKeys(String stringToSend) — プロンプトアラートにテキストを入力します。
driver.switchTo().alert().sendKeys("Text");

Eclipse オートコンプリートは、入力後に利用可能なアラート方法を表示します。ping alert. エディター行で。いつでもメインウィンドウからアラートに切り替えるには、 Seleniumさん 。切り替える() 方法。

Eclipse アラート処理方法を表示するオートコンプリート

実例:顧客デモの削除

次のシナリオを自動化してみましょう。 Guru99のデモサイトを例示 Selenium アラート処理。

ステップ1) ブラウザを起動して開く https://demo.guru99.com/test/delete_customer.php.

ステップ2) 顧客IDを入力してください。

顧客IDフィールドを含む顧客デモページを削除します

ステップ3) クリック 送信

送信ボタンをクリックすると確認アラートがトリガーされます

ステップ4) 表示された確認アラートを承認するか、拒否するかを選択してください。

削除操作によって確認アラートがトリガーされました

Selenium Java Code: ハンドル Confirmation Alert

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.Alert;

public class AlertDemo {

    public static void main(String[] args) throws NoAlertPresentException, InterruptedException {
        // Selenium 4 ships Selenium Manager, so an explicit driver path is no longer required.
        WebDriver driver = new ChromeDriver();

        // Open the Delete Customer demo page
        driver.get("https://demo.guru99.com/test/delete_customer.php");

        driver.findElement(By.name("cusid")).sendKeys("53920");
        driver.findElement(By.name("submit")).submit();

        // Switch to the confirmation alert
        Alert alert = driver.switchTo().alert();

        // Capture the alert message
        String alertMessage = alert.getText();
        System.out.println(alertMessage);
        Thread.sleep(5000);

        // Accept the alert
        alert.accept();

        driver.quit();
    }
}

出力: ブラウザは「顧客削除」ページを開き、顧客IDを送信し、確認アラートを承認して、デモアプリケーションからレコードを削除します。

ポップアップの対処方法 Windows in Selenium webdriver

自動化処理が複数のブラウザウィンドウにまたがって行われる場合、テストは各操作後にウィンドウ間でフォーカスを切り替え、親ウィンドウに戻る必要があります。 Selenium WebDriverは、これを可能にする2つのメソッドを提供しています。

driver.getWindowHands()

を返します Set<String> 開いているすべてのウィンドウのハンドルを取得します。セットを反復処理して、メインウィンドウからアプリケーション内の任意の子ウィンドウに切り替えます。

driver.getWindowHandle()

を返します String 現在のウィンドウの固有のハンドルを取得します。子ウィンドウを開く前にこのハンドルを取得しておくと、後で親ウィンドウに戻ることができます。

ウィンドウ処理を実証するには、次の手順に従ってください。 Guru99個のポップアップデモ。

実例:ウィンドウ切り替え

ステップ1) ブラウザを起動して開く https://demo.guru99.com/popup.php.

Guru99個のポップアップデモランディングページ

ステップ2) クリック 詳細 リンク。新しい子ウィンドウが開きます。

「ここをクリック」リンクから子ウィンドウが開きます

ステップ3) 子ウィンドウでは、ユーザーにメールアドレスを入力して送信するように促します。

子ウィンドウのメール入力フォーム

ステップ4) メールアドレスを入力して送信してください。

子ウィンドウ内でのメール送信

ステップ5) このページには、デモによって返されたアクセス認証情報が表示されます。

子ウィンドウに表示されるアクセス認証情報

認証情報の表示後:

  1. 子ウィンドウを閉じます。

ブラウザで子ウィンドウを閉じる

  1. フォーカスを親ウィンドウに戻します。

親ウィンドウにフォーカスを戻す

Selenium Java Code: 複数を処理する Windows

import java.util.Iterator;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class WindowHandle_Demo {

    public static void main(String[] args) throws InterruptedException {
        // Selenium 4 auto-resolves the browser driver via Selenium Manager
        WebDriver driver = new FirefoxDriver();

        driver.get("https://demo.guru99.com/popup.php");
        driver.manage().window().maximize();

        driver.findElement(By.xpath("//*[contains(@href,'popup.php')]")).click();

        String mainWindow = driver.getWindowHandle();

        // Capture every open window handle
        Set<String> allWindows = driver.getWindowHandles();
        Iterator<String> iterator = allWindows.iterator();

        while (iterator.hasNext()) {
            String childWindow = iterator.next();

            if (!mainWindow.equalsIgnoreCase(childWindow)) {
                // Switch to the child window
                driver.switchTo().window(childWindow);
                driver.findElement(By.name("emailid")).sendKeys("gaurav.3n@gmail.com");
                driver.findElement(By.name("btnLogin")).click();

                // Close the child window
                driver.close();
            }
        }
        // Return focus to the main window
        driver.switchTo().window(mainWindow);
        driver.quit();
    }
}

出力: サイトが立ち上げられ、 こちらをクリックしてください リンクをクリックすると子タブが開きます。 Selenium メールアドレスを入力して送信し、子ウィンドウを閉じて、親ウィンドウに戻ります。

複数ウィンドウの処理が完了しました Selenium

結論

  • 3つを定義しました Selenium アラートの種類(簡易アラート、プロンプトアラート、確認アラート)と、それぞれのスクリーンショット。
  • WebDriverを使用したアラート処理の実例 Alert 顧客削除シナリオを用いたインターフェース。
  • ハンドルをキャプチャして複数のブラウザー ウィンドウを処理します getWindowHandle() (NAIST) と getWindowHandles() そして、それらを切り替えながら使う。

よくあるご質問

アラートはネイティブ Javaスクリプトダイアログは、処理されるまでページを一時停止します。ポップアップウィンドウは、新しいブラウザウィンドウまたはタブです。アラートには switchTo().alert() を使用し、ポップアップには getWindowHandles() で返されるハンドルを使用して switchTo().window() を使用します。

switchTo().alert() が実行されたにもかかわらず、アラートが表示されていない場合、NoAlertPresentException がスローされます。ページがダイアログをトリガーする時間を確保するため、ExpectedConditions.alertIsPresent() が true になるまで WebDriverWait で呼び出しをラップしてください。

基本認証ポップアップは標準ではありません Javaスクリプトアラート。認証情報を渡す URL (https://user:pass@site.com) または Selenium 4 CDP Network.setExtraHTTPHeaders。SSOポップアップには、BrowserStackまたは登録済みのhasAuthenticationハンドラーを使用します。

AIアシスタントなど AI コードコパイロットは、ロケーター認識アラートハンドラーを生成し、必要な待機時間を予測し、脆弱なXPathをリファクタリングします。また、アラートテキストと子ウィンドウのアサーションも作成します。 URLs、加速 Selenium テスト作成。

はい。自己修復テストプラットフォームは、AI を使用して DOM の変更を検出し、壊れたロケーターを交換し、アラートやポップアップが移動したときに待機時間を調整します。これにより、メンテナンスが軽減されます。 Selenium 頻繁に更新されるフロントエンド上で動作するスイート。