0

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

我认为,单击按钮时,javascript会打开一个新窗口。并WebDriver.getWindowHandles()返回两个窗口处理程序。这意味着检测到新打开的窗口。但是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);
    }
}

此代码适用于 This post modal dialoghttp://tinyurl.com/ykt97gx上的示例链接。但不适用于我的问题。所以重点应该是新窗口打开的方式。页面由几个框架组成。我尝试建立一个网站来模拟打开此类窗口的情况,但失败了。真正的网站需要企业vpn才能访问。所以不能在外面参观。

4

2 回答 2

0

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

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

于 2014-02-03T13:26:50.947 回答
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 函数等开始返回。

于 2018-11-07T04:56:13.520 回答