9de61bbc2e80c32a43e0dd26783f4c68b51c4a7b
[demos/spring-boot] / src / test / java / de / juplo / demo / WebDriverExtension.java
1 package de.juplo.demo;
2
3
4 import java.io.File;
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
15
16 /**
17  * An Extension for JUnit Jupiter, that starts a {@link WebDriver} with the
18  * help of
19  * {@link https://www.testcontainers.org/modules/webdriver_containers/ Testcontainers}.
20  * @author Kai Moritz
21  */
22 @Slf4j
23 public class WebDriverExtension implements BeforeAllCallback, ParameterResolver
24 {
25   BrowserWebDriverContainer chrome;
26
27
28   @Override
29   public void beforeAll(ExtensionContext context) throws Exception
30   {
31     chrome =
32         new BrowserWebDriverContainer()
33             .withCapabilities(DesiredCapabilities.chrome())
34             .withRecordingMode(BrowserWebDriverContainer.VncRecordingMode.RECORD_ALL, new File("./target/"));
35     log.info("Starting {}", chrome.getDockerImageName());
36     chrome.start();
37     log.info("Selenium-Address: {}", chrome.getSeleniumAddress());
38     log.info("VNC-Address: {}", chrome.getVncAddress());
39   }
40
41   @Override
42   public boolean supportsParameter(
43       ParameterContext parameterContext,
44       ExtensionContext extensionContext)
45   {
46     return parameterContext.getParameter().getType() == RemoteWebDriver.class;
47   }
48
49   @Override
50   public Object resolveParameter(
51       ParameterContext parameterContext,
52       ExtensionContext extensionContext)
53   {
54     return chrome.getWebDriver();
55   }
56 }