Skip to content

Commit 6114eab

Browse files
committed
Record a screenshot at the end of each test
1 parent b70edbf commit 6114eab

File tree

6 files changed

+58
-72
lines changed

6 files changed

+58
-72
lines changed

src/test/java/com/serenitydojo/playwright/toolshop/catalog/AddToCartTest.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.serenitydojo.playwright.toolshop.catalog;
22

3+
import com.microsoft.playwright.Page;
4+
import com.microsoft.playwright.junit.UsePlaywright;
35
import com.serenitydojo.playwright.toolshop.catalog.pageobjects.*;
4-
import com.serenitydojo.playwright.toolshop.fixtures.PlaywrightTestCase;
6+
import com.serenitydojo.playwright.toolshop.fixtures.ChromeHeadlessOptions;
7+
import com.serenitydojo.playwright.toolshop.fixtures.TakesFinalScreenshot;
58
import io.qameta.allure.Feature;
6-
import io.qameta.allure.Step;
79
import io.qameta.allure.Story;
810
import org.assertj.core.api.Assertions;
911
import org.junit.jupiter.api.BeforeEach;
@@ -14,7 +16,8 @@
1416

1517
@DisplayName("Shopping Cart")
1618
@Feature("Shopping Cart")
17-
public class AddToCartTest extends PlaywrightTestCase {
19+
@UsePlaywright(ChromeHeadlessOptions.class)
20+
public class AddToCartTest implements TakesFinalScreenshot {
1821

1922
SearchComponent searchComponent;
2023
ProductList productList;
@@ -28,14 +31,15 @@ void openHomePage() {
2831
}
2932

3033
@BeforeEach
31-
void setUp() {
34+
void setUp(Page page) {
3235
searchComponent = new SearchComponent(page);
3336
productList = new ProductList(page);
3437
productDetails = new ProductDetails(page);
3538
navBar = new NavBar(page);
3639
checkoutCart = new CheckoutCart(page);
3740
}
3841

42+
3943
@Test
4044
@Story("Checking out a product")
4145
@DisplayName("Checking out a single item")

src/test/java/com/serenitydojo/playwright/toolshop/catalog/SearchForProductsTest.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.serenitydojo.playwright.toolshop.catalog;
22

3+
import com.microsoft.playwright.Page;
4+
import com.microsoft.playwright.junit.UsePlaywright;
35
import com.serenitydojo.playwright.toolshop.catalog.pageobjects.ProductList;
46
import com.serenitydojo.playwright.toolshop.catalog.pageobjects.SearchComponent;
5-
import com.serenitydojo.playwright.toolshop.fixtures.PlaywrightTestCase;
7+
import com.serenitydojo.playwright.toolshop.fixtures.ChromeHeadlessOptions;
8+
import com.serenitydojo.playwright.toolshop.fixtures.TakesFinalScreenshot;
69
import io.qameta.allure.Feature;
710
import io.qameta.allure.Story;
811
import org.assertj.core.api.Assertions;
@@ -13,10 +16,11 @@
1316

1417
@DisplayName("Searching for products")
1518
@Feature("Product Catalog")
16-
public class SearchForProductsTest extends PlaywrightTestCase {
19+
@UsePlaywright(ChromeHeadlessOptions.class)
20+
public class SearchForProductsTest implements TakesFinalScreenshot {
1721

1822
@BeforeEach
19-
void openHomePage() {
23+
void openHomePage(Page page) {
2024
page.navigate("https://practicesoftwaretesting.com");
2125
}
2226

@@ -27,7 +31,7 @@ class SearchingByKeyword {
2731

2832
@Test
2933
@DisplayName("When there are matching results")
30-
void whenSearchingByKeyword() {
34+
void whenSearchingByKeyword(Page page) {
3135
SearchComponent searchComponent = new SearchComponent(page);
3236
ProductList productList = new ProductList(page);
3337

@@ -40,7 +44,7 @@ void whenSearchingByKeyword() {
4044

4145
@Test
4246
@DisplayName("When there are no matching results")
43-
void whenThereIsNoMatchingProduct() {
47+
void whenThereIsNoMatchingProduct(Page page) {
4448
SearchComponent searchComponent = new SearchComponent(page);
4549
ProductList productList = new ProductList(page);
4650
searchComponent.searchBy("unknown");
@@ -53,7 +57,7 @@ void whenThereIsNoMatchingProduct() {
5357

5458
@Test
5559
@DisplayName("When the user clears a previous search results")
56-
void clearingTheSearchResults() {
60+
void clearingTheSearchResults(Page page) {
5761
SearchComponent searchComponent = new SearchComponent(page);
5862
ProductList productList = new ProductList(page);
5963
searchComponent.searchBy("saw");

src/test/java/com/serenitydojo/playwright/toolshop/contact/ContactFormTest.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.serenitydojo.playwright.toolshop.contact;
22

3+
import com.microsoft.playwright.Page;
4+
import com.microsoft.playwright.junit.UsePlaywright;
35
import com.microsoft.playwright.options.AriaRole;
46
import com.serenitydojo.playwright.toolshop.catalog.pageobjects.NavBar;
5-
import com.serenitydojo.playwright.toolshop.fixtures.PlaywrightTestCase;
6-
import io.qameta.allure.Allure;
7+
import com.serenitydojo.playwright.toolshop.fixtures.ChromeHeadlessOptions;
8+
import com.serenitydojo.playwright.toolshop.fixtures.TakesFinalScreenshot;
79
import io.qameta.allure.Feature;
810
import io.qameta.allure.Story;
911
import org.assertj.core.api.Assertions;
@@ -21,13 +23,14 @@
2123

2224
@DisplayName("Contact form")
2325
@Feature("Contacts")
24-
public class ContactFormTest extends PlaywrightTestCase {
26+
@UsePlaywright(ChromeHeadlessOptions.class)
27+
public class ContactFormTest implements TakesFinalScreenshot {
2528

2629
ContactForm contactForm;
2730
NavBar navigate;
2831

2932
@BeforeEach
30-
void openContactPage() {
33+
void openContactPage(Page page) {
3134
contactForm = new ContactForm(page);
3235
navigate = new NavBar(page);
3336
navigate.toTheContactPage();
@@ -56,7 +59,7 @@ void completeForm() throws URISyntaxException {
5659
@DisplayName("First name, last name, email and message are mandatory")
5760
@ParameterizedTest(name = "{arguments} is a mandatory field")
5861
@ValueSource(strings = {"First name", "Last name", "Email", "Message"})
59-
void mandatoryFields(String fieldName) {
62+
void mandatoryFields(String fieldName, Page page) {
6063
// Fill in the field values
6164
contactForm.setFirstName("Sarah-Jane");
6265
contactForm.setLastName("Smith");
@@ -78,7 +81,7 @@ void mandatoryFields(String fieldName) {
7881
@Story("Contact form")
7982
@DisplayName("The message must be at least 50 characters long")
8083
@Test
81-
void messageTooShort() {
84+
void messageTooShort(Page page) {
8285

8386
contactForm.setFirstName("Sarah-Jane");
8487
contactForm.setLastName("Smith");
@@ -95,7 +98,7 @@ void messageTooShort() {
9598
@DisplayName("The email address must be correctly formatted")
9699
@ParameterizedTest(name = "'{arguments}' should be rejected")
97100
@ValueSource(strings = {"not-an-email", "not-an.email.com", "notanemail"})
98-
void invalidEmailField(String invalidEmail) {
101+
void invalidEmailField(String invalidEmail, Page page) {
99102
contactForm.setFirstName("Sarah-Jane");
100103
contactForm.setLastName("Smith");
101104
contactForm.setEmail(invalidEmail);
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.serenitydojo.playwright.toolshop.fixtures;
2+
3+
import com.microsoft.playwright.BrowserType;
4+
import com.microsoft.playwright.junit.Options;
5+
import com.microsoft.playwright.junit.OptionsFactory;
6+
7+
import java.util.Arrays;
8+
9+
public class ChromeHeadlessOptions implements OptionsFactory {
10+
@Override
11+
public Options getOptions() {
12+
return new Options().setLaunchOptions(
13+
new BrowserType.LaunchOptions()
14+
.setArgs(Arrays.asList("--no-sandbox", "--disable-extensions", "--disable-gpu"))
15+
).setHeadless(true)
16+
.setTestIdAttribute("data-test");
17+
}
18+
}

src/test/java/com/serenitydojo/playwright/toolshop/fixtures/PlaywrightTestCase.java

Lines changed: 0 additions & 55 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.serenitydojo.playwright.toolshop.fixtures;
2+
3+
import com.microsoft.playwright.Page;
4+
import org.junit.jupiter.api.AfterEach;
5+
6+
public interface TakesFinalScreenshot {
7+
8+
@AfterEach
9+
default void takeScreenshot(Page page) {
10+
ScreenshotManager.takeScreenshot(page, "Final screenshot");
11+
}
12+
}

0 commit comments

Comments
 (0)