【问题标题】:Selenium Webdriver Handling Popup windowSelenium Webdriver 处理弹出窗口
【发布时间】:2025-06-06 09:40:02
【问题描述】:

我正在尝试自动化我的项目的登录场景。 在点击 URL 之后,甚至在页面加载之前就会出现一个 POPUP Authentication 窗口。 如果我们不通过那个窗口,我们就看不到主页。

问题是一旦弹出窗口出现,我无法使用 firebug 检查元素,它不允许我点击其他任何地方。

我尝试处理窗口,但控件仍然没有进入用户名和密码文本框。 我试过windowhandle,机器人类但不工作。 请问有人可以帮忙吗??

这是一段代码:-

Set<String> handles = driver.getWindowHandles(); // get all window handles
        System.out.println(handles.size());
        Iterator<String> iterator = handles.iterator();
        while (iterator.hasNext()){
            subWindowHandler = iterator.next();
        }
        driver.switchTo().window(subWindowHandler);
also the robot class:-

 Robot rb = new Robot();

                //Enter user name by ctrl-v
                StringSelection username = new StringSelection("myusername");
                Toolkit.getDefaultToolkit().getSystemClipboard().setContents(username, null);  
                Thread.sleep(2000);
river.switchTo().window(mainHandle);
                rb.keyPress(KeyEvent.VK_A);
                    rb.keyRelease(KeyEvent.VK_A);
                    rb.keyPress(KeyEvent.VK_M);
                    rb.keyRelease(KeyEvent.VK_M);
                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 pass = new StringSelection("password");
                Toolkit.getDefaultToolkit().getSystemClipboard().setContents(pass, 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);

                //wait
                Thread.sleep(5000);

【问题讨论】:

    标签: javascript selenium


    【解决方案1】:

    你可以做一件事。你可以试试。

    如果我们按下 ESC 按钮,那么应用程序会多次停止处理。

    点击事件后使用下面的代码:-

    Robot r = new Robot();
    r.keyPress(KeyEvent.VK_ESCAPE);
    r.keyRelease(KeyEvent.VK_ESCAPE);
    

    上面的代码将为您按 ESC。现在您可以有时间找到元素了。

    希望对你有帮助:)

    【讨论】:

    • 嗨,Shubham,我无法检查该身份验证弹出窗口中的元素。它首先要求在该弹出窗口上提供输入。
    【解决方案2】:

    不可能使用 Selenium 自动执行基于浏览器的身份验证。

    • 如果您的身份验证基于 http,请尝试使用格式打开 url - http://username:password@example.com/ 而不是 example.com

    • 如果您仍然想自动化它,那么使用像 AutoIt 这样的第三方插件来完成它,它与 Selenium 一起工作。 AutoIt 用于自动化基于 Windows 的桌面应用程序,包括浏览器。这里有一些你可以参考的链接-

    • 您还可以使用 Firefox 插件,当您打开 url 时,它会自动验证弹出窗口。但这是手动设置,您必须执行一次身份验证,以便插件记住它。 Here's one of them

    希望这会有所帮助。

    【讨论】:

    • 你好 Girish,我试过第一个选项不起作用,在页面加载之前,身份验证弹出窗口来了。第二,我们如何使用 AutoIT 和 Selenium Webdriver 来实现自动化,你可以描述一下。
    • 这是一个很大的过程。更新了答案,其中包含一些可以帮助您实现自动化的链接。