2015-03-25 1 views
0

Код, который я использую, приведен ниже. Первая строка нажимает на кнопку «PrintButton», которая открывает диалоговое окно «Печать». Когда это будет открыто, я ожидаю, что консольный вывод «Sending Esc key - Start», а затем одно из действий, таких как робот, действия, предупреждение, (в зависимости от того, какой код не раскоментирован) .Но вместо этого консоль ничего не печатает, ЕСЛИ я не нажму «Отменить в диалоговом окне печати». Итак, как только я нажму «Отменить», sysout распечатает сообщение, выполнит действие (и ничего полезного не произойдет из-за этих действий), а затем печатает другую консольную консоль.диалог печати не позволяет выполнять следующий код в селене

Мой вопрос состоит из двух частей: a. Почему компилятор (или программа) не перемещается в следующую строку? b. Как я могу обработать этот диалог печати? все статьи в Интернете, попробовали предложенные методы, но ничего не работало).

driver.findElement(By.id("PrintButton")).click(); 
System.out.println("Sending Esc key - Start"); 
/*Robot r = new Robot(); 
r.delay(10000); 
r.keyPress(KeyEvent.VK_ESCAPE); 
r.keyPress(KeyEvent.VK_ESCAPE); 
r.keyPress(KeyEvent.VK_ESCAPE); 
*/ 
/*Actions a = new Actions(driver).sendKeys(Keys.CANCEL);*/ 
/*driver.switchTo().alert().dismiss();*/ 
/*List<String> handles = new ArrayList<>(driver.getWindowHandles()); 
driver.switchTo().window(handles.get(handles.size()-1));*/ 
System.out.println("Sending Esc key - done"); 
+0

я была почти такая же проблема с вами. Если вы работаете с хромированным рекордером, и все в порядке с запуском всех дел с ним. Вы бы рассмотрели этот ответ: http://stackoverflow.com/a/41670021/1184571 –

ответ

0

Драйвер никогда не возвращается, потому что Selenium использует JavaScript внутри, чтобы «щелкнуть» кнопку. При нажатии кнопки открывается модальное диалоговое окно, которое блокирует механизм JavaScript браузера (все анимации также прекращаются). Отчасти это связано с модальным диалогом (делает то же самое), но также и потому, что вы, вероятно, хотите распечатать страницу так, как она есть - она ​​не должна меняться при ее печати.

Обход проблемы: убедитесь, что элемент имеет фокус (с использованием селена). Затем используйте Robot для управления всем процессом. Отправьте нажатие клавиши, чтобы активировать кнопку (очень сложно найти кнопку на экране). Затем должен появиться диалог печати, и он должен иметь фокус. Следующее нажатие клавиши в Robot должно затем вести диалог.

Примечание: Это хрупкое. Мое предложение - не проверять диалог печати таким образом. Если вам это нужно, то Java + Selenium может оказаться не лучшим решением. Посмотрите на профессиональные инструменты для тестирования пользовательского интерфейса, такие как QF-Test.

Похожие:

+0

Я проверил эту страницу и использовал Robot для отправки управляющих ключей, но это не сработало. Как «Найти кнопку на экране», а затем использовать робот? –

+0

@MatheswaranKanagarajan: Вы правы, у Robot нет API для перебора окон на экране или анализа таких вещей, как высота меню/панели инструментов браузера. См. Мои изменения для другого решения. –

0

У меня была такая же проблема на ChromeDriver и нашел единственный способ, это нажать кнопку печати с JavascriptExecutor в асинхронном моды.

WebElelement print_button = driver.findElement(By.id("PrintButton")); 
JavascriptExecutor executor = (JavascriptExecutor) driver; 
executor.executeScript("var elem=arguments[0]; setTimeout(function() {elem.click();}, 100)", print_button); 

Вдохновленный this tread