diff --git a/kafka-ui-e2e-checks/README.md b/kafka-ui-e2e-checks/README.md
index a970ef38dd..25dc51d658 100644
--- a/kafka-ui-e2e-checks/README.md
+++ b/kafka-ui-e2e-checks/README.md
@@ -18,7 +18,7 @@ This repository is for E2E UI automation.
### Prerequisites
- Docker & Docker-compose
-- Java
+- Java (install aarch64 jdk if you have M1/arm chip)
- Maven
### How to install
diff --git a/kafka-ui-e2e-checks/pom.xml b/kafka-ui-e2e-checks/pom.xml
index 5f013a2b28..d7f4f3ea28 100644
--- a/kafka-ui-e2e-checks/pom.xml
+++ b/kafka-ui-e2e-checks/pom.xml
@@ -126,6 +126,12 @@
netty-transport-native-unix-common
${netty.version}
+
+ io.netty
+ netty-resolver-dns-native-macos
+ ${netty.version}
+ osx-aarch_64
+
org.testcontainers
@@ -208,7 +214,7 @@
org.junit.platform
junit-platform-launcher
- ${junit.platform-launcher.version}
+ ${junit.platform-launcher.version}
ru.yandex.qatools.allure
diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/helpers/TestConfiguration.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/helpers/TestConfiguration.java
index 1134bf4f7e..f8cf311167 100644
--- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/helpers/TestConfiguration.java
+++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/helpers/TestConfiguration.java
@@ -14,10 +14,8 @@ public class TestConfiguration {
Boolean.parseBoolean(System.getProperty("SAVE_PAGE_SOURCE", "false"));
public static Boolean REOPEN_BROWSER_ON_FAIL =
Boolean.parseBoolean(System.getProperty("REOPEN_BROWSER_ON_FAIL", "true"));
- public static String BROWSER = System.getProperty("BROWSER", "chrome");
+ public static String BROWSER = System.getProperty("BROWSER", "chromium");
public static String BROWSER_SIZE = System.getProperty("BROWSER_SIZE", "1920x1080");
public static Boolean ENABLE_VNC = Boolean.parseBoolean(System.getProperty("ENABLE_VNC", "true"));
- public static String IMAGE_NAME = System.getProperty("SELENIUM_DOCKER_IMAGE", "selenium/standalone-chrome");
- public static String IMAGE_TAG = System.getProperty("SELENIUM_IMAGE_TAG", "103.0");
}
diff --git a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/BaseTest.java b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/BaseTest.java
index a188d0fd7f..9ccd401b31 100644
--- a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/BaseTest.java
+++ b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/BaseTest.java
@@ -12,10 +12,18 @@ import com.provectus.kafka.ui.utils.qaseIO.TestCaseGenerator;
import io.github.cdimascio.dotenv.Dotenv;
import io.qameta.allure.Allure;
import io.qameta.allure.selenide.AllureSelenide;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
-import org.junit.jupiter.api.*;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayNameGeneration;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
@@ -26,112 +34,125 @@ import org.testcontainers.containers.BrowserWebDriverContainer;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.utility.DockerImageName;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-
@Slf4j
@DisplayNameGeneration(CamelCaseToSpacedDisplayNameGenerator.class)
public class BaseTest {
- protected Pages pages = Pages.INSTANCE;
- protected Helpers helpers = Helpers.INSTANCE;
+ public static final String SELENIUM_IMAGE_NAME = "selenium/standalone-chrome";
+ public static final String SELENIARM_STANDALONE_CHROMIUM = "seleniarm/standalone-chromium";
+ protected Pages pages = Pages.INSTANCE;
+ protected Helpers helpers = Helpers.INSTANCE;
- private Screenshooter screenshooter = new Screenshooter();
+ private Screenshooter screenshooter = new Screenshooter();
- private static final String IMAGE_NAME = TestConfiguration.IMAGE_NAME;
- private static final String IMAGE_TAG = TestConfiguration.IMAGE_TAG;
- protected static BrowserWebDriverContainer> webDriverContainer = null;
+ protected static BrowserWebDriverContainer> webDriverContainer = null;
- public void compareScreenshots(String name) {
- screenshooter.compareScreenshots(name);
+ public void compareScreenshots(String name) {
+ screenshooter.compareScreenshots(name);
+ }
+
+ public void compareScreenshots(String name, Boolean shouldUpdateScreenshots) {
+ screenshooter.compareScreenshots(name, shouldUpdateScreenshots);
+ }
+
+ @BeforeEach
+ public void setWebDriver() {
+ RemoteWebDriver remoteWebDriver = webDriverContainer.getWebDriver();
+ WebDriverRunner.setWebDriver(remoteWebDriver);
+ remoteWebDriver.manage().window().setSize(new Dimension(1440, 1024));
+ }
+
+ @BeforeAll
+ public static void start() {
+
+ DockerImageName image = isARM64()
+ ? DockerImageName.parse(SELENIARM_STANDALONE_CHROMIUM).asCompatibleSubstituteFor(SELENIUM_IMAGE_NAME)
+ : DockerImageName.parse(SELENIUM_IMAGE_NAME);
+ log.info("Using [{}] as image name for chrome", image.getUnversionedPart());
+
+ webDriverContainer = new BrowserWebDriverContainer<>(image)
+ .withEnv("JAVA_OPTS", "-Dwebdriver.chrome.whitelistedIps=")
+ .withCapabilities(new ChromeOptions()
+ .addArguments("--disable-dev-shm-usage")
+ .addArguments("--verbose")
+ )
+ .waitingFor(Wait.forHttp("/"))
+ //.withLogConsumer(new Slf4jLogConsumer(log).withPrefix("[CHROME]: ")) // uncomment for debugging
+ .waitingFor(Wait.forLogMessage(".*Started Selenium Standalone.*", 1));
+ try {
+ Testcontainers.exposeHostPorts(8080);
+ webDriverContainer.start();
+ } catch (Throwable e) {
+ log.error("Couldn't start a container", e);
}
+ }
- public void compareScreenshots(String name, Boolean shouldUpdateScreenshots) {
- screenshooter.compareScreenshots(name, shouldUpdateScreenshots);
+ @AfterAll
+ public static void tearDown() {
+ if (webDriverContainer.isRunning()) {
+ webDriverContainer.close();
+ webDriverContainer.stop();
}
+ }
- @BeforeEach
- public void setWebDriver() {
- RemoteWebDriver remoteWebDriver = webDriverContainer.getWebDriver();
- WebDriverRunner.setWebDriver(remoteWebDriver);
- remoteWebDriver.manage().window().setSize(new Dimension(1440, 1024));
+ static {
+ if (!new File("./.env").exists()) {
+ try {
+ FileUtils.copyFile(new File(".env.example"), new File(".env"));
+ } catch (IOException e) {
+ log.error("couldn't copy .env.example to .env. Please add .env");
+ e.printStackTrace();
+ }
}
+ Dotenv.load().entries().forEach(env -> System.setProperty(env.getKey(), env.getValue()));
+ if (TestConfiguration.CLEAR_REPORTS_DIR) {
+ clearReports();
+ }
+ setup();
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ if (TestCaseGenerator.FAILED) {
+ log.error(
+ "Tests FAILED because some problem with @CaseId annotation. Verify that all tests annotated with @CaseId and Id is correct!");
+ Runtime.getRuntime().halt(100500);
+ }
+ }));
+ }
- @BeforeAll
- public static void start() {
- DockerImageName image = DockerImageName.parse(IMAGE_NAME).withTag(IMAGE_TAG);
- webDriverContainer = new BrowserWebDriverContainer<>(image)
- .withCapabilities(new ChromeOptions().addArguments("--disable-dev-shm-usage"))
- .waitingFor(Wait.forHttp("/"))
- .waitingFor(Wait.forLogMessage(".*Started Selenium Standalone.*", 1));
- Testcontainers.exposeHostPorts(8080);
- webDriverContainer.start();
- webDriverContainer.isRunning();
- webDriverContainer.isHostAccessible();
- }
+ @AfterEach
+ public void afterMethod() {
+ Allure.addAttachment("Screenshot",
+ new ByteArrayInputStream(
+ ((TakesScreenshot) webDriverContainer.getWebDriver()).getScreenshotAs(OutputType.BYTES)));
+ }
- @AfterAll
- public static void tearDown() {
- if (webDriverContainer.isRunning()) {
- webDriverContainer.close();
- webDriverContainer.stop();
- }
- }
+ @SneakyThrows
+ private static void setup() {
+ Configuration.reportsFolder = TestConfiguration.REPORTS_FOLDER;
+ Configuration.screenshots = TestConfiguration.SCREENSHOTS;
+ Configuration.savePageSource = TestConfiguration.SAVE_PAGE_SOURCE;
+ Configuration.reopenBrowserOnFail = TestConfiguration.REOPEN_BROWSER_ON_FAIL;
+ Configuration.browser = TestConfiguration.BROWSER;
+ Configuration.baseUrl = TestConfiguration.BASE_WEB_URL;
+ Configuration.timeout = 10000;
+ Configuration.browserSize = TestConfiguration.BROWSER_SIZE;
+ SelenideLogger.addListener("allure", new AllureSelenide().savePageSource(false));
+ }
- static {
- if (!new File("./.env").exists()) {
- try {
- FileUtils.copyFile(new File(".env.example"), new File(".env"));
- } catch (IOException e) {
- log.error("couldn't copy .env.example to .env. Please add .env");
- e.printStackTrace();
- }
- }
- Dotenv.load().entries().forEach(env -> System.setProperty(env.getKey(), env.getValue()));
- if (TestConfiguration.CLEAR_REPORTS_DIR) {
- clearReports();
- }
- setup();
- Runtime.getRuntime().addShutdownHook(new Thread(() -> {
- if (TestCaseGenerator.FAILED) {
- log.error("Tests FAILED because some problem with @CaseId annotation. Verify that all tests annotated with @CaseId and Id is correct!");
- Runtime.getRuntime().halt(100500);
- }
- }));
+ public static void clearReports() {
+ log.info(String.format("Clearing reports dir [%s]...", TestConfiguration.REPORTS_FOLDER));
+ File allureResults = new File(TestConfiguration.REPORTS_FOLDER);
+ if (allureResults.isDirectory()) {
+ File[] list = allureResults.listFiles();
+ if (list != null) {
+ Arrays.stream(list)
+ .sequential()
+ .filter(e -> !e.getName().equals("categories.json"))
+ .forEach(File::delete);
+ }
}
+ }
- @AfterEach
- public void afterMethod() {
- Allure.addAttachment("Screenshot",
- new ByteArrayInputStream(((TakesScreenshot) webDriverContainer.getWebDriver()).getScreenshotAs(OutputType.BYTES)));
- }
-
- @SneakyThrows
- private static void setup() {
- Configuration.reportsFolder = TestConfiguration.REPORTS_FOLDER;
- Configuration.screenshots = TestConfiguration.SCREENSHOTS;
- Configuration.savePageSource = TestConfiguration.SAVE_PAGE_SOURCE;
- Configuration.reopenBrowserOnFail = TestConfiguration.REOPEN_BROWSER_ON_FAIL;
- Configuration.browser = TestConfiguration.BROWSER;
- Configuration.baseUrl = TestConfiguration.BASE_WEB_URL;
- Configuration.timeout = 10000;
- Configuration.browserSize = TestConfiguration.BROWSER_SIZE;
- SelenideLogger.addListener("allure", new AllureSelenide().savePageSource(false));
- }
-
- public static void clearReports() {
- log.info(String.format("Clearing reports dir [%s]...", TestConfiguration.REPORTS_FOLDER));
- File allureResults = new File(TestConfiguration.REPORTS_FOLDER);
- if (allureResults.isDirectory()) {
- File[] list = allureResults.listFiles();
- if (list != null) {
- Arrays.stream(list)
- .sequential()
- .filter(e -> !e.getName().equals("categories.json"))
- .forEach(File::delete);
- }
- }
- }
+ private static boolean isARM64() {
+ return System.getProperty("os.arch").equals("aarch64");
+ }
}