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@」の形式で認証情報を埋め込むことです。ネイティブダイアログを直接操作できない制約を回避できるため、テスト自動化において非常に便利なテクニックです。ただしセキュリティ面の注意点も理解した上で、適切な場面で活用しましょう。
-
JavaのJPopupMenuで右クリックメニュー(コンテキストメニュー)を実装する方法
Java SwingのJPopupMenuを使うと、マウスの右ボタンがクリックされたタイミングで、画面上の任意の場所にポップアップメニュー(コンテキストメニュー)を表示できます。 JPopupMenuの基本 ポップアップメニューは、インボーカー(invoker)と呼ばれる基盤となるコンポーネントに関連付けられた自由配置型のメニューです。 多くの場合、ポップアップメニューは特定のコンポーネントに紐付けられ、状況に応じた選択肢(コンテキスト依存の操作)を表示するために使用されます。 ポップアップメニューを作成するにはJPopupMenuクラスを使用し、通常のメニューと同じようにJMenuItem
-
JavaのJWindowを使ってスプラッシュ画面を実装する方法
JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプ