Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaとSelenium WebDriverでBasic認証ポップアップを処理する方法

認証ポップアップとは

Selenium WebDriverを使用した自動テストでは、サイトにアクセスした際に「Basic認証」によるユーザー名・パスワード入力のポップアップが表示されることがあります。この認証ダイアログはOSネイティブのウィンドウであるため、通常のSeleniumコマンドでは直接操作できません。

そこで最もシンプルな対策として、URLの中にユーザー名とパスワードを埋め込む方法があります。これにより、認証ポップアップをスキップしてページへ直接アクセスできます。

URLへの認証情報の埋め込み方法

認証情報を含めたURLは以下の形式で記述します。

https://username:password@URL

具体例を見てみましょう。テスト用サイト「the-internet.herokuapp.com」のBasic認証ページでは、ユーザー名とパスワードがどちらも「admin」に設定されています。

https://admin:admin@the-internet.herokuapp.com/basic_auth
  • username(ユーザー名): admin
  • password(パスワード): admin
  • URL: the-internet.herokuapp.com/basic_auth

この形式のURLにアクセスすると、通常表示される認証ポップアップを回避し、認証済みの状態でページを開くことができます。

実装例

Javaで実際にコードを書いてみましょう。ChromeDriverを使い、認証情報付きURLへアクセスした後、ページ上のテキストを取得してコンソールに出力します。

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

public class AuthnPopup {
   public static void main(String[] args) {
      // ChromeDriverのパスを設定
      System.setProperty("webdriver.chrome.driver",
         "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
      WebDriver driver = new ChromeDriver();

      String u = "admin";

      // URLにユーザー名とパスワードを埋め込む
      String str = "https://" + u + ":" + u + "@"
         + "the-internet.herokuapp.com/basic_auth";
      driver.get(str);

      // 認証後に表示されるテキストを取得
      String t = driver.findElement(By.cssSelector("p")).getText();
      System.out.println("Text is: " + t);

      // ブラウザを閉じる
      driver.close();
   }
}

コードのポイント解説

  • System.setProperty(): ChromeDriverの実行ファイルパスを指定します。環境に合わせてパスを変更してください。
  • 文字列連結によるURL生成: ユーザー名とパスワードを変数化することで、認証情報の変更が容易になります。
  • driver.get(str): 認証情報付きURLへアクセスし、ポップアップを表示させずに認証を完了させます。
  • getText(): 認証成功後に表示される確認メッセージ(「Congratulations! You must have the proper credentials.」など)を取得します。

実行結果

コードを実行すると、認証ポップアップが表示されることなくページへアクセスされ、コンソールには以下のような認証成功メッセージが出力されます。

Text is: Congratulations! You must have the proper credentials.

注意点

  • URLに認証情報を直接埋め込む方法は手軽ですが、資格情報がURLやログに残るため、本番環境での機密情報には不向きです。テスト用途に限定しましょう。
  • Chromeの最新バージョンでは、サブリソースへの認証情報埋め込みURLがブロックされる場合があります。その場合は、DesiredCapabilitiesやChromeOptions、あるいはAlertクラスやAutoItなどの代替手段を検討してください。
  • Selenium 4以降では、DevToolsプロトコルやBiDi APIを使った認証ヘッダーの登録など、より安全な手法も利用可能です。

まとめ

Selenium WebDriverでBasic認証ポップアップを処理する最も簡単な方法は、URLに「username:password@」の形式で認証情報を埋め込むことです。ネイティブダイアログを直接操作できない制約を回避できるため、テスト自動化において非常に便利なテクニックです。ただしセキュリティ面の注意点も理解した上で、適切な場面で活用しましょう。

  1. JavaのJPopupMenuで右クリックメニュー(コンテキストメニュー)を実装する方法

    Java SwingのJPopupMenuを使うと、マウスの右ボタンがクリックされたタイミングで、画面上の任意の場所にポップアップメニュー(コンテキストメニュー)を表示できます。 JPopupMenuの基本 ポップアップメニューは、インボーカー(invoker)と呼ばれる基盤となるコンポーネントに関連付けられた自由配置型のメニューです。 多くの場合、ポップアップメニューは特定のコンポーネントに紐付けられ、状況に応じた選択肢(コンテキスト依存の操作)を表示するために使用されます。 ポップアップメニューを作成するにはJPopupMenuクラスを使用し、通常のメニューと同じようにJMenuItem

  2. JavaのJWindowを使ってスプラッシュ画面を実装する方法

    JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプ