WebDriverでBasic認証を突破する
WebDriverでのBasic認証突破
- Basic認証がかかっているページの対処方法について書きます。
- テスト用のサイトはBasic認証外すっていう対応もいいと思います。
- でも、環境ごとに差分作りたくなかったり、Basic認証通ること自体をテストしたいこともあるかも。
- とはいえ、GUI自動テストは万能ってわけでもないので、自動テストする観点を分けるっていう諦めもときには大事だと思っています。
通常は、以下の通りでよいはず
WebDriverWait wait = new WebDriverWait(driver, 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.authenticateUsing(new UserAndPassword(username, password));
- しかし、現状(2017/08/02)はInternetExplorerDriver、かつSelenium-3.4でしか動作していない。
- 各ブラウザのDriverは安定しないことも多く、一度動いていても動かなくなったり、Chromeでは動いたけど、IEでは動かないなどということもある。
そのため、以下のような対処方法となる。
/**
* Basic認証付きページにアクセスする
* @param driver webdriver
* @param baseUrl 認証ありページと同一ドメインの認証なしページ
* @param protectedUrl 認証ありページ
* @param username username
* @param password password
*/
public static void basicAuthentication(
WebDriver driver, String baseUrl, String protectedUrl, String username, String password) {
// 認証前ページにアクセス
driver.get(baseUrl);
// JavaScriptで認証
JavascriptExecutor jexec = (JavascriptExecutor) driver;
StringBuilder js = new StringBuilder();
js.append("var XMLReq = new XMLHttpRequest();");
js.append("XMLReq.open('GET', '"
+ protectedUrl + "', false, '"
+ username + "', '" +
password + "');");
js.append("XMLReq.send(null);");
jexec.executeScript(js.toString());
// 認証後ページにアクセス
driver.get(protectedUrl);
}
-
流れ
- 認証が必要なページと同一ドメインで、認証がかかっていないページに遷移する。※前提条件となる。
- JavaScriptのXMLHttpRequestを使い、Basic認証を行う
- 認証がかかっているページに遷移する。
- 認証が必要なページと同一ドメインで、認証がかかっていないページに遷移する。※前提条件となる。
-
※前提条件:ドメイン内のすべてのページでBasic認証がかかっている場合、この方法は使えない。
- JavaScriptでリクエストを投げる場合、同一ドメインから投げる必要があるため。ドメイン内のページに遷移後、JavaScriptからリクエストを発行するとう仕組みを使っている。
Author And Source
この問題について(WebDriverでBasic認証を突破する), 我々は、より多くの情報をここで見つけました https://qiita.com/nobutnk/items/2086144d853d198dd762著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .