自動化中にSeleniumまたはその他のツールを使用してブラウザ認証を処理することを知っている人はいますか?
7 に答える
2015年に編集:
この回答は時代遅れです。最近のWebDriverは認証をサポートしています!Javaを使用してSelenium WebDriverで認証ポップアップを処理する方法を参照してください
元の答え:
これは、Selenium ではうまく処理できません。
使用してみることができますhttp://username:password@example.com/yourpage
ただの代わりにhttp://example.com/yourpage
ただし、私の知る限り、Firefox は確認を求めるブラウザ ダイアログを表示します。
Java (またはAutoItのような同様のツール) を使用している場合は、Robotを試すことができます。
driver.manage().addCookie()
WebDriver を使用している場合に使用できます。
または、一度認証に合格したカスタムFirefoxProfile 。
auto-it、sikuli などを介したすべてのハッキングは、CI ソリューションで実行するときに、いくつかのブラウザー タイプ / OS / バージョン / 解像度などを使用して時間を無駄にするだけです。
正しく行う方法は、認証の実際の方法を特定し、たとえば Rest プロトコルを使用してログインを実行することです。
これを使用して JSESIONID Cookie を取得し、それをセレン ドライバーに挿入しました。そのヒント: 最初にドミアンの非存在 URL に移動し、次に Cookie を設定してから、必要な URL に移動します。ログイン済みです。
使用: JSESSION ID を取得するための残りのクライアント認証
そしてこの情報で:
browser().navigate(foo.getUrl()+"non-exiting-url");
//the information got from the rest client login:
Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure, isHttpOnly);
try {
driver.manage().addCookie(cookie);
} catch (Exception e) {
System.out.println(e.toString());
}
browser().navigate(foo.getUrl());
私が Web で読んだことはすべて役に立ちませんでした。したがって、リクエストを行う前に、次のようにします。
driver.get(url);
次のような新しいスレッドを実行する必要があります。
RunScript runScript = new RunScript();
runScript.start();
この場合、次のクラスの別のスレッドでログインとパスワードを自由に入力できます
public class RunScript extends Thread {
@Override
public void run() {
try {
File file = new File("D:\\jacob-1.18-x86.dll");
System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());
AutoItX autoIt = new AutoItX();
Thread.sleep(2000);
autoIt.winActivate("yourWindowName", "");
autoIt.winWaitActive("yourWindowName");
if (autoIt.winExists("yourWindowName")) {
autoIt.send("username{TAB}", false);
autoIt.send("password{Enter}", false);
}
}
} catch (InterruptedException ex) {
//
}
}
}
Firefoxを使用してSelenium 2 / Selenium WebDriverでJava Robotクラスを使用できます
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:9990");
WebElement myDynamicElement = driver.findElement(By.id("app"));
Alert alert = driver.switchTo().alert();
try {
Robot robot = new Robot();
alert.sendKeys("username");
robot.keyPress(KeyEvent.VK_TAB);//go to password feild
robot.keyPress(KeyEvent.VK_P);
robot.keyPress(KeyEvent.VK_A);
robot.keyPress(KeyEvent.VK_S);
robot.keyPress(KeyEvent.VK_S);
robot.keyPress(KeyEvent.VK_ENTER);
} catch (AWTException e) {
e.printStackTrace();
}
}
ロボットでの Selenium の使用
http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Robot.html