【问题标题】:Selenium Webdriver unable to give JavaScript popup window handleSelenium Webdriver 无法提供 JavaScript 弹出窗口句柄
【发布时间】:2018-01-08 11:06:22
【问题描述】:

我有一个网页页面,其中有一个按钮,单击该按钮时会弹出一个窗口表单,我必须在其中选择一些值。我目前正在使用 IE 浏览器和 selenium 2.53 库来自动化这个流程。现在我的问题是我无法切换到这个弹出窗口,因为我没有得到任何窗口句柄,而且每次它只显示一个父句柄。

我也尝试过警报/弹出切换,但通过父页面中的按钮调用的弹出窗口仍然无法识别,因此无法在此弹出页面中执行任何操作。

Set<String> winhandle= driver.getWindowHandles();
    System.out.println(winhandle);
    for (String handle : driver.getWindowHandles()) 
    {
        System.out.println(handle); 

        String newURL = driver.getTitle();
        System.out.println(newURL); 
      }

问候, 尼尔

【问题讨论】:

    标签: javascript selenium selenium-webdriver


    【解决方案1】:

    在您的代码中,您从未真正迭代过其他窗口。

    为了正确打印所有窗口(包括弹出窗口)的句柄,请尝试修改您的代码:

    Set<String> winhandle = driver.getWindowHandles();
    for (String handle : driver.getWindowHandles()) {
        driver.switchTo().window(handle);  // This line was missing. It tells the driver to operate on a different window
        System.out.println(handle); 
    }
    

    然后 - 在测试之后 - 只要你在正确的窗口中,你就可以打破循环。

    这对你有用吗?

    【讨论】:

    • 不确定。但是我已经迭代知道我的驱动程序是否正确捕获了弹出窗口。但是每次我只得到一个父窗口浏览器句柄而不是弹出浏览器窗口。因此,除非我不知道弹出窗口的句柄名称是什么,否则我无法切换到该窗口。
    • 您没有得到其他窗口,因为您反复尝试打印同一个窗口的句柄。尝试应用我发布的代码并告诉我它是否有效
    • 谢谢..我已经尝试了你的代码,但仍然只得到一个句柄而不是 2 个句柄名称:driver.switchTo().defaultContent(); Set winhandle= driver.getWindowHandles(); for (字符串句柄: driver.getWindowHandles()) { driver.switchTo().window(handle); // 缺少这一行。它告诉驱动程序在不同的窗口上操作 System.out.println(handle); }
    • 尝试打印winhandle.size(),看看浏览器是否打开了另一个窗口,或者问题可能出在其他地方
    • 已尝试但计数 =1。这个弹出窗口被下面的 html 代码(父)调用:-
    【解决方案2】:

    这很奇怪,但现在使用窗口句柄和 switchTO 的相同代码在 chrome 浏览器上运行良好,但在 IE 浏览器上却不工作。我不知道如何在 IE 浏览器中修复它,但在 chrome 浏览器中运行良好。

    问候, 尼尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多