"Репортер выход" пуст в отчете тестирования
Я пытаюсь добавить скриншоты при неудачном тестировании отчета. Я запускаю его в соответствии с этим руководством: http://toolsqa.com/selenium-webdriver/testng-reporters-asserts/
Моя функция
public static void onTestFailure(ITestContext tc, ITestResult result, WebDriver driver) {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat formater = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss");
String methodName = result.getName();
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
String reportDirectory = new File(System.getProperty("user.dir")).getAbsolutePath() + "\\test-output\\" +tc.getSuite().getXmlSuite().getName();
System.out.printf(reportDirectory);
File destFile = new File((String) reportDirectory+"\\failure_screenshots\\"+methodName+"_"+formater.format(calendar.getTime())+".png");
FileUtils.copyFile(scrFile, destFile);
Reporter.log("<a href='"+ destFile.getAbsolutePath() + "'> <img src='"+ destFile.getAbsolutePath() + "' height='100' width='100'/> </a>");
} catch (IOException e) {
e.printStackTrace();
}
}
Проблема в том, что скриншот появляется в нужном месте, но ссылка из Reporter.log никогда не попадает в представление "Reporter output".
Кто-нибудь знает, что мне нужно сделать, чтобы это работало?
Это Java проект с Maven
1 ответ
Вы должны использовать слушателей для этой цели. Создайте новый класс с заданным именем и расширьте TestListenerAdapter. Переопределите метод onTestFailure. Напишите здесь свой код захвата скриншота.
public class ListenersEvents extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result) {
Object currentClass = result.getInstance();
WebDriver webDriver = ((browserSetup) currentClass).getActiveObject();
if (!result.isSuccess()) {
Reporter.log("Test Result: FAIL",true);
takeScreenshotOfFailureFromLocalMachine(result,webDriver);
} else {
Reporter.log("Test Result: PASS",true);
}
}
}
Единственная сложность в том, как вы будете передавать ссылку на объект драйвера в класс слушателя. Поэтому я добавил метод получения в класс, в котором создается экземпляр драйвера, для получения активного объекта драйвера.
public class browserSetup{
WebDriver driver;
public WebDriver createFirefoxDriver(){
// set path for geckodriver
return new FirefoxDriver();
}
public WebDriver createChromeDriver(){
//set path for chrome driver
return new ChromeDriver();
}
public WebDriver getActiveObject() {
return this.driver;
}
}