Selenium:WebDriver在切换到新打开的窗口时会阻塞

时间:2013-05-25 17:53:29

标签: selenium

在selenium中,WebDriver.switchTo().window(aWindowHander)用于切换不同的窗口。但我在IE9中遇到了一个问题:

单击按钮时,我认为通过javascript打开一个新窗口。 WebDriver.getWindowHandles()返回两个窗口处理程序。这意味着检测到新的opend窗口。但是WebDriver.switchTo.window(newOpenedWindow)被阻止了白色错误,永远阻止。没有例外,没有错误,只是在这里阻止。似乎新的窗口总是得到关注。

我没有尝试过其他浏览器,因为IE9仅出于某种原因使用。

哦,天啊!有人可以给我一些帮助吗?

===更新了代码段===

WebElement input = webDriver.findElement(By.id("inputField"));
input.sendKeys("hello");
/* Make a 'tab' opertation to lose focus. 
 * This will trigger the new window opening.
 * Unfortunately, the web site is not mine. 
 * And only IE support, some detail javascript is not read clearly.
 * I can't be sure that how the new winodw opens. It seems to use
 * 'window.location = newurl' for doing that.
 */
input.sendKeys(Keys.TAB);

//Now the window opened. So here return the handle with size = 2
Set<String> handles = webDriver.getWindowHandles();

for(String handle : handles)
{
    if(!mainWinHander.equals(handle))
    {
        // Here will block for ever. No exception and timeout!
        webDriver.switchTo().window(handle);
    }
}

此代码适用于此帖子modal dialoghttp://tinyurl.com/ykt97gx处的示例链接。但对我的问题不起作用。因此,重点应该是打开新窗口的方式。该页面由几个框架组成。我试图建立一个网站来模拟打开这样的窗口的情况,但失败了。真正的网站需要enterpise vpn才能访问。所以它不能在外面访问。

2 个答案:

答案 0 :(得分:0)

也许原因是弹出窗口没有准备好。例如,从firebug的控制台执行句子document.readyState。如果结果不“完整”,则存在问题。

我有同样的问题,因为弹出窗口仍处于“正在加载”状态,如果状态不是“完成”,则不会运行driver.swhichTo(xxx).window。

答案 1 :(得分:0)

好用了,它使用的是Chrome。...版本70.0.3538.67(官方内部版本)(64位)。我正在尝试构建一个无阻塞的测试套件-看起来当readyState被“加载”时整个东西都被锁定了

document.readyState;
"loading"
dojo.js?xxxxxxxx [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
req.getText @ xxxxxxx
document.readyState;
document.readyState
document.readyState
document.readyState
document.readyState
document.readyState
document.readyState
document.readyState
document.readyState
"loading"
"loading"
"loading"
"loading"
"loading"
"loading"
"loading"
"loading"
"loading"
document.readyState
"loading"

....而且很久以后...

document.readyState;
"complete"

此时,getElementById函数等开始返回。