无法单击使用单击方法(无异常)以及无法切换到父窗口

时间:2015-08-06 20:18:44

标签: java selenium selenium-webdriver webdriver internet-explorer-11

这是我的配置: Windows 7 VM + Selenium Web驱动程序+ IE 11 + IE驱动程序服务器64位

我有一个奇怪的问题,其中,当代码中遇到click事件时,执行只是暂停而不会继续。我能够通过使用sendKeys(Keys.Enter)而不是点击来克服这个问题。但我在尝试切换到弹出窗口并返回到父框架时看到了相同的行为。

这是我用于切换到子窗口并返回父窗口的代码:

            WebDriver popup = null;
            String popwin = "";
            boolean present;

            try {

                System.out.println(driver.getCurrentUrl());

                String winHandleBefore = driver.getWindowHandle();
                for (String winHandle : driver.getWindowHandles()) {
                    System.out.println("WinHandle : " + winHandle);
                    popwin = winHandle;
                }
                 popup = driver.switchTo().window(popwin);
               Actions action = new Actions(popup); action.moveToElement(popup.findElement(by.id("idContinue")))
                                .sendKeys(Keys.ENTER).build().perform(); //works fine till above, clicks continue button in popup and the popup closes automatically
             driver.switchTo().window(winHandleBefore);

执行在最后一行暂停,Thread继续运行,没有结果,也没有抛出异常。

谢谢!

注意:被测试的应用程序是IE兼容的系统,因此无法在其他浏览器中进行测试。(应用程序甚至不在其他浏览器中加载)

1 个答案:

答案 0 :(得分:0)

弹出窗口显示在屏幕上或之前是否执行了此部分代码?

如果在显示弹出窗口后执行此操作,则行:

String winHandleBefore = driver.getWindowHandle();

正在获取弹出窗口的实例,并在单击按钮时关闭弹出窗口,您正在销毁该实例本身。

因此,有两个解决方案可以解决这个问题:

  1. 在屏幕上显示弹出窗口之前放置一行:[String winHandleBefore = driver.getWindowHandle();]。
  2. 修改现有代码:

        WebDriver popup = null;
        String popwin = "";
        boolean present;
    
        try {
    
            System.out.println(driver.getCurrentUrl());
    
            for (String winHandle : driver.getWindowHandles()) {
                System.out.println("WinHandle : " + winHandle);
                driver.switchTo().window(winHandle);
                Actions action = new Actions(popup);
                action.moveToElement(popup.findElement(by.id("idContinue"))).sendKeys(Keys.ENTER).build().perform();
                break; 
            }
    
  3. 这两个技巧肯定会解决你所面临的问题