IE和Selenium:window.createPopup()

时间:2010-09-30 13:56:06

标签: javascript internet-explorer selenium

我最近一直在玩Selenium,试图为仅IE应用程序创建测试。事情正在取得进展(虽然没有录音机插件,我不得不求助于尝试寻找合适的元素路径的试验和错误),但现在我遇到了与弹出菜单相关的问题。

大多数应用程序操作是从使用javascript window.createPopup()创建的弹出菜单触发的,我似乎无法找到将事件发送到弹出窗口内元素的方法。

也许我应该选择弹出窗口,就像我用window.open(...)打开的窗口一样,工作正常BTW。我尝试为createPopup()返回的弹出菜单指定一个名称,并以与处理窗口相同的方式处理它,但这似乎不起作用。

有人知道这应该有用吗?任何帮助将不胜感激。

谢谢,

3 个答案:

答案 0 :(得分:1)

不幸的是,没有。 Selenium无法访问window.createPopup。作为IE唯一的功能,它具有非常有限的可移植性,通常不是最佳实践。我知道这对你来说没有什么安慰,因为我认为你坚持使用别人使用createPopup的代码。

真正的问题是craeatePopup不会向DOM添加任何内容。尝试打开弹出对象并查看其来源。你会看到这个:

<html><body></body></html>

所以Selenium没有什么可以抓住它。

弹出窗口为您的应用程序做了什么?您表示它提供了一些导航,您可以直接导航到这些页面吗?

答案 1 :(得分:0)

如果您知道可以执行的窗口名称

selenium.click("elementToLaunchPopup");
selenium.waitForPopup("nameOfWindow",30000);
selenium.selectWindow("nameOfWindow");
// rest of your test

要返回主窗口,您需要selenium.selectWindow("null");

答案 2 :(得分:0)

我正在使用selenium 2.0b3和InternetExplorerDriver。我发现了一些可以解决问题的方法。

在你的js中保存对弹出窗口的引用。

  var popUp= window.createPopup();

然后在你的java代码中:

public Object executeJS(String code){
    JavascriptExecutor js = (JavascriptExecutor) driver;
    return js.executeScript(code);  
}
WebElement popUp =(WebElement) 
     executeJS("return  popUp.document.documentElement;");

这将为您提供对页面的引用,您可以正常查找元素。