BaseTest.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package com.provectus.kafka.ui;
  2. import com.codeborne.selenide.Condition;
  3. import com.codeborne.selenide.Selenide;
  4. import com.codeborne.selenide.SelenideElement;
  5. import com.codeborne.selenide.WebDriverRunner;
  6. import com.provectus.kafka.ui.settings.listeners.AllureListener;
  7. import com.provectus.kafka.ui.settings.listeners.LoggerListener;
  8. import io.qameta.allure.Step;
  9. import io.qase.testng.QaseListener;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.openqa.selenium.Dimension;
  12. import org.openqa.selenium.chrome.ChromeOptions;
  13. import org.openqa.selenium.remote.RemoteWebDriver;
  14. import org.testcontainers.Testcontainers;
  15. import org.testcontainers.containers.BrowserWebDriverContainer;
  16. import org.testcontainers.containers.output.Slf4jLogConsumer;
  17. import org.testcontainers.utility.DockerImageName;
  18. import org.testng.annotations.*;
  19. import org.testng.asserts.SoftAssert;
  20. import java.time.Duration;
  21. import java.util.List;
  22. import static com.provectus.kafka.ui.pages.NaviSideBar.SideMenuOption.TOPICS;
  23. import static com.provectus.kafka.ui.settings.BaseSource.*;
  24. import static com.provectus.kafka.ui.settings.configs.Profiles.CONTAINER;
  25. import static com.provectus.kafka.ui.settings.configs.Profiles.LOCAL;
  26. import static com.provectus.kafka.ui.settings.drivers.LocalWebDriver.*;
  27. import static com.provectus.kafka.ui.utilities.qaseUtils.QaseExtension.testRunSetup;
  28. @Slf4j
  29. @Listeners({AllureListener.class, LoggerListener.class, QaseListener.class})
  30. public abstract class BaseTest extends Facade {
  31. private static final String SELENIUM_IMAGE_NAME = "selenium/standalone-chrome:103.0";
  32. private static final String SELENIARM_STANDALONE_CHROMIUM = "seleniarm/standalone-chromium:103.0";
  33. protected static BrowserWebDriverContainer<?> webDriverContainer = null;
  34. private static boolean isARM64() {
  35. return System.getProperty("os.arch").equals("aarch64");
  36. }
  37. @BeforeSuite(alwaysRun = true)
  38. public void beforeSuite() {
  39. testRunSetup();
  40. switch (BROWSER) {
  41. case (CONTAINER) -> {
  42. DockerImageName image = isARM64()
  43. ? DockerImageName.parse(SELENIARM_STANDALONE_CHROMIUM).asCompatibleSubstituteFor(SELENIUM_IMAGE_NAME)
  44. : DockerImageName.parse(SELENIUM_IMAGE_NAME);
  45. log.info("Using [{}] as image name for chrome", image.getUnversionedPart());
  46. webDriverContainer = new BrowserWebDriverContainer<>(image)
  47. .withEnv("JAVA_OPTS", "-Dwebdriver.chrome.whitelistedIps=")
  48. .withStartupTimeout(Duration.ofSeconds(180))
  49. .withCapabilities(new ChromeOptions()
  50. .addArguments("--disable-dev-shm-usage")
  51. .addArguments("--disable-gpu")
  52. .addArguments("--no-sandbox")
  53. .addArguments("--verbose")
  54. .addArguments("--lang=es")
  55. )
  56. .withLogConsumer(new Slf4jLogConsumer(log).withPrefix("[CHROME]: "));
  57. try {
  58. Testcontainers.exposeHostPorts(8080);
  59. log.info("Starting browser container");
  60. webDriverContainer.start();
  61. } catch (Throwable e) {
  62. log.error("Couldn't start a container", e);
  63. }
  64. }
  65. case (LOCAL) -> loggerSetup();
  66. default -> throw new IllegalStateException("Unexpected value: " + BROWSER);
  67. }
  68. }
  69. @AfterSuite(alwaysRun = true)
  70. public void afterSuite() {
  71. switch (BROWSER) {
  72. case (CONTAINER) -> {
  73. if (webDriverContainer.isRunning()) {
  74. webDriverContainer.close();
  75. webDriverContainer.stop();
  76. }
  77. }
  78. case (LOCAL) -> browserQuit();
  79. default -> throw new IllegalStateException("Unexpected value: " + BROWSER);
  80. }
  81. }
  82. @BeforeMethod(alwaysRun = true)
  83. public void beforeMethod() {
  84. switch (BROWSER) {
  85. case (CONTAINER) -> {
  86. RemoteWebDriver remoteWebDriver = webDriverContainer.getWebDriver();
  87. WebDriverRunner.setWebDriver(remoteWebDriver);
  88. remoteWebDriver.manage()
  89. .window().setSize(new Dimension(1440, 1024));
  90. Selenide.open(BASE_CONTAINER_URL);
  91. }
  92. case (LOCAL) -> openUrl(BASE_LOCAL_URL);
  93. default -> throw new IllegalStateException("Unexpected value: " + BROWSER);
  94. }
  95. naviSideBar.waitUntilScreenReady();
  96. }
  97. @AfterMethod(alwaysRun = true)
  98. public void afterMethod() {
  99. browserClear();
  100. }
  101. @Step
  102. protected void navigateToTopics() {
  103. naviSideBar
  104. .openSideMenu(TOPICS);
  105. topicsList
  106. .waitUntilScreenReady();
  107. }
  108. @Step
  109. protected void navigateToTopicsAndOpenDetails(String topicName) {
  110. naviSideBar
  111. .openSideMenu(TOPICS);
  112. topicsList
  113. .waitUntilScreenReady()
  114. .openTopic(topicName);
  115. topicDetails
  116. .waitUntilScreenReady();
  117. }
  118. @Step
  119. protected void verifyElementsCondition(List<SelenideElement> elementList, Condition expectedCondition) {
  120. SoftAssert softly = new SoftAssert();
  121. elementList.forEach(element -> softly.assertTrue(element.is(expectedCondition),
  122. element.getSearchCriteria() + " is " + expectedCondition));
  123. softly.assertAll();
  124. }
  125. }