2014-09-10 46 views
1

我目前正在使用硒web驅動程序自動執行功能測試。我遇到了一個場景,在這個場景中,我需要點擊窗口上的打印按鈕(比如說A),打開一個新窗口(比如說B)。打印對話也會彈出窗口B.我需要使用java腳本執行程序關閉該打印對話框。在硒中使用javascriptexecutor單擊打印按鈕時無法關閉打印對話框Web驅動程序firefox

我試過這個。但它不起作用。我的代碼:

public void handlePrintButtonScenario { 
String parentWindow_A = driver.getWindowHandle(); //get the current window A handle 
Printbutton().click(); //clicking print button 

//switch focus of web driver to newly opened window B 

for (String winhandle : driver.getWindowHandle()) { 

driver.switchTo().window(winhandle); 
} 

//closing printdialoge 
closeWindowByJS(); 

driver.close();// closing window B 

driver.switchTo().window(parentWindow_A); // switching focus to window A 

} 

public void closeWindowByJS() { 
    JavascriptExecutor js = (JavascriptExecutor) driver; 
    String script = "window.onbeforeunload = null;" + "window.close();"; 
    js.executeScript(script); 
} 

現在發生了什麼打印對話和櫥窗內得到,當我通過調用方法closeWindowByJS執行首次場景關閉()。我在driver.close()行得到異常,說沒有找到這樣的窗口。

但是,當我重新運行方案,即從第二次無打印對話也不櫥窗內關閉掉。但重點得到了適當的改變,場景也正常運行。

,但我需要先關閉打印對話框使用javascriptexecutor然後關閉窗口B.我不需要通過調用closeWindowByJS關閉這兩個()。這需要切換後集中到窗口A.

請幫助?

+0

請幫助我解決此問題....迫切需要解決方案。 – praveen 2014-09-11 16:39:49

回答

0

使用了AutoIt 下載exe文件記錄點擊按鈕,記錄代碼 執行的AutoIt的代碼相同的Java腳本executator

您driver.close() 應該是開關的代碼之後窗口()

這應該有助於

+0

我無法使用autoit,因爲我沒有被授權使用任何exe文件。您能否讓我知道任何備用解決方案。我使用Firefox作爲瀏覽器。 – praveen 2014-09-12 18:53:24

+0

謝謝你的回覆。我需要先關閉自動彈出窗口B的打印對話框。由於硒驅動程序無法處理這些彈出窗口,這就是爲什麼我必須使用JavaScript注入。之後,我必須關閉窗口B.這可以通過使用driver.close()來處理。我會嘗試你所建議的。如果您使用此代碼或Java腳本代碼獲得任何其他解決方法。請告訴我。而且當我最終切換到A時,我也不需要關閉窗口A.我只需要關閉打印對話框然後窗口B. – praveen 2014-09-13 13:17:27

+0

嗨班薩爾沙阿,我嘗試了你的建議。不幸的是它沒有奏效。你能否建議其他解決方法?謝謝 – praveen 2014-09-15 14:03:54

0

我知道這是有點老了,但也許這將幫助別人。

首先,這段代碼只能得到一個句柄,driver.getWindowHandles()得到句柄的Set,可以迭代。其次,webdriver實例會切換到每一個窗口,但是並沒有對它做任何事情。這只是爲了結束?

for (String winhandle : driver.getWindowHandle()) { 

    driver.switchTo().window(winhandle); 
} 

如果是這樣的而不是使用一個for循環的情況下,你可以投的設置到一個ArrayList,並得到在列表的末尾最近的一次。

List<String> handles = new ArrayList<>(driver.getWindowHandles()); 
driver.switchTo().window(handles.get(handles.size()-1); 

雖然這不是真的。

不幸的是,webdriver的無法處理的打印對話框。這些提示與網頁無關,並且是Web瀏覽器的一項功能。如果javascript可以訪問這些可以與您的文件系統交談的提示,那麼會存在安全問題。如果您有興趣瞭解更多信息,請參閱 http://en.wikipedia.org/wiki/Same-origin_policyhttp://en.wikipedia.org/wiki/Sandbox_(computer_security)瞭解JavaScript限制如何阻止它與這些類型的提示進行交互。

由於打印提示不是一個窗口,並且webdriver看不到,所以當您嘗試關閉打印對話框時,實際上正在關閉窗口B.WebDriver的不同實現可能會因此行爲而產生不同的結果。 FirefoxDriver可能與ChromeDriver的反應方式不同。您可能必須做的是在關閉窗口B後明確地將您的webdriver切換回父窗口A.在嘗試進行任何交互之前,您應該使用driver.switchTo().window(parentWindow_A),以確保WebDriver不坐在沒有窗戶焦點的位置。

如果您必須與這些提示進行交互並正在使用Java。然後你可以使用java.awt.Robot來驅動桌面鼠標來執行點擊操作。但是這可能是一個混亂的解決方案,因爲你只能移動到像素座標。所以你必須把它放在你期望按鈕的位置。下面是如何使用絕對屏幕座標使用機器人的基本示例http://alvinalexander.com/java/java-robot-class-example-mouse-keystroke

相關問題