Repository: provectus/kafka-ui
Issue: [e2e] create navigation thru the app using web driver
Labels: type/enhancement
scope/QA
status/accepted

- create NaviSideBar class
- implement all navigations

Issue comments:

Pull request review comments:
why do we need this annotation?
$x("//h1[text()='Dashboard']") is it Dashboard title?
we need to wait NaviSideBar element in this method, I meant to get Dashboard menu
please don't place enums between steps
please set waitUntilScreenReady() at the top of methods
enums can be moved to the footer
because of it's the first waiter that we met after opening URL we need to increase Duration in aviSideBar.waitUntilScreenReady(). I believe we can set 30 sec to try from start
can we use static import NaviSideBar.SideMenuOptions.*?
kafkaConnectList.waitUntilScreenReady() missed
let's simplify this method. today we have only one cluster so we can overload method only with SideMenuOption as argument and use it in test. please make such method with hardcoded clusterName
use single number, pls: SideMenuOptions -> SideMenuOption
schemaRegistryList.waitUntilScreenReady() missed
schemaRegistryList.waitUntilScreenReady() missed
schemaRegistryList.waitUntilScreenReady() missed
schemaRegistryList.waitUntilScreenReady() missed
schemaRegistryList.waitUntilScreenReady() missed
schemaRegistryList.waitUntilScreenReady() missed
topicsList.waitUntilScreenReady() missed
Added
Added
Added
Added
Added
Added
Added
Fixed
Done.
Added
Fixed
Added
Fixed
Fixed
Fixed
where??
it's bad practice to use some strange spaces in locators
better use 'contains' in this case
extra space, remove pls
partially, take a look again pls
kafkaConnectList.waitUntilScreenReady() missed
kafkaConnectList.waitUntilScreenReady() missed
schemaRegistryList.waitUntilScreenReady() missed
insert pls schemaDetails object to understand which screen are we waiting for
schemaRegistryList.waitUntilScreenReady() missed
schemaRegistryList.waitUntilScreenReady() missed
schemaRegistryList.waitUntilScreenReady() missed
schemaRegistryList.waitUntilScreenReady() missed
schemaRegistryList.waitUntilScreenReady() missed
topicsList.waitUntilScreenReady() missed
Fixed
Have done!
Fixed
Fixed
Fixed
Added
Added
Added
Added
Added
Added
Added
Added
where??
after openEditSchema() we should wait schemaCreateForm
Have done!
Added

Patch that resolved the issue:
diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/MainPage.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/NaviSideBar.java
similarity index 50%
rename from kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/MainPage.java
rename to kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/NaviSideBar.java
index ba93f0535c7..30796617122 100644
--- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/MainPage.java
+++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/NaviSideBar.java
@@ -1,58 +1,55 @@
 package com.provectus.kafka.ui.pages;
 
 import com.codeborne.selenide.Condition;
-import com.codeborne.selenide.Selenide;
 import com.codeborne.selenide.SelenideElement;
-import com.provectus.kafka.ui.utilities.WaitUtils;
-import com.provectus.kafka.ui.settings.Source;
 import io.qameta.allure.Step;
-import lombok.experimental.ExtensionMethod;
-import org.openqa.selenium.By;
 
-import static com.codeborne.selenide.Selenide.$;
+import java.time.Duration;
+
 import static com.codeborne.selenide.Selenide.$x;
+import static com.provectus.kafka.ui.settings.Source.CLUSTER_NAME;
 
