Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Resolved] Как создавать скриншот используя JUnit

screenshot
Теги: #<Tag:0x00007f7b656b5ae8>

(Alex) #1

В тесте есть жесткие assert проверки, соответственно нужно чтобы во время их фэйла выполнялся скриншот:

public void takeScreenshot() throws IOException {
		Date date = new Date(System.currentTimeMillis());
		SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy hh_mm_ss");
		File srcFile =  ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
		FileUtils.copyFile(srcFile, new File("target\\snapshot\\"+sdf.format(date)+".png"));
	}

Только куда этот метод поместить не пойму?


(sidelnikovmike) #2

Можно воспользоваться Rule. Пишете свой rule и ловите ошибку AssertionError. Делаете скриншот и пробрасываете ошибку дальше. Вам для этого нужно будет реализовать свой метод apply внутри rule.


(Alex) #3

Так и сделал, получилось что-то вроде:

public class ConfigDriver {
***
	@Rule
	public TakeElementScreenshot takeElementScreenshot = new TakeElementScreenshot(driver);
***
}
***
public class TakeElementScreenshot extends TestWatcher{
	WebDriver driver;
	
	public TakeElementScreenshot(WebDriver driver){
		this.driver = driver;
	}
	@Override
	public void failed(Throwable e, Description description){
		Date date = new Date(System.currentTimeMillis());
		SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy hh_mm_ss");
		File srcFile =  ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
		try {
			FileUtils.copyFile(srcFile, new File("target\\snapshot\\"+sdf.format(date)+".png"));
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
}