BaseTest.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package com.provectus.kafka.ui.base;
  2. import static com.codeborne.selenide.Selenide.clearBrowserCookies;
  3. import static com.codeborne.selenide.Selenide.clearBrowserLocalStorage;
  4. import static com.codeborne.selenide.Selenide.refresh;
  5. import static com.provectus.kafka.ui.pages.NaviSideBar.SideMenuOption.TOPICS;
  6. import static com.provectus.kafka.ui.settings.Source.BASE_WEB_URL;
  7. import com.codeborne.selenide.Condition;
  8. import com.codeborne.selenide.Selenide;
  9. import com.codeborne.selenide.SelenideElement;
  10. import com.codeborne.selenide.WebDriverRunner;
  11. import com.provectus.kafka.ui.utilities.qaseIoUtils.DisplayNameGenerator;
  12. import io.qameta.allure.Allure;
  13. import io.qase.api.annotation.Step;
  14. import java.io.ByteArrayInputStream;
  15. import java.util.List;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.assertj.core.api.SoftAssertions;
  18. import org.junit.jupiter.api.AfterAll;
  19. import org.junit.jupiter.api.AfterEach;
  20. import org.junit.jupiter.api.BeforeAll;
  21. import org.junit.jupiter.api.BeforeEach;
  22. import org.junit.jupiter.api.DisplayNameGeneration;
  23. import org.openqa.selenium.Dimension;
  24. import org.openqa.selenium.OutputType;
  25. import org.openqa.selenium.TakesScreenshot;
  26. import org.openqa.selenium.chrome.ChromeOptions;
  27. import org.openqa.selenium.remote.RemoteWebDriver;
  28. import org.testcontainers.Testcontainers;
  29. import org.testcontainers.containers.BrowserWebDriverContainer;
  30. import org.testcontainers.containers.output.Slf4jLogConsumer;
  31. import org.testcontainers.utility.DockerImageName;
  32. @Slf4j
  33. @DisplayNameGeneration(DisplayNameGenerator.class)
  34. public class BaseTest extends Facade {
  35. private static final String SELENIUM_IMAGE_NAME = "selenium/standalone-chrome:103.0";
  36. private static final String SELENIARM_STANDALONE_CHROMIUM = "seleniarm/standalone-chromium:103.0";
  37. protected static BrowserWebDriverContainer<?> webDriverContainer = null;
  38. private static boolean isARM64() {
  39. return System.getProperty("os.arch").equals("aarch64");
  40. }
  41. @BeforeEach
  42. public void setWebDriver() {
  43. RemoteWebDriver remoteWebDriver = webDriverContainer.getWebDriver();
  44. WebDriverRunner.setWebDriver(remoteWebDriver);
  45. remoteWebDriver.manage().window().setSize(new Dimension(1440, 1024));
  46. Selenide.open(BASE_WEB_URL);
  47. naviSideBar.waitUntilScreenReady();
  48. }
  49. @BeforeAll
  50. public static void start() {
  51. DockerImageName image = isARM64()
  52. ? DockerImageName.parse(SELENIARM_STANDALONE_CHROMIUM).asCompatibleSubstituteFor(SELENIUM_IMAGE_NAME)
  53. : DockerImageName.parse(SELENIUM_IMAGE_NAME);
  54. log.info("Using [{}] as image name for chrome", image.getUnversionedPart());
  55. webDriverContainer = new BrowserWebDriverContainer<>(image)
  56. .withEnv("JAVA_OPTS", "-Dwebdriver.chrome.whitelistedIps=")
  57. .withCapabilities(new ChromeOptions()
  58. .addArguments("--disable-dev-shm-usage")
  59. .addArguments("--disable-gpu")
  60. .addArguments("--no-sandbox")
  61. .addArguments("--verbose")
  62. )
  63. .withLogConsumer(new Slf4jLogConsumer(log).withPrefix("[CHROME]: "));
  64. try {
  65. Testcontainers.exposeHostPorts(8080);
  66. log.info("Starting browser container");
  67. webDriverContainer.start();
  68. } catch (Throwable e) {
  69. log.error("Couldn't start a container", e);
  70. }
  71. }
  72. @AfterAll
  73. public static void tearDown() {
  74. if (webDriverContainer.isRunning()) {
  75. webDriverContainer.close();
  76. webDriverContainer.stop();
  77. }
  78. }
  79. @AfterEach
  80. public void afterMethod() {
  81. Allure.addAttachment("Screenshot",
  82. new ByteArrayInputStream(
  83. ((TakesScreenshot) webDriverContainer.getWebDriver()).getScreenshotAs(OutputType.BYTES)));
  84. browserClear();
  85. }
  86. @Step
  87. public static void browserClear() {
  88. log.debug("browserClear");
  89. clearBrowserLocalStorage();
  90. clearBrowserCookies();
  91. refresh();
  92. log.debug("=> DONE");
  93. }
  94. @Step
  95. protected void navigateToTopics() {
  96. naviSideBar
  97. .openSideMenu(TOPICS);
  98. topicsList
  99. .waitUntilScreenReady();
  100. }
  101. @Step
  102. protected void navigateToTopicsAndOpenDetails(String topicName){
  103. naviSideBar
  104. .openSideMenu(TOPICS);
  105. topicsList
  106. .waitUntilScreenReady()
  107. .openTopic(topicName);
  108. topicDetails
  109. .waitUntilScreenReady();
  110. }
  111. @Step
  112. protected void verifyElementsCondition(List<SelenideElement> elementList, Condition expectedCondition) {
  113. SoftAssertions softly = new SoftAssertions();
  114. elementList.forEach(element -> softly.assertThat(element.is(expectedCondition))
  115. .as(element.getSearchCriteria() + " is " + expectedCondition).isTrue());
  116. softly.assertAll();
  117. }
  118. }