2013-07-29 95 views
3

我自动使用selenium 2.0,我的应用程序默认在新窗口中启动登录页面,因此我的应用程序默认有两个窗口。这两个窗口将始终保持打开状态。在这种情况下,我可以毫无问题地在窗口之间切换。下面的代码执行时没有任何错误。无法在窗口之间切换

for(String winHandle : driver.getWindowHandles()){ 
     driver.switchTo().window(winHandle); 
} 

问题在单击菜单选项时启动,弹出窗口启动以搜索记录。在这里,我需要在这三个窗口之间切换。我尝试了下面的一段代码。它只返回前两个窗口句柄。

Set availableWindows = driver.getWindowHandles();

这个弹出窗口是这样编码的:“在.jsp文件中它被参数化为window.open()”。

请让我知道,如果有人能帮助我呢?

+0

下面的代码为我工作,通过试验和错误。
exec.executeScript(“return window.focus();”); – Thirumalai

回答

1

如果您只在getWindowHandles()中看到2个窗口,则弹出窗口可能是iframe。在这种情况下,使用driver.switchTo().frame()将焦点切换到该框架,而不是寻找一个全新的窗口。

下面是关于开关方法的文档:http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/WebDriver.html#switchTo()

+0

谢谢,窗口popus编码在HTML的正文内。有三个iframe到弹出窗口,因此我试图切换到这些帧来达到我的输入字段。但是,当我试图切换到第一帧时,发现一个期望抛出了“没有这样的帧”。 – Thirumalai

+0

下面的代码帮助我感谢@PockerDews:JavascriptExecutor exec =(JavascriptExecutor)驱动程序; exec.executeScript(“return window.focus();”); – Thirumalai

0

一个可能的解决方案是使用JavascriptExecutor.executeScript()方法运行JavaScript代码并处理弹出窗口而不切换到弹出窗口。

例如,从弹出窗口的父窗口运行一个类似于这样的JavaScript代码。

JavascriptExecutor exec = (JavascriptExecutor)driver;exec.executeScript("var popup = <<popupopener function>>; //operate on popup object to manipulate the markup of pop up window");