2014-01-30 45 views
0

我有一個Web應用程序,當我點擊保存按鈕時啓動保存窗口(這是模式)。這個窗口需要10秒才能完全加載(我可以等待這一點)。 在完成保存之前,我需要在此窗口中執行一些操作。我遇到的問題是 - 模式窗口啓動的那一刻,我無法使用驅動程序.SwitchTo()或driver.Manage()。GetAllWindowHandles()等。我用下面的方法證實了這一點代碼行。使用Selenium Webdriver將控制切換到模式窗口(不是警報)

driver.findElement(By.xpath("//*[@id='toolbar']/a[1]")).click(); 
// After the above line is executed, the Popup gets launched 

Set<String> sWindowHandles = driver.getWindowHandles(); 
System.out.println("Popup"); 
System.out.println(driver.getWindowHandles().size()); // This always prints "1" 

直到我明確關閉彈出窗口時,以上三行完全不會被執行(至少不會長時間執行)。

當我無法找到窗口的處理程序時,如何處理保存窗口(模式)中存在的某些控件?

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

不起作用,打開後立即因爲模態窗口(有意義的它僅推出後GetWindowHandles),隨後的線根本不能執行。 我陷入僵局。請幫助我。

+0

您可能會看到這個錯誤 - 網頁上的模態對話框通常不是單獨的窗口;它們大多是作爲頁面上的div疊加實現的。請分享您的頁面的HTML,以及模態對話框的HTML。 – Faiz

+0

如果使用'showModalDialog'啓動對話框,則應該查看[問題284](https://code.google.com/p/selenium/issues/detail?id=284)。從底層開始閱讀可能的解決方案。 – Faiz

回答

0

如果Windows句柄在應用程序上不起作用。
可以使用Java機器人類功能。

 Robot robot = new Robot(); 
//Doing a mouse over for the X and Y coordinates of button/link which opens modal window 
robot.mouseMove(210,350); 
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); 
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); 
robot.delay(100); 
//Clicking tab til the cursor is on specific position (textbox/button) 
robot.keyPress(KeyEvent.VK_TAB); 
robot.delay(100); 
//Doing a mouse over for the X and Y coordinates of button/link 
robot.mouseMove(300,150); 
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); 
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); 
robot.delay(100); 

欲瞭解更多信息,請參閱下面的鏈接。 http://alvinalexander.com/java/java-robot-class-example-mouse-keystroke

+0

我不是100%確定如何確定座標。我相信你要求我將鼠標懸停在模式窗口中的按鈕上,然後單擊,甚至不收集WindowHandle。 –

+0

您可以在右下角Firebug窗口的佈局選項卡中獲取近似的X,Y座標。一旦瀏覽器打開,請確保您最大化瀏覽器。 – Naaz

+0

檢查要知道XY座標的元素,從佈局選項卡中獲取並進行測試,如果光標不在所需的確切位置,則可以假設並修改光標所在位置的座標。我通常在我的其中一個窗口句柄不工作的項目中這樣做。 – Naaz

0

我有時會發現窗口句柄可能需要一段時間才能用正確的值更新,即使彈出窗口是可見的。爲了解決這個問題,我使用了一個循環,當窗口句柄達到預期的大小時就會中斷循環。

相關問題