Коллеги, добрый день. Возникла у меня такая проблема. Изначально были тесты как тесты на Java. После каждого метода вызывался метод (alwaysRun = true) - где имя скриншота было названием тестового метода. Потом на коротком отрезке случилось следующее:
Обновили Allure c 1.3.9 на 1.4.4
Перешли на использование DataProvider который поставляет тестовые данные их Exel.
И собственно возникла сама проблема - скриншотер по прежнему снимает скриншот, но всегда с одним именем и перезаписывает более ранние. Кроме того хотелось бы видеть скриншоты с ошибками прикрепленными к Allure. Непродолжительно гугление приводит к следующим результатам: Ashot и
@Attachment(value = “Page screenshot”, type = “image/png”)
public byte[] saveScreenshot(byte[] screenShot) {
return screenShot;
}
и следующей теме на форуме тема про скриншоты
Но моего скилла пока не до конца хватает, что бы понять - можно ли как то вызывать скриншоты не принудительно, а автоматом для проваленных тестов.
Можно либо сделать listener, в нем есть вроде метод onTestFailed(если не ошибаюсь). Либо в afterTest смотреть, зафейлен ли тест.
Другой вопрос - надо чтоб при падении не закрывался браузер, иначе будете ошибки получать.
Про имена - поподробнее бы с примерами. А то не понятно
Раньше скриншоты снимались и назывались по имени тестового метода - test1, test2, test2 - например. Сейчас же используется всего один метод - на вход которому передаются разные наборы данных - соответственно тест называется всегда одинаково.
Я бы не полагался только лишь на имя теста для скриншота. Точно такая же проблема у вас возникнет, когда начнете гонять одни и те же тесты параллельно. Я, к примеру, помимо имени метода, еще использую конфигурацию и время запуска: someTest_Win7_FF24_2014-12-03_09-40-35.
Насчет фейлов, как уже выше сказали, можно обрабатывать onTestFailure(ITestResult result) из TestNG ITestListener. Кстати из ITestResult можно вытянуть много всего полезного по ходу дела.
Ну по простому не выйдет, т.к. атрибутам аннотаций можно засетить только константы. Самый простой вариант наверное - изменить логику формирования имени у аспекта, который отвечает за атачменты. Но тогда вам придется пересобрать исходники самостоятельно и использовать модифицированную версию. Или же создайте PR с фиксом и в новой версии увидите свою фичу в случае одобрения разработчиками.
у Attachment есть параметр name.
можно дслеть примерно так:
@Attachment(value = "Снимок {0}", type = "image/png")
public byte[] saveScreenshot(String name) {
....
}
и тогда файл сохранится с нужным вам именем.
Таким образом в allure можно передавать в step и attachment значения из параметров. Нужно указать индекс в фигурных скобках.
Так сложно понять, почему у Вас эта ошибка возникла.
Вы пробовали сделать простейший тест с простым снятием скриншота? для того, чтобы Ваш новый метод потестировать?
дек 04, 2014 7:06:17 PM org.openqa.selenium.remote.Augmenter extractRemoteWebDriver
WARNING: Augmenter should be applied to the instances of @Augmentable clases or previously augmented instances only
Можете прислать кусок кода, как и откуда Вы вызываете метод скриншота?
А еще можно попробовать сохранить локально bufferedImage, который вам Ashot делает. Чтобы убедиться, что с этой стороны всё нормально.
Давайте для начала исключим все возможные ошибки, а потом если не получится - будем уже подключать ребят из allure.
возвращается, что то странное - даже скопировать не могу. Какие то сплошные кракозябры и странные символы. Эта же мистическая строка отображается и для
ByteArrayOutputStream baos = new ByteArrayOutputStream();