目前我正在开展一个项目,我正面临Windows身份验证弹出窗口。为了处理这个弹出窗口我正在使用Robot类。它也正常工作。但我的主要问题是,同样的弹出窗口一次又一次地动态出现。我怎么能控制这个?有人可以帮我这个方面吗?我写了下面的代码来控制一个Windows弹出窗口。
StringSelection username = new StringSelection("Username");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(username, null);
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_CONTROL);
//tab to password entry field
rb.keyPress(KeyEvent.VK_TAB);
rb.keyRelease(KeyEvent.VK_TAB);
Thread.sleep(2000);
//Enter password by ctrl-v
StringSelection pwd = new StringSelection("Password");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(pwd, null);
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_CONTROL);
//press enter
rb.keyPress(KeyEvent.VK_ENTER);
rb.keyRelease(KeyEvent.VK_ENTER);
}
答案 0 :(得分:1)
您可以创建/修改方法isAlertPresent,如下所示并尝试。它可能对你有帮助。
如果出现警报,首先用以下方法确认
public boolean isAlertPresent() {
try{
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.alertIsPresent());
return true;
}
catch (NoAlertPresentException noAlert) {
return false;
}
catch (TimeoutException timeOutEx){
return false;
}
}
这是一个身份验证弹出窗口。你可以像下面这样处理它: -
WebDriverWait wait = new WebDriverWait(driver, 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.authenticateUsing(new UserAndPassword(username, password));
OR
driver.get("http://UserName:Password@Example.com");
OR
如果上面没有工作,那么JavascriptExecutor为你工作。在点击调用警报的事件之前,请务必执行它。
((JavascriptExecutor) driver).executeScript("window.confirm = function(msg) { return true; }");
注意: - 点击调用警报确认框的事件后不要使用它。默认情况下,上面的代码将确认框设置为true表示您接受/单击该页面上所有确认框上的确定(如果被调用)
希望它会对你有所帮助:)。