понедельник, 5 августа 2013 г.

Selenium: сохранение скриншота при неуспешном выполнении теста

После выполнения автоматического теста на Selenium необходимо проанализировать результаты, а если тест оказался провален, то нужно еще и понять причину. Для нахождения ошибки при выполнении теста можно пользоваться записями в логе. Но иногда записей бывает недостаточно И вообще, лучше один раз увидеть, чем сто раз… прочитать лог.

Для того, чтобы снять скриншот экрана, у Selenium есть метод getScreenshotAs. Снятый скриншот помещается во временный файл в формате .png. Нужно скопировать этот временный файл куда-нибудь, чтобы его сохранить, иначе он будет автоматически удален после окончания выполнения тестов. 
File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("C:/Work/screenshot.png"));


Итак, с сохранением скриншота все довольно просто. Но как сделать так, чтобы скриншот сохранялся только при неуспешном выполнении теста?

Для этого нужно воспользоваться возможностями фреймворка TestNG, а именно аннотацией @AfterMethod. Метод с такой аннотацией будет запускаться всегда после выполнения каждого тестового метода (для аннотации нужно обязательно указать alwaysRun = true). Далее нужно проверить результат выполнения теста ITestResult, и если результат неуспешный, то делаем скриншот.

В результате получаем: 
@AfterMethod(alwaysRun = true)
public void takeScreenshot(ITestResult result) { 

   if (! result.isSuccess()) {       File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
      try {
         String scrFilePath = "C:/Work/screenshot.png";
         FileUtils.copyFile(scrFile, new File(scrFilePath));
         log.log(Level.SEVERE, "<a href='file:///" + scrFilePath + "'>"+ result.getMethod().getMethodName()</a>");
      } catch (IOException ex) {
         log.log(Level.SEVERE, null, ex);
      }
   }
}

Комментариев нет:

Отправить комментарий