-@ExtensionMethod({WaitUtils.class})
-public class MainPage {
+public class NaviSideBar {
 
-    private static final String path = "/";
+    @Step
+    public NaviSideBar waitUntilScreenReady() {
+        $x("//*[contains(text(),'Loading')]").shouldBe(Condition.disappear, Duration.ofSeconds(30));
+        $x("//a[@title='Dashboard']").shouldBe(Condition.visible, Duration.ofSeconds(30));
+        return this;
+    }
 
     @Step
-    public MainPage goTo() {
-        Selenide.open(Source.BASE_WEB_URL + path);
+    public NaviSideBar openSideMenu(String clusterName, SideMenuOption option) {
+        SelenideElement clusterElement = $x(String.format("//aside/ul/li[contains(.,'%s')]", clusterName)).shouldBe(Condition.visible);
+        if (clusterElement.parent().$$x(".//ul").size() == 0) {
+            clusterElement.click();
+        }
+        clusterElement
+                .parent()
+                .$x(String.format(".//ul/li[contains(.,'%s')]", option.value))
+                .click();
         return this;
     }
 
     @Step
-    public MainPage waitUntilScreenReady() {
-        $(By.xpath("//*[contains(text(),'Loading')]")).shouldBe(Condition.disappear);
-        $("input[name=switchRoundedDefault]").parent().$("span").shouldBe(Condition.visible);
+    public NaviSideBar openSideMenu(SideMenuOption option) {
+        openSideMenu(CLUSTER_NAME, option);
         return this;
     }
 
-    public enum SideMenuOptions {
+
+    public enum SideMenuOption {
         BROKERS("Brokers"),
         TOPICS("Topics"),
         CONSUMERS("Consumers"),
-        SCHEMA_REGISTRY("Schema Registry");
+        SCHEMA_REGISTRY("Schema Registry"),
+        KAFKA_CONNECT("Kafka Connect"),
+        KSQL_DB("KSQL DB");
 
         final String value;
 
-        SideMenuOptions(String value) {
+        SideMenuOption(String value) {
             this.value = value;
         }
     }
-
-    @Step
-    public MainPage goToSideMenu(String clusterName, SideMenuOptions option) {
-        SelenideElement clusterElement = $x(String.format("//aside/ul/li[contains(.,'%s')]", clusterName)).shouldBe(Condition.visible);
-        if (clusterElement.parent().$$x(".//ul").size() == 0) {
-            clusterElement.click();
-        }
-        clusterElement
-                .parent()
-                .$x(String.format(".//ul/li[contains(.,'%s')]", option.value))
-                .click();
-        return this;
-    }
-}
+}
\ No newline at end of file
diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/KafkaConnectList.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/KafkaConnectList.java
index 70993072dfd..b5986c7919e 100644
--- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/KafkaConnectList.java
+++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/KafkaConnectList.java
@@ -1,8 +1,6 @@
 package com.provectus.kafka.ui.pages.connector;
 
 import com.codeborne.selenide.Condition;
-import com.codeborne.selenide.Selenide;
-import com.provectus.kafka.ui.settings.Source;
 import com.provectus.kafka.ui.utilities.WaitUtils;
 import io.qameta.allure.Step;
 import lombok.experimental.ExtensionMethod;
@@ -16,14 +14,6 @@
 @ExtensionMethod(WaitUtils.class)
 public class KafkaConnectList {
 
-    private static final String path = "/ui/clusters/%s/connectors";
-
-    @Step("Open URL to {cluster}")
-    public KafkaConnectList goTo(String cluster) {
-        Selenide.open(Source.BASE_WEB_URL + String.format(path, cluster));
-        return this;
-    }
-
     @Step
     public KafkaConnectList waitUntilScreenReady() {
         $(By.xpath("//h1[text()='Connectors']")).shouldBe(Condition.visible);
diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaCreateForm.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaCreateForm.java
index fec5db8b2e7..0f223ada78e 100644
--- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaCreateForm.java
+++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaCreateForm.java
@@ -1,5 +1,6 @@
 package com.provectus.kafka.ui.pages.schema;
 
+import com.codeborne.selenide.Condition;
 import com.codeborne.selenide.Selenide;
 import com.codeborne.selenide.SelenideElement;
 import com.provectus.kafka.ui.api.model.CompatibilityLevel;
@@ -20,6 +21,12 @@ public class SchemaCreateForm {
     protected SelenideElement newSchemaTextArea = $("#newSchema [wrap]");
     protected SelenideElement schemaTypeDropDown = $x("//ul[@name='schemaType']");
 
+    @Step
+    public SchemaCreateForm waitUntilScreenReady() {
+        $x("//h1['Edit']").shouldBe(Condition.visible);
+        return this;
+    }
+
     @Step
     public SchemaCreateForm setSubjectName(String name) {
         subjectName.setValue(name);
diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaRegistryList.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaRegistryList.java
index eb378be3db6..d37981d3044 100644
--- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaRegistryList.java
+++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaRegistryList.java
@@ -14,6 +14,13 @@ public class SchemaRegistryList {
 
     private final SelenideElement schemaButton = $(By.xpath("//*[contains(text(),'Create Schema')]"));
 
+    @Step
+    public SchemaRegistryList waitUntilScreenReady(){
+        $x("//*[contains(text(),'Loading')]").shouldBe(Condition.disappear);
+        $x("//button[contains(text(),'Create Schema')]").shouldBe(Condition.visible);
+        return this;
+    }
+
     @Step
     public SchemaCreateForm clickCreateSchema() {
         clickByJavaScript(schemaButton);
diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/ProduceMessagePanel.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/ProduceMessagePanel.java
index d6ecebcd7a7..62d619a5394 100644
--- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/ProduceMessagePanel.java
+++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/ProduceMessagePanel.java
@@ -43,6 +43,6 @@ public TopicDetails submitProduceMessage() {
         submitBtn.shouldBe(Condition.enabled).click();
         submitBtn.shouldBe(Condition.disappear);
         refresh();
-        return new TopicDetails().waitUntilScreenReady();
+        return new TopicDetails();
     }
 }
diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicDetails.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicDetails.java
index e0400bea37b..123c3d76eec 100644
--- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicDetails.java
+++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicDetails.java
@@ -1,9 +1,7 @@
 package com.provectus.kafka.ui.pages.topic;
 
 import com.codeborne.selenide.Condition;
-import com.codeborne.selenide.Selenide;
 import com.codeborne.selenide.SelenideElement;
-import com.provectus.kafka.ui.settings.Source;
 import com.provectus.kafka.ui.utilities.WaitUtils;
 import io.qameta.allure.Step;
 import lombok.experimental.ExtensionMethod;
@@ -15,15 +13,8 @@
 @ExtensionMethod({WaitUtils.class})
 public class TopicDetails {
 
-    private static final String URL_PATH = "/ui/clusters/%s/topics/%s";
     protected SelenideElement dotMenuBtn = $$x("//button[@aria-label='Dropdown Toggle']").first();
 
-    @Step
-    public TopicDetails goTo(String cluster, String topic) {
-        Selenide.open(Source.BASE_WEB_URL + String.format(URL_PATH, cluster, topic));
-        return this;
-    }
-
     @Step
     public TopicDetails waitUntilScreenReady() {
         $(By.linkText("Overview")).shouldBe(Condition.visible);
@@ -70,7 +61,9 @@ public boolean isContentMessageVisible(String contentMessage) {
     }
 
     private enum DotMenuHeaderItems {
-        EDIT_SETTINGS("Edit settings"), CLEAR_MESSAGES("Clear messages"), REMOVE_TOPIC("Remove topic");
+        EDIT_SETTINGS("Edit settings"),
+        CLEAR_MESSAGES("Clear messages"),
+        REMOVE_TOPIC("Remove topic");
 
         private final String value;
 
@@ -89,7 +82,10 @@ public String toString() {
     }
 
     public enum TopicMenu {
-        OVERVIEW("Overview"), MESSAGES("Messages"), CONSUMERS("Consumers"), SETTINGS("Settings");
+        OVERVIEW("Overview"),
+        MESSAGES("Messages"),
+        CONSUMERS("Consumers"),
+        SETTINGS("Settings");
 
         private final String value;
 
diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicsList.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicsList.java
index 3412e0d5da8..0097bdb91a3 100644
--- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicsList.java
+++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicsList.java
@@ -1,29 +1,19 @@
 package com.provectus.kafka.ui.pages.topic;
 
-import com.codeborne.selenide.CollectionCondition;
 import com.codeborne.selenide.Condition;
-import com.codeborne.selenide.Selenide;
-import com.provectus.kafka.ui.settings.Source;
 import com.provectus.kafka.ui.utilities.WaitUtils;
 import io.qameta.allure.Step;
 import lombok.experimental.ExtensionMethod;
 import org.openqa.selenium.By;
 
-import static com.codeborne.selenide.Selenide.*;
+import static com.codeborne.selenide.Selenide.$;
+import static com.codeborne.selenide.Selenide.$x;
 import static com.provectus.kafka.ui.utilities.WebUtils.clickByJavaScript;
 import static com.provectus.kafka.ui.utilities.WebUtils.isVisible;
 
 @ExtensionMethod(WaitUtils.class)
 public class TopicsList {
 
-    private static final String path = "/ui/clusters/%s/all-topics";
-
-    @Step
-    public TopicsList goTo(String cluster) {
-        Selenide.open(Source.BASE_WEB_URL + String.format(path, cluster));
-        return this;
-    }
-
     @Step
     public TopicsList waitUntilScreenReady() {
         $(By.xpath("//*[contains(text(),'Loading')]")).shouldBe(Condition.disappear);
@@ -48,14 +38,4 @@ public TopicDetails openTopic(String topicName) {
         $(By.linkText(topicName)).click();
         return new TopicDetails();
     }
-
-    @Step
-    public TopicsList isTopicNotVisible(String topicName) {
-        $$x("//table/tbody/tr/td[2]")
-                .shouldBe(CollectionCondition.sizeGreaterThan(0))
-                .find(Condition.exactText(topicName))
-                .shouldBe(Condition.not(Condition.visible));
-        return this;
-    }
-
 }
diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/settings/Source.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/settings/Source.java
index f1c780214cb..0cbd7ae7c39 100644
--- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/settings/Source.java
+++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/settings/Source.java
@@ -4,4 +4,5 @@ public abstract class Source {
 
   public static String BASE_API_URL = System.getProperty("BASE_URL", "http://localhost:8080");
   public static String BASE_WEB_URL = System.getProperty("BASE_DOCKER_URL", "http://host.testcontainers.internal:8080");
+  public static final String CLUSTER_NAME = "local";
 }


Test patch:
diff --git a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/SmokeTests.java b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/SmokeTests.java
index c9c560c3edc..e876d3a634b 100644
--- a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/SmokeTests.java
+++ b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/SmokeTests.java
@@ -14,8 +14,6 @@ public class SmokeTests extends BaseTest {
     @CaseId(198)
     @DisplayName("main page should load")
     void mainPageLoads() {
-        mainPage.goTo()
-                .waitUntilScreenReady();
         compareScreenshots("main");
     }
 }
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 a864a36eb2c..a3086fd7151 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
@@ -1,5 +1,7 @@
 package com.provectus.kafka.ui.base;
 
+import com.codeborne.selenide.Condition;
+import com.codeborne.selenide.Selenide;
 import com.codeborne.selenide.WebDriverRunner;
 import com.provectus.kafka.ui.utilities.qaseIoUtils.DisplayNameGenerator;
 import com.provectus.kafka.ui.utilities.qaseIoUtils.TestCaseGenerator;
@@ -22,9 +24,10 @@
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
+import java.time.Duration;
 
-import static com.provectus.kafka.ui.base.Setup.clearReports;
-import static com.provectus.kafka.ui.base.Setup.setup;
+import static com.provectus.kafka.ui.base.Setup.*;
+import static com.provectus.kafka.ui.settings.Source.BASE_WEB_URL;
 
 @Slf4j
 @DisplayNameGeneration(DisplayNameGenerator.class)
@@ -32,8 +35,6 @@ public class BaseTest extends Facade {
 
   private static final String SELENIUM_IMAGE_NAME = "selenium/standalone-chrome:103.0";
   private static final String SELENIARM_STANDALONE_CHROMIUM = "seleniarm/standalone-chromium:103.0";
-  protected static final String CLUSTER_NAME = "local";
-
   private final Screenshooter screenshooter = new Screenshooter();
 
   protected static BrowserWebDriverContainer<?> webDriverContainer = null;
@@ -55,6 +56,8 @@ public void setWebDriver() {
     RemoteWebDriver remoteWebDriver = webDriverContainer.getWebDriver();
     WebDriverRunner.setWebDriver(remoteWebDriver);
     remoteWebDriver.manage().window().setSize(new Dimension(1440, 1024));
+    Selenide.open(BASE_WEB_URL);
+    naviSideBar.waitUntilScreenReady();
   }
 
   @BeforeAll
@@ -118,5 +121,6 @@ public void afterMethod() {
     Allure.addAttachment("Screenshot",
         new ByteArrayInputStream(
             ((TakesScreenshot) webDriverContainer.getWebDriver()).getScreenshotAs(OutputType.BYTES)));
+    browserClear();
   }
 }
diff --git a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Facade.java b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Facade.java
index 46e17e0b961..8d3aea55d4f 100644
--- a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Facade.java
+++ b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Facade.java
@@ -1,7 +1,7 @@
 package com.provectus.kafka.ui.base;
 
 import com.provectus.kafka.ui.helpers.ApiHelper;
-import com.provectus.kafka.ui.pages.MainPage;
+import com.provectus.kafka.ui.pages.NaviSideBar;
 import com.provectus.kafka.ui.pages.connector.ConnectorCreateForm;
 import com.provectus.kafka.ui.pages.connector.ConnectorDetails;
 import com.provectus.kafka.ui.pages.connector.KafkaConnectList;
@@ -14,7 +14,6 @@
 import com.provectus.kafka.ui.pages.topic.TopicsList;
 
 public abstract class Facade {
-    protected MainPage mainPage = new MainPage();
     protected ApiHelper apiHelper = new ApiHelper();
     protected ConnectorCreateForm connectorCreateForm = new ConnectorCreateForm();
     protected KafkaConnectList kafkaConnectList = new KafkaConnectList();
@@ -26,4 +25,5 @@ public abstract class Facade {
     protected TopicCreateEditForm topicCreateEditForm = new TopicCreateEditForm();
     protected TopicsList topicsList = new TopicsList();
     protected TopicDetails topicDetails = new TopicDetails();
+    protected NaviSideBar naviSideBar = new NaviSideBar();
 }
diff --git a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Setup.java b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Setup.java
index 954acb37ba7..2f64699eb26 100644
--- a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Setup.java
+++ b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Setup.java
@@ -2,13 +2,19 @@
 
 import com.codeborne.selenide.Configuration;
 import com.codeborne.selenide.logevents.SelenideLogger;
+import io.qameta.allure.Step;
 import io.qameta.allure.selenide.AllureSelenide;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 
 import java.io.File;
 import java.util.Arrays;
 
+import static com.codeborne.selenide.Selenide.*;
+import static com.provectus.kafka.ui.settings.Source.BASE_WEB_URL;
+
 @Slf4j
 public abstract class Setup {
 
@@ -38,4 +44,13 @@ public static void clearReports() {
             }
         }
     }
+
+    @Step
+    public static void browserClear() {
+        log.debug("browserClear");
+        clearBrowserLocalStorage();
+        clearBrowserCookies();
+        refresh();
+        log.debug("=> DONE");
+    }
 }
diff --git a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/ConnectorsTests.java b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/ConnectorsTests.java
index 4cc0c783e4b..bc69eeee6f0 100644
--- a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/ConnectorsTests.java
+++ b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/ConnectorsTests.java
@@ -12,6 +12,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import static com.provectus.kafka.ui.pages.NaviSideBar.SideMenuOption.KAFKA_CONNECT;
+import static com.provectus.kafka.ui.settings.Source.CLUSTER_NAME;
 import static com.provectus.kafka.ui.utilities.FileUtils.getResourceAsString;
 
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
@@ -60,14 +62,19 @@ public void createConnector() {
         Connector connectorForCreate = new Connector()
                 .setName("sink_postgres_activities_e2e_checks")
                 .setConfig(getResourceAsString("config_for_create_connector.json"));
-        kafkaConnectList.goTo(CLUSTER_NAME)
+        naviSideBar
+                .openSideMenu(KAFKA_CONNECT);
+        kafkaConnectList
                 .waitUntilScreenReady()
-                .clickCreateConnectorButton()
+                .clickCreateConnectorButton();
+        connectorCreateForm
                 .waitUntilScreenReady()
                 .setConnectorConfig(connectorForCreate.getName(), connectorForCreate.getConfig());
-        kafkaConnectList.goTo(CLUSTER_NAME)
+        naviSideBar
+                .openSideMenu(KAFKA_CONNECT);
+        kafkaConnectList
                 .waitUntilScreenReady();
-        Assertions.assertTrue(kafkaConnectList.isConnectorVisible(connectorForCreate.getName()),"isConnectorVisible()");
+        Assertions.assertTrue(kafkaConnectList.isConnectorVisible(connectorForCreate.getName()), "isConnectorVisible()");
         CONNECTOR_LIST.add(connectorForCreate);
     }
 
@@ -77,14 +84,20 @@ public void createConnector() {
     @CaseId(196)
     @Test
     public void updateConnector() {
-        kafkaConnectList.goTo(CLUSTER_NAME)
+        naviSideBar
+                .openSideMenu(KAFKA_CONNECT);
+        kafkaConnectList
                 .waitUntilScreenReady()
                 .openConnector(CONNECTOR_FOR_UPDATE.getName());
-        connectorDetails.waitUntilScreenReady()
+        connectorDetails
+                .waitUntilScreenReady()
                 .openConfigTab()
                 .setConfig(CONNECTOR_FOR_UPDATE.getConfig());
-        kafkaConnectList.goTo(CLUSTER_NAME);
-        Assertions.assertTrue(kafkaConnectList.isConnectorVisible(CONNECTOR_FOR_UPDATE.getName()),"isConnectorVisible()");
+        naviSideBar
+                .openSideMenu(KAFKA_CONNECT);
+        kafkaConnectList
+                .waitUntilScreenReady();
+        Assertions.assertTrue(kafkaConnectList.isConnectorVisible(CONNECTOR_FOR_UPDATE.getName()), "isConnectorVisible()");
     }
 
     @DisplayName("should delete connector")
@@ -93,7 +106,9 @@ public void updateConnector() {
     @CaseId(195)
     @Test
     public void deleteConnector() {
-        kafkaConnectList.goTo(CLUSTER_NAME)
+        naviSideBar
+                .openSideMenu(KAFKA_CONNECT);
+        kafkaConnectList
                 .waitUntilScreenReady()
                 .openConnector(CONNECTOR_FOR_DELETE.getName());
         connectorDetails
@@ -101,7 +116,10 @@ public void deleteConnector() {
                 .openDotMenu()
                 .clickDeleteButton()
                 .clickConfirmButton();
-        kafkaConnectList.goTo(CLUSTER_NAME);
+        naviSideBar
+                .openSideMenu(KAFKA_CONNECT);
+        kafkaConnectList
+                .waitUntilScreenReady();
         Assertions.assertFalse(kafkaConnectList.isConnectorVisible(CONNECTOR_FOR_DELETE.getName()), "isConnectorVisible()");
         CONNECTOR_LIST.remove(CONNECTOR_FOR_DELETE);
     }
diff --git a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/SchemasTests.java b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/SchemasTests.java
index b8139024e7b..8fa81c98b17 100644
--- a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/SchemasTests.java
+++ b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/SchemasTests.java
@@ -3,8 +3,6 @@
 import com.provectus.kafka.ui.api.model.CompatibilityLevel;
 import com.provectus.kafka.ui.base.BaseTest;
 import com.provectus.kafka.ui.models.Schema;
-import com.provectus.kafka.ui.pages.MainPage;
-import com.provectus.kafka.ui.pages.schema.SchemaDetails;
 import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.AutomationStatus;
 import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.Suite;
 import com.provectus.kafka.ui.utilities.qaseIoUtils.enums.Status;
@@ -15,6 +13,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import static com.provectus.kafka.ui.pages.NaviSideBar.SideMenuOption.SCHEMA_REGISTRY;
+import static com.provectus.kafka.ui.settings.Source.CLUSTER_NAME;
 import static com.provectus.kafka.ui.utilities.FileUtils.fileToString;
 
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
@@ -42,16 +42,22 @@ public void beforeAll() {
     @Order(1)
     void createSchemaAvro() {
         Schema schemaAvro = Schema.createSchemaAvro();
-        mainPage.goTo()
-                .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
-        schemaRegistryList.clickCreateSchema()
+        naviSideBar
+                .openSideMenu(SCHEMA_REGISTRY);
+        schemaRegistryList
+                .waitUntilScreenReady()
+                .clickCreateSchema();
+        schemaCreateForm
                 .setSubjectName(schemaAvro.getName())
                 .setSchemaField(fileToString(schemaAvro.getValuePath()))
                 .selectSchemaTypeFromDropdown(schemaAvro.getType())
-                .clickSubmit()
+                .clickSubmit();
+        schemaDetails
+                .waitUntilScreenReady();
+        naviSideBar
+                .openSideMenu(SCHEMA_REGISTRY);
+        schemaRegistryList
                 .waitUntilScreenReady();
-        mainPage.goTo()
-                .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
         Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaAvro.getName()),"isSchemaVisible()");
         SCHEMA_LIST.add(schemaAvro);
     }
@@ -64,17 +70,24 @@ void createSchemaAvro() {
     @Order(2)
     void updateSchemaAvro() {
         AVRO_API.setValuePath(System.getProperty("user.dir") + "/src/main/resources/testData/schema_avro_for_update.json");
-        mainPage.goTo()
-                .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
-        schemaRegistryList.openSchema(AVRO_API.getName())
+        naviSideBar
+                .openSideMenu(SCHEMA_REGISTRY);
+        schemaRegistryList
+                .waitUntilScreenReady()
+                .openSchema(AVRO_API.getName());
+        schemaDetails
                 .waitUntilScreenReady()
                 .openEditSchema();
+        schemaCreateForm
+                .waitUntilScreenReady();
         Assertions.assertTrue(schemaCreateForm.isSchemaDropDownDisabled(),"isSchemaDropDownDisabled()");
-        schemaCreateForm.selectCompatibilityLevelFromDropdown(CompatibilityLevel.CompatibilityEnum.NONE)
+        schemaCreateForm
+                .selectCompatibilityLevelFromDropdown(CompatibilityLevel.CompatibilityEnum.NONE)
                 .setNewSchemaValue(fileToString(AVRO_API.getValuePath()))
-                .clickSubmit()
+                .clickSubmit();
+        schemaDetails
                 .waitUntilScreenReady();
-        Assertions.assertEquals(CompatibilityLevel.CompatibilityEnum.NONE.toString(), new SchemaDetails().getCompatibility(), "getCompatibility()");
+        Assertions.assertEquals(CompatibilityLevel.CompatibilityEnum.NONE.toString(), schemaDetails.getCompatibility(), "getCompatibility()");
     }
 
     @DisplayName("should delete AVRO schema")
@@ -84,11 +97,16 @@ void updateSchemaAvro() {
     @Test
     @Order(3)
     void deleteSchemaAvro() {
-        mainPage.goTo()
-                .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
-        schemaRegistryList.openSchema(AVRO_API.getName())
+        naviSideBar
+                .openSideMenu(SCHEMA_REGISTRY);
+        schemaRegistryList
+                .waitUntilScreenReady()
+                .openSchema(AVRO_API.getName());
+        schemaDetails
                 .waitUntilScreenReady()
                 .removeSchema();
+        schemaRegistryList
+                .waitUntilScreenReady();
         Assertions.assertFalse(schemaRegistryList.isSchemaVisible(AVRO_API.getName()),"isSchemaVisible()");
         SCHEMA_LIST.remove(AVRO_API);
     }
@@ -101,15 +119,22 @@ void deleteSchemaAvro() {
     @Order(4)
     void createSchemaJson() {
         Schema schemaJson = Schema.createSchemaJson();
-        mainPage.goTo()
-                .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
-        schemaRegistryList.clickCreateSchema()
+        naviSideBar
+                .openSideMenu(SCHEMA_REGISTRY);
+        schemaRegistryList
+                .waitUntilScreenReady()
+                .clickCreateSchema();
+        schemaCreateForm
                 .setSubjectName(schemaJson.getName())
                 .setSchemaField(fileToString(schemaJson.getValuePath()))
                 .selectSchemaTypeFromDropdown(schemaJson.getType())
-                .clickSubmit()
+                .clickSubmit();
+        schemaDetails
+                .waitUntilScreenReady();
+        naviSideBar
+                .openSideMenu(SCHEMA_REGISTRY);
+        schemaRegistryList
                 .waitUntilScreenReady();
-        mainPage.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
         Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaJson.getName()),"isSchemaVisible()");
         SCHEMA_LIST.add(schemaJson);
     }
@@ -121,11 +146,16 @@ void createSchemaJson() {
     @Test
     @Order(5)
     void deleteSchemaJson() {
-        mainPage.goTo()
-                .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
-        schemaRegistryList.openSchema(JSON_API.getName())
+        naviSideBar
+                .openSideMenu(SCHEMA_REGISTRY);
+        schemaRegistryList
+                .waitUntilScreenReady()
+                .openSchema(JSON_API.getName());
+        schemaDetails
                 .waitUntilScreenReady()
                 .removeSchema();
+        schemaRegistryList
+                .waitUntilScreenReady();
         Assertions.assertFalse(schemaRegistryList.isSchemaVisible(JSON_API.getName()),"isSchemaVisible()");
         SCHEMA_LIST.remove(JSON_API);
     }
@@ -138,15 +168,22 @@ void deleteSchemaJson() {
     @Order(6)
     void createSchemaProtobuf() {
         Schema schemaProtobuf = Schema.createSchemaProtobuf();
-        mainPage.goTo()
-                .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
-        schemaRegistryList.clickCreateSchema()
+        naviSideBar
+                .openSideMenu(SCHEMA_REGISTRY);
+        schemaRegistryList
+                .waitUntilScreenReady()
+                .clickCreateSchema();
+        schemaCreateForm
                 .setSubjectName(schemaProtobuf.getName())
                 .setSchemaField(fileToString(schemaProtobuf.getValuePath()))
                 .selectSchemaTypeFromDropdown(schemaProtobuf.getType())
-                .clickSubmit()
+                .clickSubmit();
+        schemaDetails
+                .waitUntilScreenReady();
+        naviSideBar
+                .openSideMenu(SCHEMA_REGISTRY);
+        schemaRegistryList
                 .waitUntilScreenReady();
-        mainPage.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
         Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaProtobuf.getName()),"isSchemaVisible()");
         SCHEMA_LIST.add(schemaProtobuf);
     }
@@ -158,11 +195,16 @@ void createSchemaProtobuf() {
     @Test
     @Order(7)
     void deleteSchemaProtobuf() {
-        mainPage.goTo()
-                .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
-        schemaRegistryList.openSchema(PROTOBUF_API.getName())
+        naviSideBar
+                .openSideMenu(SCHEMA_REGISTRY);
+        schemaRegistryList
+                .waitUntilScreenReady()
+                .openSchema(PROTOBUF_API.getName());
+        schemaDetails
                 .waitUntilScreenReady()
                 .removeSchema();
+        schemaRegistryList
+                .waitUntilScreenReady();
         Assertions.assertFalse(schemaRegistryList.isSchemaVisible(PROTOBUF_API.getName()),"isSchemaVisible()");
         SCHEMA_LIST.remove(PROTOBUF_API);
     }
diff --git a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/TopicTests.java b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/TopicTests.java
index 03628ecbfd3..378190c6302 100644
--- a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/TopicTests.java
+++ b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/TopicTests.java
@@ -2,7 +2,6 @@
 
 import com.provectus.kafka.ui.base.BaseTest;
 import com.provectus.kafka.ui.models.Topic;
-import com.provectus.kafka.ui.pages.MainPage;
 import com.provectus.kafka.ui.pages.topic.TopicDetails;
 import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.AutomationStatus;
 import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.Suite;
@@ -14,6 +13,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import static com.provectus.kafka.ui.pages.NaviSideBar.SideMenuOption.TOPICS;
+import static com.provectus.kafka.ui.settings.Source.CLUSTER_NAME;
 import static com.provectus.kafka.ui.utilities.FileUtils.fileToString;
 
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
@@ -44,15 +45,21 @@ public void beforeAll() {
     @Test
     public void createTopic() {
         Topic topicToCreate = new Topic().setName("new-topic");
-        mainPage.goTo()
-                .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.TOPICS);
-        topicsList.pressCreateNewTopic()
+        naviSideBar
+                .openSideMenu(TOPICS);
+        topicsList
+                .waitUntilScreenReady()
+                .pressCreateNewTopic();
+        topicCreateEditForm
                 .setTopicName(topicToCreate.getName())
-                .sendData()
+                .sendData();
+        topicDetails
+                .waitUntilScreenReady();
+        naviSideBar
+                .openSideMenu(TOPICS);
+        topicsList
                 .waitUntilScreenReady();
-        mainPage.goTo()
-                .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.TOPICS);
-        Assertions.assertTrue(topicsList.isTopicVisible(topicToCreate.getName()),"isTopicVisible");
+        Assertions.assertTrue(topicsList.isTopicVisible(topicToCreate.getName()), "isTopicVisible");
         TOPIC_LIST.add(topicToCreate);
     }
 
@@ -63,21 +70,29 @@ public void createTopic() {
     @CaseId(197)
     @Test
     public void updateTopic() {
-        topicsList.goTo(CLUSTER_NAME)
-                .waitUntilScreenReady();
-        topicsList.openTopic(TOPIC_FOR_UPDATE.getName())
+        naviSideBar
+                .openSideMenu(TOPICS);
+        topicsList
+                .waitUntilScreenReady()
+                .openTopic(TOPIC_FOR_UPDATE.getName());
+        topicDetails
                 .waitUntilScreenReady()
-                .openEditSettings()
+                .openEditSettings();
+        topicCreateEditForm
                 .selectCleanupPolicy(TOPIC_FOR_UPDATE.getCompactPolicyValue())
                 .setMinInsyncReplicas(10)
                 .setTimeToRetainDataInMs(TOPIC_FOR_UPDATE.getTimeToRetainData())
                 .setMaxSizeOnDiskInGB(TOPIC_FOR_UPDATE.getMaxSizeOnDisk())
                 .setMaxMessageBytes(TOPIC_FOR_UPDATE.getMaxMessageBytes())
-                .sendData()
-                .waitUntilScreenReady();
-        topicsList.goTo(CLUSTER_NAME)
+                .sendData();
+        topicDetails
                 .waitUntilScreenReady();
-        topicsList.openTopic(TOPIC_FOR_UPDATE.getName())
+        naviSideBar
+                .openSideMenu(TOPICS);
+        topicsList
+                .waitUntilScreenReady()
+                .openTopic(TOPIC_FOR_UPDATE.getName());
+        topicDetails
                 .waitUntilScreenReady()
                 .openEditSettings();
         SoftAssertions softly = new SoftAssertions();
@@ -94,14 +109,19 @@ public void updateTopic() {
     @CaseId(207)
     @Test
     public void deleteTopic() {
-        topicsList.goTo(CLUSTER_NAME)
+        naviSideBar
+                .openSideMenu(TOPICS);
+        topicsList
                 .waitUntilScreenReady()
-                .openTopic(TOPIC_FOR_DELETE.getName())
+                .openTopic(TOPIC_FOR_DELETE.getName());
+        topicDetails
                 .waitUntilScreenReady()
                 .deleteTopic();
-        topicsList.goTo(CLUSTER_NAME)
+        naviSideBar
+                .openSideMenu(TOPICS);
+        topicsList
                 .waitUntilScreenReady();
-        Assertions.assertFalse(topicsList.isTopicVisible(TOPIC_FOR_DELETE.getName()),"isTopicVisible");
+        Assertions.assertFalse(topicsList.isTopicVisible(TOPIC_FOR_DELETE.getName()), "isTopicVisible");
         TOPIC_LIST.remove(TOPIC_FOR_DELETE);
     }
 
@@ -111,15 +131,21 @@ public void deleteTopic() {
     @CaseId(222)
     @Test
     void produceMessage() {
-        topicsList.goTo(CLUSTER_NAME)
+        naviSideBar
+                .openSideMenu(TOPICS);
+        topicsList
                 .waitUntilScreenReady()
-                .openTopic(TOPIC_FOR_UPDATE.getName())
+                .openTopic(TOPIC_FOR_UPDATE.getName());
+        topicDetails
                 .waitUntilScreenReady()
                 .openTopicMenu(TopicDetails.TopicMenu.MESSAGES)
-                .clickOnButton("Produce Message")
+                .clickOnButton("Produce Message");
+        produceMessagePanel
                 .setContentFiled(TOPIC_FOR_UPDATE.getMessageContent())
                 .setKeyField(TOPIC_FOR_UPDATE.getMessageKey())
                 .submitProduceMessage();
+        topicDetails
+                .waitUntilScreenReady();
         SoftAssertions softly = new SoftAssertions();
         softly.assertThat(topicDetails.isKeyMessageVisible((TOPIC_FOR_UPDATE.getMessageKey()))).withFailMessage("isKeyMessageVisible()").isTrue();
         softly.assertThat(topicDetails.isContentMessageVisible((TOPIC_FOR_UPDATE.getMessageContent()).trim())).withFailMessage("isContentMessageVisible()").isTrue();