2016-04-14 59 views
3

我正在檢查使用硒是否出現頁面。但是,當我點擊頁面時,出現打印機打印提示(如選擇打印機等的窗口)。如何讓硒通過點擊取消關閉此窗口?如何告訴硒在打印彈出框上按取消?

我試圖尋找警報,但似乎這些將無法工作,因爲打印窗口是系統提示。它不識別任何警報出現。

最近我嘗試使用的是隻發送像標籤鍵和輸入爲了有取消按鈕被選中,但它不承認任何按鍵被按下。

我該如何處理這種情況?

public static boolean printButton() throws Exception { 
    WebDriver driver = new FirefoxDriver(); 
// Keyboard keyboard = driver.getKeyboard(); 
    driver.get("website"); 


    try { 
     Thread.sleep(3000); 
     WebElement temp = driver.findElement(By.xpath("//*[@id='block-print-ui-print-links']/div/span/a")); 
     temp.click(); 
     Actions action = new Actions(driver); 
     action.sendKeys(Keys.TAB).sendKeys(Keys.ENTER); 

     Thread.sleep(6000); 
    } 

     catch (Exception e) { 
     System.out.println("No button"); 
     driver.close(); 
     return false; 
    } 

回答

6

我只想禁用通過覆蓋打印方法的打印對話框:

((JavascriptExecutor)driver).executeScript("window.print=function(){};"); 

但是,如果你的目標是要測試的打印被稱爲然後:

// get the print button 
WebElement print_button = driver.findElement(By.cssSelector("...")); 

// click on the print button and wait for print to be called 
driver.manage().timeouts().setScriptTimeout(20, TimeUnit.SECONDS); 
((JavascriptExecutor)driver).executeAsyncScript(
    "var callback = arguments[1];" + 
    "window.print = function(){callback();};" + 
    "arguments[0].click();" 
    , print_button); 
+0

我選擇了這個答案而不是另一個,因爲這個不需要我下載任何額外的工具。感謝你們倆 –

+0

Hi @ florent-b,你能幫我解決以下問題:https://stackoverflow.com/questions/47885424/close-print-preview-window-from-google-chrome-extension-project - 使用 - jQuery的 –

2

實際上,您無法在Selenium WebDriver內處理窗口(OS)對話框。 這是什麼硒團隊回答here

目前球隊的立場是,在打印對話框超出範圍的 項目。 WebDriver/Selenium專注於模擬用戶與網頁渲染內容的交互。瀏覽器的其他方面(包括但不限於打印對話框,保存對話框, 和瀏覽器鑲邊)都不在範圍之內。

你可以嘗試像AutoIt

1

機窗口基於對話框可以通過AutoItX如下面的代碼來描述處理

File file = new File("lib", jacobDllVersionToUse); 
System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath()); 
WebDriver driver = new FirefoxDriver(); 
driver.get("http://www.joecolantonio.com/SeleniumTestPage.html"); 
WebElement printButton = driver.findElement(By.id("printButton")); 
printButton.click(); 
AutoItX x = new AutoItX(); 
x.winActivate("Print"); 
x.winWaitActive("Print"); 
x.controlClick("Print", "", "1058"); 
x.ControlSetText("Print", "", "1153", "50"); 
Thread.sleep(3000); //This was added just so you could see that the values did change. 
x.controlClick("Print", "", "2"); 

參考不同的方法:http://www.joecolantonio.com/2014/07/21/selenium-how-to-handle-windows-based-dialogs-and-pop-ups/

2

如果你打算只用於測試Chrome瀏覽器在這裏是我的解決方案。由於'機器人'類或禁用打印不適用於我的情況。

// Choosing the second window which is the print dialog. 
// Switching to opened window of print dialog. 
driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString()); 

// Runs javascript code for cancelling print operation. 
// This code only executes for Chrome browsers. 
JavascriptExecutor executor = (JavascriptExecutor) driver.getWebDriver(); 
executor.executeScript("document.getElementsByClassName('cancel')[0].click();"); 

// Switches to main window after print dialog operation. 
driver.switchTo().window(driver.getWindowHandles().toArray()[0].toString()); 
相關問題