2017-01-31 13 views
0

Я работаю над проектом автоматизации в java, используя селен. Когда происходит сбой, вам нужно сделать снимок экрана из веб-представления. Используется TakesScreenshot, и он отлично работает как в хром-драйвере, так и в phantomjs-driver.Как сделать снимок экрана с использованием Robot Framework в web-сервере селена

Но это не срабатывает, когда имеется окно предупреждения. После некоторых исследований я понял, что Selenium не может сделать снимок экрана, если присутствует предупреждение. Сначала необходимо обработать предупреждение. И я могу использовать java.awt.Robot, в таком сценарии, где в моем скриншоте требуется окно предупреждения.

Но Robot берет скриншот моего экрана и не получите веб-просмотр, при использовании phantomjs-драйвер или хром работает минимизирован. Но мне нужен скриншот с предупреждающим полем (который представляет собой условие отказа).

Есть ли другие решения для этой проблемы?

+0

есть ли какая-либо конкретная зависимость, которая заставляет вас запускать ее в свернутом окне? потому что это не сводится к минимуму. Робот должен дать вам то, что требуется. – Waman

+0

включен «минимизирован», потому что, если я выполняю некоторые другие работы в одной и той же системе, в то время как процесс автоматизации выполняется в браузере, который минимизирован. В любом случае, если это будет использовать phantomjs, «Робот» не даст правильное изображение? –

+0

Робот-скриншот так же хорош, как и нажатие кнопки prtscrn на клавиатуре. Так что, если он захватывает все видимое на экране ... Просто посмотрите, не наводите ли вы время на действия, чтобы окно максимально увеличивалось только при появлении окна предупреждения. – Waman

ответ

0

Если вы действительно хотите захватить экран предупреждением, тогда есть способ. Поместите свою часть кода для снятия скриншота внутри блока try-catch. Если обнаружено какое-либо предупреждение, оно выдаст исключение, а в блоке catch обработает его.

Фрагмент кода:

Alert alert = null; 

    try { 
     File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
     FileUtils.copyFile(scrFile, new File("screenshot.png")); 
    } catch (Exception e) { 
     alert = driver.switchTo().alert(); 
     if(e.getMessage().contains("unexpected alert open:")){ 
      //before taking screenshot, you may wait for some moment to be properly visible 
      try { 
       BufferedImage screencapture = new Robot().createScreenCapture((new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()))); 

        File file = new File("screenshot.jpg"); 
        ImageIO.write(screencapture, "png", file); 
      } catch (AWTException e1) { 
       e1.printStackTrace(); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
     } 
    } 

    alert.accept(); //or you can use dismiss(); 

Примечание: Для съемки экрана с помощью робота окно должно быть видно.

+0

«Для снятия скриншота с помощью робота ваше окно должно быть видимым». Если я использую webdriver 'phantomjs'. Робот не поможет. –

+0

Это абсолютно правильно. –