5 import lombok.extern.slf4j.Slf4j;
6 import org.junit.jupiter.api.extension.BeforeAllCallback;
7 import org.junit.jupiter.api.extension.ExtensionContext;
8 import org.junit.jupiter.api.extension.ParameterContext;
9 import org.junit.jupiter.api.extension.ParameterResolver;
10 import org.openqa.selenium.WebDriver;
11 import org.openqa.selenium.remote.DesiredCapabilities;
12 import org.openqa.selenium.remote.RemoteWebDriver;
13 import org.testcontainers.containers.BrowserWebDriverContainer;
17 * An Extension for JUnit Jupiter, that starts a {@link WebDriver} with the
19 * {@link https://www.testcontainers.org/modules/webdriver_containers/ Testcontainers}.
23 public class WebDriverExtension implements BeforeAllCallback, ParameterResolver
25 BrowserWebDriverContainer chrome;
29 public void beforeAll(ExtensionContext context) throws Exception
32 new BrowserWebDriverContainer()
33 .withCapabilities(DesiredCapabilities.chrome())
34 .withRecordingMode(BrowserWebDriverContainer.VncRecordingMode.RECORD_ALL, new File("./target/"));
35 log.info("Starting {}", chrome.getDockerImageName());
37 log.info("Selenium-Address: {}", chrome.getSeleniumAddress());
38 log.info("VNC-Address: {}", chrome.getVncAddress());
42 public boolean supportsParameter(
43 ParameterContext parameterContext,
44 ExtensionContext extensionContext)
46 return parameterContext.getParameter().getType() == RemoteWebDriver.class;
50 public Object resolveParameter(
51 ParameterContext parameterContext,
52 ExtensionContext extensionContext)
54 return chrome.getWebDriver();