Java 如何自动执行基本身份验证chrome警报

Java 如何自动执行基本身份验证chrome警报,java,google-chrome,authentication,selenium-chromedriver,alert,Java,Google Chrome,Authentication,Selenium Chromedriver,Alert,我试过几种方法来处理它,但没有一种有效 https://user:password@pageaddress.com-不起作用,chrome启动控制bu自动测试软件,验证弹出窗口仍然出现 向Chrome arg添加--禁用闪烁功能=BlockCredentialedSubresources,并重复第1点-不起作用,原因与第1点相同 driver.switchTo().alert.authenticateSing(新用户和密码(用户,密码))-这里的驱动程序似乎没有看到警报,使用强制方法检查警报并返

我试过几种方法来处理它,但没有一种有效

  • https://user:password@pageaddress.com
    -不起作用,chrome启动控制bu自动测试软件,验证弹出窗口仍然出现

  • 向Chrome arg添加
    --禁用闪烁功能=BlockCredentialedSubresources
    ,并重复第1点-不起作用,原因与第1点相同

  • driver.switchTo().alert.authenticateSing(新用户和密码(用户,密码))
    -这里的驱动程序似乎没有看到警报,使用强制方法检查警报并返回false:

    私人警报;
    公共布尔值isAlertPresent(){
    试一试{
    waitForTimeout(10,时间单位秒);
    alert=驱动程序.switchTo().alert();
    返回true;
    }捕获(NoAlertPresentException e){
    返回false;
    }}

  • 通过selenium
    Action()
    触发键盘或鼠标事件也不起作用

    chromedriver 2.31
    谷歌Chrome 61版


  • 还有其他想法吗?也许是js脚本

    最后,我通过Robot框架完成了这项工作,这不是我引以为豪的解决方案,但我没有其他想法

    import java.awt.*;
    import java.awt.datatransfer.StringSelection;
    import java.awt.event.KeyEvent;
    
    private Robot robot;
    
    public void login(String login, String password) {
        copyValueFromClipboardToInput(login);
        getRobot().keyPress(KeyEvent.VK_TAB);
        getRobot().keyRelease(KeyEvent.VK_TAB);
        copyValueFromClipboardToInput(password);
        getRobot().keyPress(KeyEvent.VK_ENTER);
        getRobot().keyRelease(KeyEvent.VK_ENTER);
    }
    
    private void copyValueFromClipboardToInput(String value) {
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(value), null);
        getRobot().keyPress(KeyEvent.VK_CONTROL);
        getRobot().keyPress(KeyEvent.VK_V);
        getRobot().keyRelease(KeyEvent.VK_V);
        getRobot().keyRelease(KeyEvent.VK_CONTROL);
    }
    
    private Robot getRobot() {
        if (robot == null) {
            try {
                robot = new Robot();
            } catch (AWTException e) {
                e.printStackTrace();
            }
        }
        return robot;
    }
    
    我也有类似的经历。 但是,您可能不需要完整的本机消息传递API。。。 这些都是JavaScript,可以用于任何浏览器生成的身份验证请求(至少看起来是这样)

    webRequest-and-有一个anAuthRequired事件。 你可以通过一个监听器连接到这一点,然后只需根据一些请求传入你需要的凭据

    如果您只想传入不会更改的用户凭据,那么您需要使用同步方法—这要简单得多。事实上,这就是你所需要的一切

    如果您需要传递不同的凭据,您可能需要研究异步方法,这是我必须使用的方法。 如果你使用的是chrome,忘记。。。但是Firefox应该与他们合作

    希望这有帮助