2016-04-14 5 views
3

Ich überprüfe, ob eine Seite mit Selen erscheint oder nicht. Wenn ich jedoch auf die Seite klicke, wird eine Drucker-Eingabeaufforderung angezeigt (wie im Fenster, das besagt, dass der Drucker ausgewählt werden soll). Wie kann ich Selen schließen, indem ich cancel drücke?Wie kann ich Selen sagen, dass es in einem Druck-Popup auf Abbrechen klickt?

Ich habe versucht, auf Warnungen zu suchen, aber es scheint, als ob diese nicht funktionieren, da das Druckfenster eine Systemmeldung ist. Es werden keine Warnmeldungen angezeigt.

Das letzte, das ich versuchte zu verwenden, ist, indem ich nur Schlüssel wie Tab und enter sendete, um den Abbruchknopf zu haben, jedoch erkennt es irgendwelche Schlüssel nicht als gedrückt.

Wie kann ich mit diesem Fall umgehen?

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; 
    } 

Antwort

6

Ich würde einfach deaktivieren der Druckdialog durch Überschreiben der Druckmethode:

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

Aber wenn Sie Ziel ist es zu testen, ob der Druck dann aufgerufen wird:

// 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

Ich habe diese Antwort über die andere ausgewählt, da diese keine zusätzlichen Tools erfordert. Vielen Dank an euch beide –

+0

Hallo @ florent-b, können Sie mir bitte für folgendes Problem helfen: https://stackoverflow.com/questions/47885424/close-print-preview-window-from-google-chrome-extension-project -benutzende-jquery –

2

Eigentlich können Sie Windows (OS) Dialoge in Selenium WebDriver nicht behandeln. Das, was das Selen Team beantwortet here

Die aktuelle Team Position ist, dass der Druckdialog für außerhalb des Bereichs ist das Projekt. WebDriver/Selenium konzentriert sich darauf, die Interaktion eines Benutzers mit dem gerenderten Inhalt einer Webseite zu emulieren. Andere Aspekte von der Browser, einschließlich, aber nicht beschränkt auf Druckdialoge, Speichern von Dialogen, und Browser-Chrome, sind alle außerhalb des Geltungsbereichs.

Sie können anderen Ansatz versuchen, wie AutoIt

1

india Fenster basierend Dialog kann durch AutoItX behandelt werden, wie im folgenden Code beschrieben

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"); 

Referenz: http://www.joecolantonio.com/2014/07/21/selenium-how-to-handle-windows-based-dialogs-and-pop-ups/

2

Wenn Sie vorhaben, nur hier Chrome Test Browser Mine Lösung ist. Wegen der 'Robot'-Klasse oder Deaktivierung des Drucks funktionierte das nicht für meinen Fall.

// 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()); 
Verwandte Themen