Windows認証を使用してユーザーの資格情報を検証し、複数のアカウントをテストする必要があるInternet Explorer経由でのみアクセスできる内部Webサイトをテストしているため、別の人としてWebサイトに「ログイン」できる必要があります(私は以前は、複数のマシンをそれぞれ関連するアカウントとしてログインさせることを検討していましたが、これを行うことはできません)。
webdriver アカウントとしてこのページにアクセスすると、標準の Internet Explorer の "Windows Security" ポップアップが表示され、ログインの詳細を問題なく入力できます。これまでのところ唯一の問題は、webdriver がポップアップを認識しないことです。
Java Robot クラスを使用してこれを行うことができると思い、Selenium webdriver スクリプトにプラグインすることがわかったコードをいくつか切り取ったところ、ほとんど機能します。問題は、表示されたログイン ウィンドウを手動でクリックしてコピーする場合にのみ機能することです。詳細を貼り付けます (以下のコードを参照)。コピーして貼り付ける前に、Selenium またはロボットを使用してこのオブジェクトにフォーカスを設定する方法について何か提案はありますか?
public Boolean loginDetails(individualThreadSession threadSesh){
Action myAction = new Action();
final String USERNAME= "loginID";
final String PASSWORD= "myPassword";
myAction.simpleWait(1);
Robot robot = null;
try {
robot = new Robot();
} catch (AWTException e) {e.printStackTrace();}
type(robot, USERNAME);
myAction.simpleWait(1);
robot.keyPress(KeyEvent.VK_TAB);
myAction.simpleWait(1);
robot.keyRelease(KeyEvent.VK_TAB);
myAction.simpleWait(1);
type(robot, PASSWORD);
myAction.simpleWait(1);
robot.keyPress(KeyEvent.VK_ENTER);
myAction.simpleWait(1);
robot.keyRelease(KeyEvent.VK_ENTER);
myAction.simpleWait(1);
return(true);
}
public static void type(Robot robot, String characters) {
Action myAction = new Action();
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection stringSelection = new StringSelection( characters );
clipboard.setContents(stringSelection, null);
robot.keyPress(KeyEvent.VK_CONTROL);
myAction.simpleWait(1);
robot.keyPress(KeyEvent.VK_V);
myAction.simpleWait(1);
robot.keyRelease(KeyEvent.VK_V);
myAction.simpleWait(1);
robot.keyRelease(KeyEvent.VK_CONTROL);
myAction.simpleWait(1);
}
情報をコピーして貼り付けるのではなく、個々のキーストロークを入力することも試みましたが、それも機能します。機能する前に画面にフォーカスを与える必要があります... :S
これも試しましたが、まだWindowsセキュリティダイアログにフォーカスを設定していません...
Alert aa = threadSesh.driver.switchTo().alert();
aa.sendKeys(USERNAME);