【问题标题】:How to automate basic authentication chrome alert如何自动化基本身份验证 chrome 警报
【发布时间】:2018-05-01 04:26:41
【问题描述】:

尝试了几种方法来处理它,但都没有成功。

  1. https://user:password@pageaddress.com - 不起作用,chrome 启动受控 bu 会自动执行测试软件,并且仍然会出现身份验证弹出窗口。

  2. --disable-blink-features=BlockCredentialedSubresources 添加到 Chrome arg 并重复第 1 点 - 不起作用,原因与第 1 点相同。

  3. driver.switchTo().alert.authenticateUsing(new UserAndPassword(user, password)) - 这里似乎驱动程序没有看到警报,已经执行了检查它并返回 false 的方法:

    private Alert alert; public boolean isAlertPresent() { try { waitForTimeout(10, TimeUnit.SECONDS); alert = driver.switchTo().alert(); return true; } catch (NoAlertPresentException e) { return false; }}

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

    chromedriver 2.31 Google Chrome Version 61

还有其他想法吗?也许一些js脚本?

【问题讨论】:

    标签: java google-chrome authentication selenium-chromedriver alert


    【解决方案1】:

    我有类似的here。 不过,您可能不需要完整的 Native Messaging API... 这将全部是 JavaScript,并且适用于任何浏览器生成的身份验证请求(至少看起来是这样)。

    webRequest - chromefirefox - 具有 anAuthRequired 事件。 您可以使用侦听器连接到此,然后只需通过一些 examples 传递您需要的凭据。

    如果您只想传递不会更改的用户凭据,则需要使用同步方法 - 它更容易。 This question 确实可以满足您的所有需求。

    如果您需要传递不同的凭据,您可能很想研究异步方法,这是我必须使用的方法。 如果您使用的是 chrome,请忘记 promises ... 但 Firefox 应该可以使用它们。

    希望这有帮助!

    【讨论】:

      【解决方案2】:

      最后 - 我能够通过 Robot Framework 做到这一点,这不是我引以为豪的解决方案,但没有任何其他想法。

      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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 2019-06-12
        • 2015-11-12
        • 2020-04-06
        • 1970-01-01
        • 2011-03-18
        相关资源
        最近更新 更多