Подтвердить что ты не робот

Как обрабатывать диалоговое окно печати в Selenium?

Мне нужно обработать диалог печати (тот же, который появляется при нажатии ctrl-p в браузере). Я пробовал:

Alert printDialog = driver.switchTo().alert();
printDialog.dismiss();

но это не сработало. Также я не смог поймать его дескриптор окна, потому что это не окно...

Можно ли обрабатывать эти объекты и как?

4b9b3361

Ответ 1

К сожалению, WebDriver не может справиться с этими (или любым другим диалогом браузера или ОС). Более того, они имеют тенденцию выглядеть по-разному в браузерах/системах/настройках языка, поэтому, вероятно, нет определенного ответа. Вам нужно будет обнаружить и обработать все возможные случаи, чтобы заставить его работать повсюду. Ваши варианты включают:

  • Robot класс, он позволяет "нажимать" программно что-либо на клавиатуре (или щелкая вслепую), и поэтому избавиться от диалога, нажав Enter или Esc. Однако, как сказано выше, любое расширенное взаимодействие зависит от ОС/языка/принтера.

    // press Escape programatically - the print dialog must have focus, obviously
    Robot r = new Robot();
    r.keyPress(KeyEvent.VK_ESCAPE);
    r.keyRelease(KeyEvent.VK_ESCAPE);
    
  • AutoIt. Это программа Windows, полезная для обработки любой системной автоматизации. Такая же зависимость, как указано выше.

Это более или менее. Если вы можете избежать диалога печати, попробуйте сделать снимок экрана и напечатать его с помощью стандартных инструментов Java.

Ответ 2

Ответ Slanec верен - у WebDriver нет собственных возможностей для этого. Как я решил это в Windows, с объектом System.Windows.Forms.SendKeys:

    SendKeys.SendWait("^p");
    System.Threading.Thread.Sleep(500);
    SendKeys.SendWait("~");

    // give it a minute to spool onto the printer
    System.Threading.Thread.Sleep(5000);

Я действительно получил это в цикле, распечатав кучу утверждений. Работает как шарм.

Ответ 3

Вы можете просто закрыть браузер после появления диалогового окна печати. Это, по общему признанию, несколько резкая мера, но преимущества заключаются в следующем:

  • просто
  • для него не требуются внешние инструменты.
  • он работает в ОС и браузерах

Просто позвоните:

myWebDriver.quit();

Как правило, вы запускаете свой тест и проверяете элементы на странице, которые будут напечатаны, как обычно. WebDriver может проверять элементы страницы, даже если диалог печати открыт.

Как только вы закончите, закройте браузер (и запустите новый для следующего теста).


Мы успешно использовали этот проект. Чтобы упростить задачу, мы написали класс оболочки, который отслеживает "текущий экземпляр WebDriver". У меня есть методы для извлечения этого экземпляра (при необходимости создания его) и его закрытия. Таким образом, вы всегда можете вызвать getCurrentWebDriver() и получить действительный экземпляр (повторно используемый или только что созданный).