#java #selenium #extentreports #selenium-extent-report
#java #селен #extentreports #selenium-extent-report
Вопрос:
Когда я запускаю все тестовые примеры из тестового класса, я получаю только один результат тестового набора, а два других не отображаются в отчете об экстенте. Как я могу получить все результаты тестового примера в одном отчете?
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.reporter.ExtentHtmlReporter;
import org.junit.jupiter.api.*;
import org.openqa.selenium.WebDriver;
import pl.me.automation.config.WebDriverType;
import pl.me.automation.page.ContactPage;
import pl.me.automation.page.HomePage;
import pl.me.automation.utils.TestDataReader;
import static org.junit.jupiter.api.Assertions.assertTrue;
У меня есть тестовый класс ContactPageTest:
public class ContactPageTest extends TestDataReader {
private WebDriver webDriver;
private HomePage homePage;
private ExtentHtmlReporter reporter;
private ExtentReports reports;
Могут ли функции @beforeEach и @afterEach быть причиной того, что я получаю только последний выполненный результат теста?
Я попытался создать базовый класс для всех тестовых примеров с
@BeforeMethod@AfterMethod @BeforeTest и @AfterTest, но это тоже не сработало.
@BeforeEach
public void init() {
webDriver = WebDriverType.CHROME.create();
webDriver.get("https://www.store.com");
homePage = new HomePage(webDriver);
homePage.clickCookie();
reporter = new ExtentHtmlReporter("src//main//resources//reports//index.html");
reports = new ExtentReports();
reports.attachReporter(reporter);
}
@AfterEach
public void destroy() {
webDriver.close();
reporter.flush();
reports.flush();
}
Три тестовых примера, которые я хочу отобразить в одном рапорте:
@Test
public void shouldFillInAndSendForm() {
reports.createTest("ContactPageTest - Fill in and send form");
ContactPage contactPage = homePage.clickContact();
contactPage.enterUserName(contact.getContactPageEnterUserName());
contactPage.enterUserLastName(contact.getContactPageEnterUserLastName());
contactPage.selectMessageSubject(contact.getContactPageSelectMessageSubject());
contactPage.enterEmailAddress(contact.getContactPageEnterEmailAddress());
contactPage.enterMessage(contact.getContactPageSelectMessageSubject());
contactPage.clickSendMessageButton();
assertTrue(contactPage.isContactMessageDisplayed());
}
@Test
public void shouldSendEmptyForm() {
reports.createTest("ContactPageTest - Send Empty Form");
ContactPage contactPage = homePage.clickContact();
contactPage.clickSendMessageButton();
assertTrue(contactPage.isEmailValidationErrorDisplayed());
assertTrue(contactPage.isNameValidationError());
assertTrue(contactPage.isMessageValidationError());
}
@Test
public void shouldSendFormWithIncorrectEmail() {
reports.createTest("ContactPageTest - Send Form With Incorrect Email");
ContactPage contactPage = homePage.clickContact();
contactPage.enterUserName(contact.getContactPageEnterUserName());
contactPage.enterUserLastName(contact.getContactPageEnterUserLastName());
contactPage.selectMessageSubject(contact.getContactPageSelectMessageSubject());
contactPage.enterEmailAddress(contact.getContactPageEnterIncorrectEmailAddress());
contactPage.enterMessage(contact.getContactPageEnterMessage());
contactPage.clickSendMessageButton();
assertTrue(contactPage.isEmailValidationErrorDisplayed());
}
}
Ответ №1:
Вот как я решил эту проблему. Я добавил @testInstance(жизненный цикл.PER_CLASS)
@TestInstance(Lifecycle.PER_CLASS)
public class ContactPageTest extends Forms {
private WebDriver webDriver;
private HomePage homePage;
private ExtentHtmlReporter reporter;
private ExtentReports reports;
И чем @beforeAll, @beforeEach @afterEach, @AfterAll аннотация
@BeforeEach
public void init() {
webDriver = WebDriverType.CHROME.create();
webDriver.get("https://www.store.com");
homePage = new HomePage(webDriver);
homePage.clickCookie();
}
@BeforeAll
public void TearUpReporter(){
reporter = new ExtentHtmlReporter("src//main//resources//reports//index.html");
reports = new ExtentReports();
reports.attachReporter(reporter);
}
@AfterEach
public void destroy() {
webDriver.quit();
}
@AfterAll
public void tearDownReporter(){
reporter.flush();
reports.flush();
}