【问题标题】:Java: focus is not on pop-window during window handlingJava:窗口处理期间焦点不在弹出窗口上
【发布时间】:2015-03-12 12:19:50
【问题描述】:

我已经打开了网站并应用了登录,然后弹出窗口打开,我想从弹出窗口中点击,但我无法打开弹出窗口。

    driver.get("https://hdfcbank.com/");
    driver.findElement(By.id("loginsubmit")).click();   

    String loginWindow = driver.getWindowHandle();
    driver.switchTo().window(loginWindow);  

    driver.findElement(By.xpath("//*[@id='wrapper']/div[6]/a/img")).click();

我无法点击第 5 行的弹出元素。你能检查一下代码吗?

【问题讨论】:

    标签: selenium-webdriver webdriver


    【解决方案1】:

    检查接受的类似问题的答案

    How to handle Pop-up in Selenium WebDriver using Java

    您需要 - getWindowHandles - & 然后遍历它们。


    如果您还没有弄清楚,这是可行的解决方案(这是针对 HDFC 示例)...

        String test_URL = "http://www.hdfcbank.com/";
        String css_login = "img#loginsubmit";
        String css_popup_continue = "img[alt='Continue']";
    
        browser = new FirefoxDriver();
        browser.navigate().to(test_URL);
    
        List<WebElement> objLogin = browser.findElements(By.cssSelector(css_login));
        if (objLogin.size() > 0) {
    
            objLogin.get(0).click();
    
            String parentWindowHandle = browser.getWindowHandle(); // save the current window handle.
            WebDriver popup = null;
            Iterator<String> windowIterator = browser.getWindowHandles().iterator();
            while(windowIterator.hasNext()) {
                String windowHandle = windowIterator.next();
                popup = browser.switchTo().window(windowHandle);
                if (popup.getTitle().contains("NetBanking")) {
                    List<WebElement> objPopupElement = popup.findElements(By.cssSelector(css_popup_continue));
                    if(objPopupElement.size() > 0){
                        System.out.println("Switched to Popup and found element...");
                        objPopupElement.get(0).click();
    
                        //Do any other operations...
                        break;
                    }
                }
            }
            //always safe to switch back to parent window to avoid any null pointers, unless parent process got closed...
            browser.switchTo().window(parentWindowHandle);
        }
        else {
            System.out.println("Logon button not found...");
        }
    

    【讨论】:

    • 这里,只有一个弹出窗口正在打开,所以我不认为 - 我们应该使用 getWindowHandles
    • Nopes..... getWindowHandle() 和 getWindowHandles() 之间是有区别的。阅读这篇文章以了解差异stackoverflow.com/questions/25871042/… 至于您的示例,请使用 getWindowHandles() ....试一试,看看行为上的差异。
    • 同意,但在上面的代码中 - 只有一个窗口正在打开,所以我可以使用 getWindowHandle() 并且它应该可以工作。请打开 hdfcbank.com 并点击登录按钮
    • 打开浏览器页面时,getWindowHandle返回第一页(主页)的窗口句柄。当您单击登录链接时,它会打开一个弹出窗口,该弹出窗口基本上是另一个 webdriver 对象(对我们来说是一个弹出窗口),其窗口句柄可以在 getWindowHandles 中获得。当父浏览器进程生成弹出窗口时,它的句柄在 getWindowHandles 中可用。请尝试这种方法并告诉我。
    • 查看我上面的答案,了解您的查询的有效解决方案。您需要了解的是 getWindowHandles 提供了由 WebDriver 生成的窗口句柄的 Set (唯一值),它还将包括父浏览器以及子弹出窗口。很抱歉再次重申这一点,但我觉得您不了解使用 getWindowHandles() 的基本目的。
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多