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;
14 import static org.testcontainers.containers.BrowserWebDriverContainer.VncRecordingMode.RECORD_ALL;
18 * An Extension for JUnit Jupiter, that starts a {@link WebDriver} with the
20 * {@link https://www.testcontainers.org/modules/webdriver_containers/ Testcontainers}.
24 public class WebDriverExtension implements BeforeAllCallback, ParameterResolver
26 BrowserWebDriverContainer chrome;
30 public void beforeAll(ExtensionContext context) throws Exception
33 new BrowserWebDriverContainer()
34 .withCapabilities(DesiredCapabilities.chrome())
35 .withRecordingMode(RECORD_ALL, new File("./target/"));
36 log.info("Starting {}", chrome.getDockerImageName());
38 log.info("Selenium-Address: {}", chrome.getSeleniumAddress());
39 log.info("VNC-Address: {}", chrome.getVncAddress());
43 public boolean supportsParameter(
44 ParameterContext parameterContext,
45 ExtensionContext extensionContext)
47 return parameterContext.getParameter().getType() == RemoteWebDriver.class;
51 public Object resolveParameter(
52 ParameterContext parameterContext,
53 ExtensionContext extensionContext)
55 return chrome.getWebDriver();