我最近一直在玩Selenium,试图为仅IE应用程序创建测试。事情正在取得进展(虽然没有录音机插件,我不得不求助于尝试寻找合适的元素路径的试验和错误),但现在我遇到了与弹出菜单相关的问题。
大多数应用程序操作是从使用javascript window.createPopup()创建的弹出菜单触发的,我似乎无法找到将事件发送到弹出窗口内元素的方法。
也许我应该选择弹出窗口,就像我用window.open(...)打开的窗口一样,工作正常BTW。我尝试为createPopup()返回的弹出菜单指定一个名称,并以与处理窗口相同的方式处理它,但这似乎不起作用。
有人知道这应该有用吗?任何帮助将不胜感激。
谢谢,
答案 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;");
这将为您提供对页面的引用,您可以正常查找元素。