自動化中にSeleniumまたは他のツールを使用してブラウザ認証を処理することを知っていますか?
この答えは時代遅れです。今日、WebDriverは認証をサポートしています! Javaを使用してSelenium WebDriverで認証ポップアップを処理する方法 を参照してください。
これは、Seleniumではあまりうまく処理されません。
_http://username:[email protected]/yourpage
_を使用して試すことができます
_http://example.com/yourpage
_の代わりに
ただし、私が知る限り、Firefoxは確認を求めるブラウザーダイアログをポップアップ表示します。
Java(または AutoIt のような同様のツール)を使用している場合は、 ロボット を試すことができます。
WebDriverを使用している場合は、 driver.manage().addCookie()
を使用できます。
または、カスタム FirefoxProfile が既に1回認証に合格しています。
私はこれに何日も費やしました-文字通り。会社のネットワーク内で過去のブラウザレベル認証を取得して、アプリケーションにアクセスしようとしています。解決策は、URL内の「unsername:password @」コンポーネントを使用することでしたが、ログインURLの最後にスラッシュを追加しました。
したがって、合計ログインURLは次のようになります(yourpageの後の「/」に注意してください):
http:// username:[email protected]/yourpage/
Watir、Capybara、Selenium Webdriverで動作します。
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) {
//
}
}
}
with Chrome 70およびその他のバージョン:
http://username:[email protected]/yourpage
自動ITスクリプトを使用してこの問題を処理できます
WinWaitActive("[CLASS:Chrome_WidgetWin_1]", "", time)
Send("user")
Send("{TAB}")
Send("pass")
Send("{ENTER}")
Auto-it、sikuliなどを介したすべてのハッキングは、いくつかのブラウザータイプ/ OS /バージョン/解像度などを使用して、CIソリューションで実行するときに時間を浪費するだけです。
正しく行う方法は、実際の認証方法を特定し、たとえばRESTプロトコルを使用してログインを実行することです。
JSESIONID Cookieを取得してSeleniumドライバーに挿入するために使用しました。そのためのヒント:最初にドミノの存在しない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());
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