弹出Windows身份验证问题

时间:2017-08-10 14:10:12

标签: selenium selenium-webdriver

目前我正在开展一个项目,我正面临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); 
            }

1 个答案:

答案 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表示您接受/单击该页面上所有确认框上的确定(如果被调用)

希望它会对你有所帮助:)。