代码之家  ›  专栏  ›  技术社区  ›  Kari

IE和硒:window.createPopup()

  •  1
  • Kari  · 技术社区  · 14 年前

    我最近一直在玩Selenium,试图为一个只支持IE的应用程序创建测试。事情进展得很慢(虽然没有记录器插件,我不得不反复尝试寻找合适的元素路径),但是现在我遇到了一个与弹出菜单相关的问题。

    大多数应用程序操作都是从用javascript创建的弹出菜单触发的window.createPopup()而且我似乎找不到向弹出窗口中的元素发送事件的方法。

    也许我应该选择弹出窗口,就像我为打开的窗口一样打开新窗口(…),我试着给createPopup()返回的弹出菜单分配一个名称,并用我对待windows的方式处理它,但似乎不起作用。

    有人知道这是否有效吗?任何帮助都将不胜感激。

    谢谢,

    3 回复  |  直到 14 年前
        1
  •  1
  •   pnewhook    14 年前

    不幸的是,没有。window.createPopup硒是无法获取的。作为一个IE独有的功能,它的可移植性非常有限,通常不是一个最佳实践。我知道这对你来说并没有什么安慰,因为我认为你被别人用createPopup编写的代码卡住了。

    真正的问题是createPopup没有向DOM添加任何内容。尝试打开一个弹出对象并查看它的源。您将看到:

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

    所以硒真的没有什么可抓的。

    弹出窗口对你的应用程序有什么作用?你说它提供了一些导航,你能直接导航到那些页面吗?

        2
  •  0
  •   AutomatedTester    14 年前

    如果你知道窗户的名字你可以做

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

    selenium.selectWindow("null");

        3
  •  0
  •   ahvargas    13 年前

    我在InternetExplorerDriver中使用selenium 2.0b3。我找到了能起作用的东西。

    在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;");