web-dev-qa-db-ja.com

Javaを使用してSelenium WebDriverで認証ポップアップを処理する方法

私は以下のコードを使用して認証ポップアップを処理しようとしています:

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.http.phishy-userpass-length", 255);
profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "x.x.x.x");
driver = new FirefoxDriver(profile);
baseUrl="http://" + login + ":" + password + "@" + url;
driver.get(baseUrl + "/");

テストを実行すると、ページに認証ポップアップが表示され、キャンセルボタンをクリックするまでロードされ続けます。その瞬間、次のページにアクセスできます。つまり、認証は成功しますが、常に認証ポップアップが表示されます。

48
Imen CHOK

アラートメソッド authenticateUsing() を使用すると、Http Basic Authenticationボックスをスキップできます。

WebDriverWait wait = new WebDriverWait(driver, 10);      
Alert alert = wait.until(ExpectedConditions.alertIsPresent());     
alert.authenticateUsing(new UserAndPassword(username, password));

Selenium 3.4の時点では、まだベータ版です

現在、実装はInternetExplorerDriverに対してのみ行われています

40
Prashanth Sams

Firefoxプロファイルを使用しないで、以下のコードを試してください。

driver.get("http://UserName:[email protected]");

IEブラウザーで実装する場合、特定の作業が必要です。

認証サーバーが「domainuser」などのドメインのユーザー名を必要とする場合は、URLに二重スラッシュ/を追加する必要があります。

//localdomain\user:[email protected]
30
Raghav Arora

次の解決策を試してみて、問題が発生した場合はお知らせください。

driver.get('https://example.com/')
driver.switchTo().alert().sendKeys("username" + Keys.TAB + "password");
driver.switchTo().alert().accept();

これは私のためにうまく機能しています

7
user6939

私はこの問題に何度も直面しました。

通常、これは以下の2つのアプローチで処理できます。

  1. ユーザー名とパスワードをURL自体に渡します

  2. URLを開く前に、AutoITスクリプトを作成してスクリプトを呼び出すことができます。

両方の方法について言及した以下の記事を確認してください。
Selenium Webdriverの[認証/ログインの処理]ウィンドウ

7
Mukesh Otwani

これは AutoAuthプラグイン を使用してFirefoxで機能するはずです:

FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default");
File ffPluginAutoAuth = new File("D:\\autoauth-2.1-fx+fn.xpi");
firefoxProfile.addExtension(ffPluginAutoAuth);
driver = new FirefoxDriver(firefoxProfile);
3
Ripon Al Wasim

NTLMプロキシ認証を処理する必要がある場合は、 CNTLM を使用してローカルプロキシを構成することをお勧めします。

資格情報とドメインは/etc/cntlm.confで構成されます。

その後、すべてのNTLMを処理する独自のプロキシを使用できます。

DesiredCapabilities capabilities = DesiredCapabilities.chrome();

Proxy proxy = new Proxy();
proxy.setHttpProxy("localhost:3128");
capabilities.setCapability(CapabilityType.PROXY, proxy);

driver = new ChromeDriver(capabilities);
2
cjungel