Перейти к содержимому

Фотография

Сохранение sreenshot при ошибке теста

save screenshot sreenshot error

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 WhiteCrow

WhiteCrow

    Новый участник

  • Members
  • Pip
  • 19 сообщений

Отправлено 15 июля 2014 - 07:20

Привет всем. Я недавно начал изучать селениум WebDriver, и так понимаю уже подошел к тому, что есть желание получать sreenshot при ошибке. Аннотацией не пользуюсь потому что не сильно понимаю как лучше ее использовать. Но если кто может дать понятный материал по этой теме буду благодарен.  

Для этого я использую операторы try catch finally. Но к сожалению нечего не выходит. Sreenshot  просто не сохраняется. Объясните почему, как это исправить пожалуйста. Полный код  на Java прилагаю.

try {
driver.get(url);
firstEnter(login, old_pass, driver);
changePass(old_pass, new_pass, driver);
logout(driver);
popupAuthorization(login, new_pass, driver);
changePass(new_pass, old_pass, driver);
logout(driver);
}
catch(ArithmeticException e) {
takeScreenshot(driver, name);
}
finally {
driver.quit();
}

Само сохранение sreenshot'а

public static void takeScreenshot(WebDriver driver, String name) throws IOException {
if (driver instanceof TakesScreenshot) {
   File tempFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
   FileUtils.copyFile(tempFile, new File(String.format("screenshots/%s.png", name)));
   }
}
 

 

Прикрепленные файлы


  • 0

#2 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 15 июля 2014 - 07:28

Потому что у Вас блок catch ловит иксепшены только вида ArithmeticException.

Если в реалтайме вылетит иксепшн другого класса, Вы его просто не поймаете, но выполните финализацию без скриншота.
Измените на более общий:

catch (Exception e) {
     takeScreenshot(driver, name);
}

Кстати, мой вам совет:

1) не сохраняйте скриншоты в общей свалке - со временем всё тяжелее будет находить нужный.

2) под каждый запуск автотестов создавайте (автоматически) свой пул скриншотов в отдельном каталоге (дата + время запуска).

3) так как Вы не можете гарантировать уникальность имён скриншотов, заведите себе правило перед именем ставить какой-нибудь 100% уникальный идентификатор. Таймстамп является одним из наилучших решений, но он достаточно длинный. Так как пул скриншотов хранится в директории "дата + время запуска", то можно использовать таймстамп без даты. А в зависимости от скорости выполнения автотестов можно избавиться ещё и от часов.

 

P.S. всё это из личного опыта, основанного на граблях.


  • 1
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#3 WhiteCrow

WhiteCrow

    Новый участник

  • Members
  • Pip
  • 19 сообщений

Отправлено 15 июля 2014 - 08:41

Потому что у Вас блок catch ловит иксепшены только вида ArithmeticException.

Если в реалтайме вылетит иксепшн другого класса, Вы его просто не поймаете, но выполните финализацию без скриншота.
Измените на более общий:

catch (Exception e) {
     takeScreenshot(driver, name);
}

Кстати, мой вам совет:

1) не сохраняйте скриншоты в общей свалке - со временем всё тяжелее будет находить нужный.

2) под каждый запуск автотестов создавайте (автоматически) свой пул скриншотов в отдельном каталоге (дата + время запуска).

3) так как Вы не можете гарантировать уникальность имён скриншотов, заведите себе правило перед именем ставить какой-нибудь 100% уникальный идентификатор. Таймстамп является одним из наилучших решений, но он достаточно длинный. Так как пул скриншотов хранится в директории "дата + время запуска", то можно использовать таймстамп без даты. А в зависимости от скорости выполнения автотестов можно избавиться ещё и от часов.

 

P.S. всё это из личного опыта, основанного на граблях.

Спасибо за советы. Буду дорабатывать и учту это все.


  • 0



Темы с аналогичным тегами save screenshot, sreenshot, error

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных