Chrome 59には https:// user:[email protected] URLのサポートが削除されました があります。
この機能を使用していたテストで、現在は機能しなくなったため、認証ポップアップを待機して詳細を入力するバージョンに置き換えようとしています。しかし、以下はChrome=では機能しません(認証ポップアップがアラートとして表示されません):
alert().authenticateUsing(new UserAndPassword("test", "test"));
Seleniumのみのバージョンにも同じ問題があります。
WebDriverWait wait = new WebDriverWait(getDriver(), 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.authenticateUsing(new UserAndPassword("test", "test"));
(ここに与えられた答えに基づいて: Javaを使用してSelenium WebDriverで認証ポップアップを処理する方法 )
FireFoxでこれを処理するためのいくつかの回避策を見ることができますが、Chromeには何もありません。別の方法はありますか?
Florent Bのソリューションは実行可能であると確信していますが、古いテストをレトロフィットするために、zoonabarのソリューションが この重複する質問 に投稿された方が実装が簡単で、コードが大幅に少なくて済み、特別なことを必要としないことがわかりましたテストボックスの準備。また、コードを見る新しい開発者にとっては従う方が簡単だと思われます。
つまり、テスト中のURL(資格情報なし)にアクセスする前に、資格情報付きのURLにアクセスすると、ブラウザーに資格情報が記憶されます。
goTo("http://user:password@localhost"); // Caches auth, but page itself is blocked
goTo("http://localhost"); // Uses cached auth, page renders fine
// Continue test as normal
これは、パッチが適用されるブラウザーの脆弱性のように感じるかもしれませんが、これはありそうもないと思います。制限は、フィッシングリスクを回避するために課されています(選択されたユーザー名がドメインのように見える場合、たとえば " http://google.com:long-token-here-which-makes-the-real-domain-disappear @ example.com / ")、および資格情報を設定するためのこの回避策は、同じリスクをもたらしません。
1つの解決策は、透過的なプロキシを実行して、必要な資格情報をヘッダーに挿入することです。
しかし、もう1つの簡単な解決策は、資格情報を自動的に設定する小さな拡張機能を作成することです。
https://Gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46
オーバー https://bugs.chromium.org/p/chromium/issues/detail?id=435547#c mkwstで、基本認証の認証情報と同じOriginサイトにバグがあったことを確認できます安定させました。
「--disable-blink-features = BlockCredentialedSubresources」を使用するか、Chrome Canary buildに移動すると、元々発生していた問題がもう発生していないことがわかります...
Florent B.は、chrome拡張機能の助けを借りて、Seleniumテストでオンザフライで追加されたソリューションを見つけました。必要に応じて、拡張機能は基本的な認証資格情報を処理します。
ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("C:/path_to/credentials_extension.Zip"));
driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), options);
Chrome拡張コード: https://Gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46
(background.jsのユーザー名とパスワードを変更してから、ファイルbackground.jsおよびmanifest.jsonをcredentials_extension.Zipに圧縮します)
ここにあります: Selenium-URLによる基本認証