Allure не делает снимки экрана в ListenerJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Allure не делает снимки экрана в Listener

Сообщение Anonymous »

Код: Выделить всё

public class ScreenshotUtility {

private WebDriver driver;

public ScreenshotUtility(WebDriver driver) {
this.driver = driver;
}

@Attachment(value = "Screenshot for {0}", type = "image/png")
public byte[] captureScreenshot(String testName) {

if (driver == null) {
throw new IllegalStateException("Driver is null. Cannot take screenshot.");
}

try{
TakesScreenshot ts = (TakesScreenshot) driver;
byte[] screenshotBytes = ts.getScreenshotAs(OutputType.BYTES);

File srcFile = ts.getScreenshotAs(OutputType.FILE);
String screenshotDir = System.getProperty("user.dir") + "/allure-results/";
File destFile = new File(screenshotDir + "scr_" + testName + ".png");
File parentDir = destFile.getParentFile();
if(parentDir != null && !parentDir.exists()) {
parentDir.mkdirs();
}

FileUtils.copyFile(srcFile, destFile);
System.out.println("Screenshot saved: " + destFile.getAbsolutePath());

FileInputStream screenshotStream = FileUtils.openInputStream(srcFile);
Allure.addAttachment("Page Screenshot", screenshotStream);

return screenshotBytes;

} catch (Exception e) {
e.printStackTrace();
System.err.println("Error taking screenshot: " + e.getMessage());
return new byte[0];
}
}
}

Код: Выделить всё

public class TestListener implements ITestListener {

private ScreenshotUtility screenshotUtility;

@Override
public void onTestFailure(ITestResult result) {
System.out.println("[ERROR] Test failed: " + result.getName());
System.out.println("[ERROR] Exception: " + result.getThrowable());
try{
Object testClass = result.getInstance();
if (testClass instanceof BaseTest) {
WebDriver driver = ((BaseTest) testClass).getDriver();
if(driver != null) {
screenshotUtility = new ScreenshotUtility(driver);
screenshotUtility.captureScreenshot(result.getName());
System.out.println("Screenshot is ready: " + result.getName());
} else {
System.out.println("[ERROR] Driver is null.");
}
}
} catch (IllegalStateException e) {
System.out.println("[ERROR] Unable to take a screenshot: " + e.getMessage());
}
}
}

Код: Выделить всё

public class BaseTest {

protected WebDriver driver;
protected WebDriverWait wait;
protected BasePage basePage;
protected ScreenshotUtility screenshotUtility;

@BeforeClass
public void setUp() {
driver = DriverFactory.getDriver();
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
basePage = new BasePage(driver);
screenshotUtility = new ScreenshotUtility(driver);
}

@AfterMethod()
public void tearDown(ITestResult result) {
if (result.getStatus() == ITestResult.FAILURE) {
try{
screenshotUtility.captureScreenshot(result.getName());
} catch (IllegalStateException e) {
System.err.println("[ERROR] Unable to take a screenshot: " + e.getMessage());
}
}
windowManager.switchFrameToDefaultContent();

if (driver != null) {
try {
driver.quit();
} catch (Exception e) {
e.printStackTrace();
} finally {
driver = null;
}
}

Код: Выделить всё

@Listeners(TestListener.class)
@Epic("Blabla")
public class TestClass extends BaseTest {

@BeforeMethod
public void setUp() {
super.setUp();
}

@Feature("Feature")
@Story("Story")
@Test
public void testMethod() {

В Safe Allure корректно сохраняются Epic, Story, Feature и скриншот из класса: BaseTest: @AfterMethod - TearDown.
Скриншоты из class: TestListener не сохраняются.
Я не знаю, что делать, неправильно. Система уже работает на различных системах. И он сбежал, чтобы оставить скриншот после неудачного теста, а не после победы над методом.
Пожалуйста, помогите.

Код: Выделить всё

JDK: 21, apache-maven-3.9.9, selenium: 4.25.0, allure: 2.29.0, testNG: 7.10.2, VSCode
Я пробовал делать скриншоты в разных местах. Я ожидаю, что после неправильного теста слушатель напишет сообщение и загрузит скриншот в отчет allure.*

Подробнее здесь: https://stackoverflow.com/questions/791 ... n-listener
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»