我正在测试一个只能通过 Internet Explorer 访问的内部网站,该网站使用 Windows 身份验证来验证用户凭据并且必须测试多个帐户,因此我需要能够以不同的人“登录”到该网站(我以前曾考虑让多台机器分别以相关帐户登录,但不能这样做)。
如果我以我的 webdriver 帐户访问该页面,我会得到一个标准的 Internet Explorer“Windows 安全”弹出窗口,我可以在其中毫无问题地输入我的登录详细信息。到目前为止唯一的问题是 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);