Покажи пример baseTest(от которого будут наследоваться другие тесты) junit4 selenium. Мне нужно, чтобы каждый тест (в случае падения) делал allure-скриншот, желательно также, чтобы была возможность увидеть, какая строка метода страницы page object model вызвала падение теста
Для создания базового класса теста с использованием JUnit 4 и Selenium, который будет делать скриншоты в случае падения теста и интегрироваться с Allure, нужно выполнить несколько шагов. Я также покажу, как можно получить строку, вызвавшую ошибку в случае падения теста. Вся логика будет реализована в классе BaseTest, от которого вы затем сможете унаследовать свои тесты.

Для начала вам нужно убедиться, что у вас установлены все необходимые зависимости, в том числе для JUnit, Selenium и Allure.

### 1. Зависимости (Maven)

Убедитесь, что ваш pom.xml содержит следующие зависимости:


<dependencies>
<!-- JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>

<!-- Selenium -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>

<!-- Allure -->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-junit4</artifactId>
<version>2.14.0</version>
</dependency>
</dependencies>



### 2. Базовый класс теста

Вот пример базового класса теста:


import io.qameta.allure.Attachment;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public abstract class BaseTest {

protected WebDriver driver;

@Before
public void setUp() {
// Укажите путь к вашему драйверу ChromeDriver
System.setProperty(“webdriver.chrome.driver”, “path/to/chromedriver”);
driver = new ChromeDriver();
driver.manage().window().maximize();
}

@After
public void tearDown() {
if (driver != null) {
driver.quit();
}
}

@Rule
public TestWatcher testWatcher = new TestWatcher() {
@Override
protected void failed(Throwable e, Description description) {
captureScreenshot();
captureErrorDetails(e);
}
};

@Attachment(value = “Screenshot”, type = “image/png”)
public byte[] captureScreenshot() {
return ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
}

@Attachment(value = “Error Details”, type = “text/plain”)
public String captureErrorDetails(Throwable e) {
return e.getMessage() + “\n” + e.getStackTrace().toString();
}
}



### Объяснение:

1. WebDriver и setUp/tearDown методы: Создаются и закрываются для каждого теста.

2. TestWatcher: Это специальный JUnit Rule для выполнения действий при падении теста. В случае неудачи делается скриншот и записываются детали ошибки (например, трассировка стека).

3. Allure Annotations: Используются аннотации @Attachment, чтобы прикрепить скриншот и сообщения об ошибке к отчету Allure.

### 3. Использование BaseTest

Теперь, когда у вас есть BaseTest, вы можете создавать тесты, наследуя этот класс:


import org.junit.Test;

public class MyTest extends BaseTest {

@Test
public void testExample() {
// Здесь пишите ваш тест, например,
driver.get(“http://example.com”);
// Дополнительная логика
}
}



### Примечания

- Убедитесь, что путь к ChromeDriver указан правильно.
- Для использования трассировки стека и точного определения строк, вызвавших ошибку, вы можете обработать исключения в failed методе более детально.
- Убедитесь, что Allure настроен в вашей системе для генерации отчетов.


У нас с тобой был такой диалог. У меня вопрос: у меня есть метод createTextFile() в basePage, в котором создается текстовый файлик из строки. Сейчас я вызываю этот метод в @After каждого теста страницы, baseTest у меня пока нет - но мне хочется интегрировать эту логику и добавить это в @After, но так, чтобы для каждой отдельной страницы файлик создавался свой (можно, например, передавать кусок пути, который будет различаться). Чтобы было типа такого
@After
public void tearDown() {
if (driver != null) {
driver.quit();
basePage.createTextFile(String path);
}

А в каждом отдельном тесте передавать этот path

Как это лучше сделать?