【问题标题】:Selenium Webdriver window switching fails randomlySelenium Webdriver 窗口切换随机失败
【发布时间】:2012-08-12 13:48:45
【问题描述】:

我正在使用 InternetExplorerDriver(我必须这样做)。我有两个窗把手。我必须在这些窗口之间切换多次。 我用这两行代码来做这个。

driver.switchTo().window(myWindowHandle1);
driver.findElement(By.xpath("//body")).click();

我添加了点击正文,否则有时开关无法正常工作,从那时起这对我来说很好。

现在我有一个新问题。 我的第三个窗口开关 (1. window1 -> window2; 2. window2 -> window1; 3. window1 -> window2;) 不再起作用了。

ElementNotVisibleException: Cannot click on element --- in this case, line 2

所以尸体不再可见。 以前的窗口开关工作得很好,所以手柄是正确的。 找到正文元素 By.tagName 并没有解决问题。 有人有同样的问题吗?解决方案?

提前致谢

问候

【问题讨论】:

  • 你的 xpath 看起来很抽象。你的切换偶尔会失败有两个原因。 超时 & 隐藏元素。尝试通过 xpath 在窗口 3 中定位另一个元素。例如,如果您的该元素的 html 代码是 您可以像这样单击此元素:@987654323 @
  • 首先,谢谢,它成功了。但是,为什么不点击身体工作?它适用于所有其他窗口开关。身体一直是可见的,不是吗?并且增加超时也没有帮助。
  • 点击body元素并不是一个好方法。 .click() 方法被记录为尝试单击元素的中心。如果元素的中心在视口中不可见,并且无法滚动到视图中,您可能会遇到您所看到的异常,至少在 IE 驱动程序中是这样。
  • 写一个答案->关闭Q thx

标签: selenium webdriver selenium-webdriver


【解决方案1】:

我终于找到了答案, 我用下面的方法切换到新窗口,

public String switchwindow(String object, String data){
        try {

        String winHandleBefore = driver.getWindowHandle();

        for(String winHandle : driver.getWindowHandles()){
            driver.switchTo().window(winHandle);
        }
        }catch(Exception e){
        return Constants.KEYWORD_FAIL+ "Unable to Switch Window" + e.getMessage();
        }
        return Constants.KEYWORD_PASS;
        }

要移动到父窗口,我使用了以下代码,

 public String switchwindowback(String object, String data){
            try {
                String winHandleBefore = driver.getWindowHandle();
                driver.close(); 
                //Switch back to original browser (first window)
                driver.switchTo().window(winHandleBefore);
                //continue with original browser (first window)
            }catch(Exception e){
            return Constants.KEYWORD_FAIL+ "Unable to Switch to main window" + e.getMessage();
            }
            return Constants.KEYWORD_PASS;
            }

使用此代码在窗口之间切换。

【讨论】: