2013-07-29 151 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");