Add Playwright UI tests for homework 6
This commit is contained in:
81
src/test/java/ru/kovbasa/playwright/PlaywrightExtension.java
Normal file
81
src/test/java/ru/kovbasa/playwright/PlaywrightExtension.java
Normal file
@@ -0,0 +1,81 @@
|
||||
package ru.kovbasa.playwright;
|
||||
|
||||
import com.google.inject.Injector;
|
||||
import com.microsoft.playwright.Browser;
|
||||
import com.microsoft.playwright.BrowserContext;
|
||||
import com.microsoft.playwright.BrowserType;
|
||||
import com.microsoft.playwright.Page;
|
||||
import com.microsoft.playwright.Playwright;
|
||||
import com.microsoft.playwright.Tracing;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Locale;
|
||||
import org.junit.jupiter.api.extension.AfterEachCallback;
|
||||
import org.junit.jupiter.api.extension.BeforeEachCallback;
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
import ru.kovbasa.config.InjectorProvider;
|
||||
|
||||
public class PlaywrightExtension implements BeforeEachCallback, AfterEachCallback {
|
||||
|
||||
private static final String TRACE_DIR = "traces";
|
||||
|
||||
@Override
|
||||
public void beforeEach(ExtensionContext context) throws Exception {
|
||||
Injector injector = InjectorProvider.getInjector();
|
||||
TestConfig config = injector.getInstance(TestConfig.class);
|
||||
TestResources resources = injector.getInstance(TestResources.class);
|
||||
|
||||
Playwright playwright = Playwright.create();
|
||||
BrowserType browserType = resolveBrowserType(playwright, config.getBrowser());
|
||||
Browser browser = browserType.launch(new BrowserType.LaunchOptions()
|
||||
.setHeadless(config.isHeadless())
|
||||
.setSlowMo(config.getSlowMo()));
|
||||
BrowserContext browserContext = browser.newContext();
|
||||
Page page = browserContext.newPage();
|
||||
|
||||
page.setDefaultTimeout(config.getTimeoutMs());
|
||||
page.setDefaultNavigationTimeout(config.getTimeoutMs());
|
||||
page.setViewportSize(1920, 1080);
|
||||
|
||||
browserContext.tracing().start(new Tracing.StartOptions()
|
||||
.setScreenshots(true)
|
||||
.setSnapshots(true)
|
||||
.setSources(true));
|
||||
|
||||
resources.setPlaywright(playwright);
|
||||
resources.setBrowser(browser);
|
||||
resources.setContext(browserContext);
|
||||
resources.setPage(page);
|
||||
|
||||
Files.createDirectories(Path.of(TRACE_DIR));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterEach(ExtensionContext context) throws Exception {
|
||||
Injector injector = InjectorProvider.getInjector();
|
||||
TestResources resources = injector.getInstance(TestResources.class);
|
||||
BrowserContext browserContext = resources.getContext();
|
||||
|
||||
if (browserContext != null) {
|
||||
Path tracePath = Path.of(TRACE_DIR, buildTraceFileName(context));
|
||||
browserContext.tracing().stop(new Tracing.StopOptions().setPath(tracePath));
|
||||
}
|
||||
|
||||
resources.clear();
|
||||
}
|
||||
|
||||
private BrowserType resolveBrowserType(Playwright playwright, String browserName) {
|
||||
String normalized = browserName.toLowerCase(Locale.ROOT);
|
||||
return switch (normalized) {
|
||||
case "firefox" -> playwright.firefox();
|
||||
case "webkit" -> playwright.webkit();
|
||||
default -> playwright.chromium();
|
||||
};
|
||||
}
|
||||
|
||||
private String buildTraceFileName(ExtensionContext context) {
|
||||
String raw = context.getDisplayName();
|
||||
String sanitized = raw.replaceAll("[^a-zA-Z0-9._-]", "_");
|
||||
return sanitized + ".zip";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user