Pārlūkot izejas kodu

[e2e] Setup selenoid for multithreading (#3609)

* add browserSetup

* add browserSetup

* upd browserSetup

* upd browserSetup

* upd browserSetup

* upd browserSetup

* upd browserSetup

* upd read me
Vlad Senyuta 2 gadi atpakaļ
vecāks
revīzija
87a8f08ae1
30 mainītis faili ar 334 papildinājumiem un 255 dzēšanām
  1. 3 2
      .github/workflows/e2e-automation.yml
  2. 8 7
      .github/workflows/e2e-checks.yaml
  3. 3 2
      .github/workflows/e2e-weekly.yml
  4. 27 27
      documentation/compose/e2e-tests.yaml
  5. 10 1
      kafka-ui-e2e-checks/README.md
  6. 7 5
      kafka-ui-e2e-checks/docker/selenoid-git.yaml
  7. 33 0
      kafka-ui-e2e-checks/docker/selenoid-local.yaml
  8. 13 14
      kafka-ui-e2e-checks/pom.xml
  9. 15 0
      kafka-ui-e2e-checks/selenoid/config/browsersGit.json
  10. 3 3
      kafka-ui-e2e-checks/selenoid/config/browsersLocal.json
  11. 10 2
      kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/BasePage.java
  12. 1 1
      kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/panels/NaviSideBar.java
  13. 3 5
      kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topics/TopicCreateEditForm.java
  14. 8 9
      kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topics/TopicDetails.java
  15. 20 3
      kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topics/TopicsList.java
  16. 5 5
      kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/services/ApiService.java
  17. 9 2
      kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/settings/BaseSource.java
  18. 0 68
      kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/settings/drivers/LocalWebDriver.java
  19. 96 0
      kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/settings/drivers/WebDriver.java
  20. 21 6
      kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/utilities/WebUtils.java
  21. 2 2
      kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/variables/Url.java
  22. 9 74
      kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/BaseTest.java
  23. 7 7
      kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/smokeSuite/SmokeTest.java
  24. 12 0
      kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/smokeSuite/ksqlDb/KsqlDbTest.java
  25. 4 5
      kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/smokeSuite/topics/TopicsTest.java
  26. 1 1
      kafka-ui-e2e-checks/src/test/resources/manual.xml
  27. 1 1
      kafka-ui-e2e-checks/src/test/resources/qase.xml
  28. 1 1
      kafka-ui-e2e-checks/src/test/resources/regression.xml
  29. 1 1
      kafka-ui-e2e-checks/src/test/resources/sanity.xml
  30. 1 1
      kafka-ui-e2e-checks/src/test/resources/smoke.xml

+ 3 - 2
.github/workflows/e2e-automation.yml

@@ -36,7 +36,7 @@ jobs:
       - name: Pull with Docker
       - name: Pull with Docker
         id: pull_chrome
         id: pull_chrome
         run: |
         run: |
-          docker pull selenium/standalone-chrome:103.0
+          docker pull selenoid/vnc_chrome:103.0
       - name: Set up JDK
       - name: Set up JDK
         uses: actions/setup-java@v3
         uses: actions/setup-java@v3
         with:
         with:
@@ -52,6 +52,7 @@ jobs:
         id: compose_app
         id: compose_app
         # use the following command until #819 will be fixed
         # use the following command until #819 will be fixed
         run: |
         run: |
+          docker-compose -f kafka-ui-e2e-checks/docker/selenoid-git.yaml up -d
           docker-compose -f ./documentation/compose/e2e-tests.yaml up -d
           docker-compose -f ./documentation/compose/e2e-tests.yaml up -d
       - name: Run test suite
       - name: Run test suite
         run: |
         run: |
@@ -78,7 +79,7 @@ jobs:
         uses: Sibz/github-status-action@v1.1.6
         uses: Sibz/github-status-action@v1.1.6
         with:
         with:
           authToken: ${{secrets.GITHUB_TOKEN}}
           authToken: ${{secrets.GITHUB_TOKEN}}
-          context: "Test report"
+          context: "Click Details button to open Allure report"
           state: "success"
           state: "success"
           sha: ${{ github.sha }}
           sha: ${{ github.sha }}
           target_url: http://kafkaui-allure-reports.s3-website.eu-central-1.amazonaws.com/${{ github.run_number }}
           target_url: http://kafkaui-allure-reports.s3-website.eu-central-1.amazonaws.com/${{ github.run_number }}

+ 8 - 7
.github/workflows/e2e-checks.yaml

@@ -15,20 +15,20 @@ jobs:
       - uses: actions/checkout@v3
       - uses: actions/checkout@v3
         with:
         with:
           ref: ${{ github.event.pull_request.head.sha }}
           ref: ${{ github.event.pull_request.head.sha }}
-      - name: Configure AWS credentials for Kafka-UI account
+      - name: Configure AWS credentials
         uses: aws-actions/configure-aws-credentials@v2
         uses: aws-actions/configure-aws-credentials@v2
         with:
         with:
           aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
           aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
           aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
           aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
           aws-region: eu-central-1
           aws-region: eu-central-1
-      - name: Set the values
+      - name: Set up environment
         id: set_env_values
         id: set_env_values
         run: |
         run: |
           cat "./kafka-ui-e2e-checks/.env.ci" >> "./kafka-ui-e2e-checks/.env"
           cat "./kafka-ui-e2e-checks/.env.ci" >> "./kafka-ui-e2e-checks/.env"
-      - name: pull docker
+      - name: Pull with Docker
         id: pull_chrome
         id: pull_chrome
         run: |
         run: |
-          docker pull selenium/standalone-chrome:103.0
+          docker pull selenoid/vnc_chrome:103.0
       - name: Set up JDK
       - name: Set up JDK
         uses: actions/setup-java@v3
         uses: actions/setup-java@v3
         with:
         with:
@@ -40,12 +40,13 @@ jobs:
         run: |
         run: |
           ./mvnw -B -ntp versions:set -DnewVersion=${{ github.event.pull_request.head.sha }}
           ./mvnw -B -ntp versions:set -DnewVersion=${{ github.event.pull_request.head.sha }}
           ./mvnw -B -V -ntp clean install -Pprod -Dmaven.test.skip=true ${{ github.event.inputs.extraMavenOptions }}
           ./mvnw -B -V -ntp clean install -Pprod -Dmaven.test.skip=true ${{ github.event.inputs.extraMavenOptions }}
-      - name: compose app
+      - name: Compose with Docker
         id: compose_app
         id: compose_app
         # use the following command until #819 will be fixed
         # use the following command until #819 will be fixed
         run: |
         run: |
+          docker-compose -f kafka-ui-e2e-checks/docker/selenoid-git.yaml up -d
           docker-compose -f ./documentation/compose/e2e-tests.yaml up -d
           docker-compose -f ./documentation/compose/e2e-tests.yaml up -d
-      - name: e2e run
+      - name: Run test suite
         run: |
         run: |
           ./mvnw -B -ntp versions:set -DnewVersion=${{ github.event.pull_request.head.sha }}
           ./mvnw -B -ntp versions:set -DnewVersion=${{ github.event.pull_request.head.sha }}
           ./mvnw -B -V -ntp -Dsurefire.suiteXmlFiles='src/test/resources/smoke.xml' -f 'kafka-ui-e2e-checks' test -Pprod
           ./mvnw -B -V -ntp -Dsurefire.suiteXmlFiles='src/test/resources/smoke.xml' -f 'kafka-ui-e2e-checks' test -Pprod
@@ -65,7 +66,7 @@ jobs:
           AWS_S3_BUCKET: 'kafkaui-allure-reports'
           AWS_S3_BUCKET: 'kafkaui-allure-reports'
           AWS_REGION: 'eu-central-1'
           AWS_REGION: 'eu-central-1'
           SOURCE_DIR: 'allure-history/allure-results'
           SOURCE_DIR: 'allure-history/allure-results'
-      - name: Post the link to allure report
+      - name: Deploy report to Amazon S3
         if: always()
         if: always()
         uses: Sibz/github-status-action@v1.1.6
         uses: Sibz/github-status-action@v1.1.6
         with:
         with:

+ 3 - 2
.github/workflows/e2e-weekly.yml

@@ -23,7 +23,7 @@ jobs:
       - name: Pull with Docker
       - name: Pull with Docker
         id: pull_chrome
         id: pull_chrome
         run: |
         run: |
-          docker pull selenium/standalone-chrome:103.0
+          docker pull selenoid/vnc_chrome:103.0
       - name: Set up JDK
       - name: Set up JDK
         uses: actions/setup-java@v3
         uses: actions/setup-java@v3
         with:
         with:
@@ -39,6 +39,7 @@ jobs:
         id: compose_app
         id: compose_app
         # use the following command until #819 will be fixed
         # use the following command until #819 will be fixed
         run: |
         run: |
+          docker-compose -f kafka-ui-e2e-checks/docker/selenoid-git.yaml up -d
           docker-compose -f ./documentation/compose/e2e-tests.yaml up -d
           docker-compose -f ./documentation/compose/e2e-tests.yaml up -d
       - name: Run test suite
       - name: Run test suite
         run: |
         run: |
@@ -65,7 +66,7 @@ jobs:
         uses: Sibz/github-status-action@v1.1.6
         uses: Sibz/github-status-action@v1.1.6
         with:
         with:
           authToken: ${{secrets.GITHUB_TOKEN}}
           authToken: ${{secrets.GITHUB_TOKEN}}
-          context: "Test report"
+          context: "Click Details button to open Allure report"
           state: "success"
           state: "success"
           sha: ${{ github.sha }}
           sha: ${{ github.sha }}
           target_url: http://kafkaui-allure-reports.s3-website.eu-central-1.amazonaws.com/${{ github.run_number }}
           target_url: http://kafkaui-allure-reports.s3-website.eu-central-1.amazonaws.com/${{ github.run_number }}

+ 27 - 27
documentation/compose/e2e-tests.yaml

@@ -11,14 +11,14 @@ services:
       test: wget --no-verbose --tries=1 --spider  http://localhost:8080/actuator/health
       test: wget --no-verbose --tries=1 --spider  http://localhost:8080/actuator/health
       interval: 30s
       interval: 30s
       timeout: 10s
       timeout: 10s
-      retries: 10  
+      retries: 10
     depends_on:
     depends_on:
-        kafka0:
-          condition: service_healthy
-        schemaregistry0:
-          condition: service_healthy
-        kafka-connect0:
-          condition: service_healthy
+      kafka0:
+        condition: service_healthy
+      schemaregistry0:
+        condition: service_healthy
+      kafka-connect0:
+        condition: service_healthy
     environment:
     environment:
       KAFKA_CLUSTERS_0_NAME: local
       KAFKA_CLUSTERS_0_NAME: local
       KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka0:29092
       KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka0:29092
@@ -33,10 +33,10 @@ services:
     hostname: kafka0
     hostname: kafka0
     container_name: kafka0
     container_name: kafka0
     healthcheck:
     healthcheck:
-     test: unset JMX_PORT && KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka0 -Dcom.sun.management.jmxremote.rmi.port=9999" && kafka-broker-api-versions --bootstrap-server=localhost:9092
-     interval: 30s
-     timeout: 10s
-     retries: 10
+      test: unset JMX_PORT && KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka0 -Dcom.sun.management.jmxremote.rmi.port=9999" && kafka-broker-api-versions --bootstrap-server=localhost:9092
+      interval: 30s
+      timeout: 10s
+      retries: 10
     ports:
     ports:
       - "9092:9092"
       - "9092:9092"
       - "9997:9997"
       - "9997:9997"
@@ -68,12 +68,12 @@ services:
       - 8085:8085
       - 8085:8085
     depends_on:
     depends_on:
       kafka0:
       kafka0:
-          condition: service_healthy
+        condition: service_healthy
     healthcheck:
     healthcheck:
-     test: ["CMD", "timeout", "1", "curl", "--silent", "--fail", "http://schemaregistry0:8085/subjects"]
-     interval: 30s
-     timeout: 10s
-     retries: 10
+      test: [ "CMD", "timeout", "1", "curl", "--silent", "--fail", "http://schemaregistry0:8085/subjects" ]
+      interval: 30s
+      timeout: 10s
+      retries: 10
     environment:
     environment:
       SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: PLAINTEXT://kafka0:29092
       SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: PLAINTEXT://kafka0:29092
       SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: PLAINTEXT
       SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: PLAINTEXT
@@ -93,11 +93,11 @@ services:
       - 8083:8083
       - 8083:8083
     depends_on:
     depends_on:
       kafka0:
       kafka0:
-          condition: service_healthy
+        condition: service_healthy
       schemaregistry0:
       schemaregistry0:
-          condition: service_healthy
+        condition: service_healthy
     healthcheck:
     healthcheck:
-      test: ["CMD", "nc", "127.0.0.1", "8083"]
+      test: [ "CMD", "nc", "127.0.0.1", "8083" ]
       interval: 30s
       interval: 30s
       timeout: 10s
       timeout: 10s
       retries: 10
       retries: 10
@@ -118,8 +118,8 @@ services:
       CONNECT_INTERNAL_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
       CONNECT_INTERNAL_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
       CONNECT_REST_ADVERTISED_HOST_NAME: kafka-connect0
       CONNECT_REST_ADVERTISED_HOST_NAME: kafka-connect0
       CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components"
       CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components"
-#      AWS_ACCESS_KEY_ID: ""
-#      AWS_SECRET_ACCESS_KEY: ""
+  #      AWS_ACCESS_KEY_ID: ""
+  #      AWS_SECRET_ACCESS_KEY: ""
 
 
   kafka-init-topics:
   kafka-init-topics:
     image: confluentinc/cp-kafka:7.2.1
     image: confluentinc/cp-kafka:7.2.1
@@ -127,7 +127,7 @@ services:
       - ./message.json:/data/message.json
       - ./message.json:/data/message.json
     depends_on:
     depends_on:
       kafka0:
       kafka0:
-          condition: service_healthy
+        condition: service_healthy
     command: "bash -c 'echo Waiting for Kafka to be ready... && \
     command: "bash -c 'echo Waiting for Kafka to be ready... && \
                cub kafka-ready -b kafka0:29092 1 30 && \
                cub kafka-ready -b kafka0:29092 1 30 && \
                kafka-topics --create --topic users --partitions 3 --replication-factor 1 --if-not-exists --bootstrap-server kafka0:29092 && \
                kafka-topics --create --topic users --partitions 3 --replication-factor 1 --if-not-exists --bootstrap-server kafka0:29092 && \
@@ -142,10 +142,10 @@ services:
     ports:
     ports:
       - 5432:5432
       - 5432:5432
     healthcheck:
     healthcheck:
-      test: ["CMD-SHELL", "pg_isready -U dev_user"]
+      test: [ "CMD-SHELL", "pg_isready -U dev_user" ]
       interval: 10s
       interval: 10s
       timeout: 5s
       timeout: 5s
-      retries: 5  
+      retries: 5
     environment:
     environment:
       POSTGRES_USER: 'dev_user'
       POSTGRES_USER: 'dev_user'
       POSTGRES_PASSWORD: '12345'
       POSTGRES_PASSWORD: '12345'
@@ -154,7 +154,7 @@ services:
     image: ellerbrock/alpine-bash-curl-ssl
     image: ellerbrock/alpine-bash-curl-ssl
     depends_on:
     depends_on:
       postgres-db:
       postgres-db:
-          condition: service_healthy
+        condition: service_healthy
       kafka-connect0:
       kafka-connect0:
         condition: service_healthy
         condition: service_healthy
     volumes:
     volumes:
@@ -164,7 +164,7 @@ services:
   ksqldb:
   ksqldb:
     image: confluentinc/ksqldb-server:0.18.0
     image: confluentinc/ksqldb-server:0.18.0
     healthcheck:
     healthcheck:
-      test: ["CMD", "timeout", "1", "curl", "--silent", "--fail", "http://localhost:8088/info"]
+      test: [ "CMD", "timeout", "1", "curl", "--silent", "--fail", "http://localhost:8088/info" ]
       interval: 30s
       interval: 30s
       timeout: 10s
       timeout: 10s
       retries: 10
       retries: 10
@@ -174,7 +174,7 @@ services:
       kafka-connect0:
       kafka-connect0:
         condition: service_healthy
         condition: service_healthy
       schemaregistry0:
       schemaregistry0:
-         condition: service_healthy
+        condition: service_healthy
     ports:
     ports:
       - 8088:8088
       - 8088:8088
     environment:
     environment:

+ 10 - 1
kafka-ui-e2e-checks/README.md

@@ -27,7 +27,7 @@ This repository is for E2E UI automation.
 ```
 ```
 git clone https://github.com/provectus/kafka-ui.git
 git clone https://github.com/provectus/kafka-ui.git
 cd  kafka-ui-e2e-checks
 cd  kafka-ui-e2e-checks
-docker pull selenoid/vnc:chrome_86.0  
+docker pull selenoid/vnc_chrome:103.0 
 ```
 ```
 
 
 ### How to run checks
 ### How to run checks
@@ -36,6 +36,7 @@ docker pull selenoid/vnc:chrome_86.0
 
 
 ```
 ```
 cd kafka-ui
 cd kafka-ui
+docker-compose -f kafka-ui-e2e-checks/docker/selenoid-local.yaml up -d
 docker-compose -f documentation/compose/e2e-tests.yaml up -d
 docker-compose -f documentation/compose/e2e-tests.yaml up -d
 ```
 ```
 
 
@@ -51,6 +52,14 @@ docker-compose -f documentation/compose/e2e-tests.yaml up -d
 -Dbrowser=local
 -Dbrowser=local
 ```
 ```
 
 
+Expected Location of Chrome
+```
+Linux:	                    /usr/bin/google-chrome1
+Mac:	                    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
+Windows XP:                 %HOMEPATH%\Local Settings\Application Data\Google\Chrome\Application\chrome.exe
+Windows Vista and newer:    C:\Users%USERNAME%\AppData\Local\Google\Chrome\Application\chrome.exe
+```
+
 ### Qase integration
 ### Qase integration
 
 
 Found instruction for Qase.io integration (for internal use only) at `kafka-ui-e2e-checks/QASE.md`
 Found instruction for Qase.io integration (for internal use only) at `kafka-ui-e2e-checks/QASE.md`

+ 7 - 5
kafka-ui-e2e-checks/docker/selenoid.yaml → kafka-ui-e2e-checks/docker/selenoid-git.yaml

@@ -1,17 +1,19 @@
+---
 version: '3'
 version: '3'
 
 
 services:
 services:
+
   selenoid:
   selenoid:
     network_mode: bridge
     network_mode: bridge
     image: aerokube/selenoid:1.10.7
     image: aerokube/selenoid:1.10.7
     volumes:
     volumes:
       - "../selenoid/config:/etc/selenoid"
       - "../selenoid/config:/etc/selenoid"
       - "/var/run/docker.sock:/var/run/docker.sock"
       - "/var/run/docker.sock:/var/run/docker.sock"
-      - "../selenoid/video:/video"
+      - "../selenoid/video:/opt/selenoid/video"
       - "../selenoid/logs:/opt/selenoid/logs"
       - "../selenoid/logs:/opt/selenoid/logs"
     environment:
     environment:
-      - OVERRIDE_VIDEO_OUTPUT_DIR=video
-    command: [ "-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs" ]
+      - OVERRIDE_VIDEO_OUTPUT_DIR=../selenoid/video
+    command: [ "-conf", "/etc/selenoid/browsersGit.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs" ]
     ports:
     ports:
       - "4444:4444"
       - "4444:4444"
 
 
@@ -22,10 +24,10 @@ services:
       - selenoid
       - selenoid
     ports:
     ports:
       - "8081:8080"
       - "8081:8080"
-    command: [ "--selenoid-uri", "http://localhost:4444" ]
+    command: [ "--selenoid-uri", "http://selenoid:4444" ]
 
 
   selenoid-chrome:
   selenoid-chrome:
     network_mode: bridge
     network_mode: bridge
-    image: selenoid/vnc:chrome_96.0
+    image: selenoid/vnc_chrome:103.0
     extra_hosts:
     extra_hosts:
       - "host.docker.internal:host-gateway"
       - "host.docker.internal:host-gateway"

+ 33 - 0
kafka-ui-e2e-checks/docker/selenoid-local.yaml

@@ -0,0 +1,33 @@
+---
+version: '3'
+
+services:
+
+  selenoid:
+    network_mode: bridge
+    image: aerokube/selenoid:1.10.7
+    volumes:
+      - "../selenoid/config:/etc/selenoid"
+      - "/var/run/docker.sock:/var/run/docker.sock"
+      - "../selenoid/video:/opt/selenoid/video"
+      - "../selenoid/logs:/opt/selenoid/logs"
+    environment:
+      - OVERRIDE_VIDEO_OUTPUT_DIR=../selenoid/video
+    command: [ "-conf", "/etc/selenoid/browsersLocal.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs" ]
+    ports:
+      - "4444:4444"
+
+  selenoid-ui:
+    network_mode: bridge
+    image: aerokube/selenoid-ui:latest-release
+    links:
+      - selenoid
+    ports:
+      - "8081:8080"
+    command: [ "--selenoid-uri", "http://selenoid:4444" ]
+
+  selenoid-chrome:
+    network_mode: bridge
+    image: selenoid/vnc_chrome:103.0
+    extra_hosts:
+      - "host.docker.internal:host-gateway"

+ 13 - 14
kafka-ui-e2e-checks/pom.xml

@@ -17,15 +17,14 @@
         <testcontainers.version>1.17.6</testcontainers.version>
         <testcontainers.version>1.17.6</testcontainers.version>
         <httpcomponents.version>5.2.1</httpcomponents.version>
         <httpcomponents.version>5.2.1</httpcomponents.version>
         <selenium.version>4.8.1</selenium.version>
         <selenium.version>4.8.1</selenium.version>
-        <selenide.version>6.11.2</selenide.version>
+        <selenide.version>6.12.3</selenide.version>
         <testng.version>7.7.0</testng.version>
         <testng.version>7.7.0</testng.version>
         <allure.version>2.21.0</allure.version>
         <allure.version>2.21.0</allure.version>
-        <qase.io.version>3.0.3</qase.io.version>
+        <qase.io.version>3.0.4</qase.io.version>
         <aspectj.version>1.9.9.1</aspectj.version>
         <aspectj.version>1.9.9.1</aspectj.version>
         <assertj.version>3.24.2</assertj.version>
         <assertj.version>3.24.2</assertj.version>
         <hamcrest.version>2.2</hamcrest.version>
         <hamcrest.version>2.2</hamcrest.version>
-        <slf4j.version>1.7.36</slf4j.version>
-        <dotenv.version>2.3.1</dotenv.version>
+        <slf4j.version>2.0.5</slf4j.version>
         <kafka.version>3.3.1</kafka.version>
         <kafka.version>3.3.1</kafka.version>
     </properties>
     </properties>
 
 
@@ -122,6 +121,11 @@
             <artifactId>selenium</artifactId>
             <artifactId>selenium</artifactId>
             <version>${testcontainers.version}</version>
             <version>${testcontainers.version}</version>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>${org.projectlombok.version}</version>
+        </dependency>
         <dependency>
         <dependency>
             <groupId>org.apache.httpcomponents.core5</groupId>
             <groupId>org.apache.httpcomponents.core5</groupId>
             <artifactId>httpcore5</artifactId>
             <artifactId>httpcore5</artifactId>
@@ -132,6 +136,11 @@
             <artifactId>httpclient5</artifactId>
             <artifactId>httpclient5</artifactId>
             <version>${httpcomponents.version}</version>
             <version>${httpcomponents.version}</version>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-http-jdk-client</artifactId>
+            <version>${selenium.version}</version>
+        </dependency>
         <dependency>
         <dependency>
             <groupId>org.seleniumhq.selenium</groupId>
             <groupId>org.seleniumhq.selenium</groupId>
             <artifactId>selenium-http</artifactId>
             <artifactId>selenium-http</artifactId>
@@ -187,16 +196,6 @@
             <artifactId>slf4j-simple</artifactId>
             <artifactId>slf4j-simple</artifactId>
             <version>${slf4j.version}</version>
             <version>${slf4j.version}</version>
         </dependency>
         </dependency>
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <version>${org.projectlombok.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.github.cdimascio</groupId>
-            <artifactId>dotenv-java</artifactId>
-            <version>${dotenv.version}</version>
-        </dependency>
         <dependency>
         <dependency>
             <groupId>com.provectus</groupId>
             <groupId>com.provectus</groupId>
             <artifactId>kafka-ui-contract</artifactId>
             <artifactId>kafka-ui-contract</artifactId>

+ 15 - 0
kafka-ui-e2e-checks/selenoid/config/browsersGit.json

@@ -0,0 +1,15 @@
+{
+  "chrome": {
+    "default": "103.0",
+    "versions": {
+      "103.0": {
+        "image": "selenoid/vnc_chrome:103.0",
+        "hosts": [
+          "host.docker.internal:172.17.0.1"
+        ],
+        "port": "4444",
+        "path": "/"
+      }
+    }
+  }
+}

+ 3 - 3
kafka-ui-e2e-checks/selenoid/config/browsers.json → kafka-ui-e2e-checks/selenoid/config/browsersLocal.json

@@ -1,9 +1,9 @@
 {
 {
   "chrome": {
   "chrome": {
-    "default": "96.0",
+    "default": "103.0",
     "versions": {
     "versions": {
-      "96.0": {
-        "image": "selenoid/vnc_chrome:96.0",
+      "103.0": {
+        "image": "selenoid/vnc_chrome:103.0",
         "port": "4444",
         "port": "4444",
         "path": "/"
         "path": "/"
       }
       }

+ 10 - 2
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/BasePage.java

@@ -21,6 +21,7 @@ public abstract class BasePage extends WebUtils {
     protected SelenideElement loadingSpinner = $x("//div[@role='progressbar']");
     protected SelenideElement loadingSpinner = $x("//div[@role='progressbar']");
     protected SelenideElement submitBtn = $x("//button[@type='submit']");
     protected SelenideElement submitBtn = $x("//button[@type='submit']");
     protected SelenideElement tableGrid = $x("//table");
     protected SelenideElement tableGrid = $x("//table");
+    protected SelenideElement searchFld = $x("//input[@type='text'][contains(@id, ':r')]");
     protected SelenideElement dotMenuBtn = $x("//button[@aria-label='Dropdown Toggle']");
     protected SelenideElement dotMenuBtn = $x("//button[@aria-label='Dropdown Toggle']");
     protected SelenideElement alertHeader = $x("//div[@role='alert']//div[@role='heading']");
     protected SelenideElement alertHeader = $x("//div[@role='alert']//div[@role='heading']");
     protected SelenideElement alertMessage = $x("//div[@role='alert']//div[@role='contentinfo']");
     protected SelenideElement alertMessage = $x("//div[@role='alert']//div[@role='contentinfo']");
@@ -37,13 +38,20 @@ public abstract class BasePage extends WebUtils {
     protected String pageTitleFromHeader = "//h1[text()='%s']";
     protected String pageTitleFromHeader = "//h1[text()='%s']";
     protected String pagePathFromHeader = "//a[text()='%s']/../h1";
     protected String pagePathFromHeader = "//a[text()='%s']/../h1";
 
 
-    protected void waitUntilSpinnerDisappear() {
+    protected void waitUntilSpinnerDisappear(int... timeoutInSeconds) {
         log.debug("\nwaitUntilSpinnerDisappear");
         log.debug("\nwaitUntilSpinnerDisappear");
-        if (isVisible(loadingSpinner)) {
+        if (isVisible(loadingSpinner, timeoutInSeconds)) {
             loadingSpinner.shouldBe(Condition.disappear, Duration.ofSeconds(60));
             loadingSpinner.shouldBe(Condition.disappear, Duration.ofSeconds(60));
         }
         }
     }
     }
 
 
+    protected void searchItem(String tag) {
+        log.debug("\nsearchItem: {}", tag);
+        sendKeysAfterClear(searchFld, tag);
+        searchFld.pressEnter().shouldHave(Condition.value(tag));
+        waitUntilSpinnerDisappear(1);
+    }
+
     protected SelenideElement getPageTitleFromHeader(MenuItem menuItem) {
     protected SelenideElement getPageTitleFromHeader(MenuItem menuItem) {
         return $x(String.format(pageTitleFromHeader, menuItem.getPageTitle()));
         return $x(String.format(pageTitleFromHeader, menuItem.getPageTitle()));
     }
     }

+ 1 - 1
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/panels/NaviSideBar.java

@@ -2,8 +2,8 @@ package com.provectus.kafka.ui.pages.panels;
 
 
 import com.codeborne.selenide.Condition;
 import com.codeborne.selenide.Condition;
 import com.codeborne.selenide.SelenideElement;
 import com.codeborne.selenide.SelenideElement;
-import com.provectus.kafka.ui.pages.panels.enums.MenuItem;
 import com.provectus.kafka.ui.pages.BasePage;
 import com.provectus.kafka.ui.pages.BasePage;
+import com.provectus.kafka.ui.pages.panels.enums.MenuItem;
 import io.qameta.allure.Step;
 import io.qameta.allure.Step;
 
 
 import java.time.Duration;
 import java.time.Duration;

+ 3 - 5
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topics/TopicCreateEditForm.java

@@ -9,12 +9,13 @@ import com.provectus.kafka.ui.pages.topics.enums.TimeToRetain;
 import io.qameta.allure.Step;
 import io.qameta.allure.Step;
 
 
 import static com.codeborne.selenide.Selenide.*;
 import static com.codeborne.selenide.Selenide.*;
+import static org.openqa.selenium.By.id;
 
 
 public class TopicCreateEditForm extends BasePage {
 public class TopicCreateEditForm extends BasePage {
 
 
     protected SelenideElement timeToRetainField = $x("//input[@id='timeToRetain']");
     protected SelenideElement timeToRetainField = $x("//input[@id='timeToRetain']");
     protected SelenideElement partitionsField = $x("//input[@name='partitions']");
     protected SelenideElement partitionsField = $x("//input[@name='partitions']");
-    protected SelenideElement nameField = $x("//input[@name='name']");
+    protected SelenideElement nameField = $(id("topicFormName"));
     protected SelenideElement maxMessageBytesField = $x("//input[@name='maxMessageBytes']");
     protected SelenideElement maxMessageBytesField = $x("//input[@name='maxMessageBytes']");
     protected SelenideElement minInSyncReplicasField = $x("//input[@name='minInSyncReplicas']");
     protected SelenideElement minInSyncReplicasField = $x("//input[@name='minInSyncReplicas']");
     protected SelenideElement cleanUpPolicyDdl = $x("//ul[@id='topicFormCleanupPolicy']");
     protected SelenideElement cleanUpPolicyDdl = $x("//ul[@id='topicFormCleanupPolicy']");
@@ -49,10 +50,7 @@ public class TopicCreateEditForm extends BasePage {
 
 
     @Step
     @Step
     public TopicCreateEditForm setTopicName(String topicName) {
     public TopicCreateEditForm setTopicName(String topicName) {
-        nameField.shouldBe(Condition.enabled).clear();
-        if (topicName != null) {
-            nameField.sendKeys(topicName);
-        }
+        sendKeysAfterClear(nameField, topicName);
         return this;
         return this;
     }
     }
 
 

+ 8 - 9
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topics/TopicDetails.java

@@ -6,7 +6,6 @@ import com.codeborne.selenide.ElementsCollection;
 import com.codeborne.selenide.SelenideElement;
 import com.codeborne.selenide.SelenideElement;
 import com.provectus.kafka.ui.pages.BasePage;
 import com.provectus.kafka.ui.pages.BasePage;
 import io.qameta.allure.Step;
 import io.qameta.allure.Step;
-import org.openqa.selenium.By;
 
 
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
@@ -17,6 +16,7 @@ import java.time.format.DateTimeFormatterBuilder;
 import java.util.*;
 import java.util.*;
 
 
 import static com.codeborne.selenide.Selenide.*;
 import static com.codeborne.selenide.Selenide.*;
+import static com.provectus.kafka.ui.pages.topics.TopicDetails.TopicMenu.OVERVIEW;
 import static org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils.nextInt;
 import static org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils.nextInt;
 
 
 public class TopicDetails extends BasePage {
 public class TopicDetails extends BasePage {
@@ -24,8 +24,6 @@ public class TopicDetails extends BasePage {
     protected SelenideElement clearMessagesBtn = $x(("//div[contains(text(), 'Clear messages')]"));
     protected SelenideElement clearMessagesBtn = $x(("//div[contains(text(), 'Clear messages')]"));
     protected SelenideElement recreateTopicBtn = $x("//div[text()='Recreate Topic']");
     protected SelenideElement recreateTopicBtn = $x("//div[text()='Recreate Topic']");
     protected SelenideElement messageAmountCell = $x("//tbody/tr/td[5]");
     protected SelenideElement messageAmountCell = $x("//tbody/tr/td[5]");
-    protected SelenideElement overviewTab = $x("//a[contains(text(),'Overview')]");
-    protected SelenideElement messagesTab = $x("//a[contains(text(),'Messages')]");
     protected SelenideElement seekTypeDdl = $x("//ul[@id='selectSeekType']/li");
     protected SelenideElement seekTypeDdl = $x("//ul[@id='selectSeekType']/li");
     protected SelenideElement seekTypeField = $x("//label[text()='Seek Type']//..//div/input");
     protected SelenideElement seekTypeField = $x("//label[text()='Seek Type']//..//div/input");
     protected SelenideElement addFiltersBtn = $x("//button[text()='Add Filters']");
     protected SelenideElement addFiltersBtn = $x("//button[text()='Add Filters']");
@@ -50,6 +48,7 @@ public class TopicDetails extends BasePage {
     protected SelenideElement previousMonthButton = $x("//button[@aria-label='Previous Month']");
     protected SelenideElement previousMonthButton = $x("//button[@aria-label='Previous Month']");
     protected SelenideElement nextMonthButton = $x("//button[@aria-label='Next Month']");
     protected SelenideElement nextMonthButton = $x("//button[@aria-label='Next Month']");
     protected SelenideElement calendarTimeFld = $x("//input[@placeholder='Time']");
     protected SelenideElement calendarTimeFld = $x("//input[@placeholder='Time']");
+    protected String detailsTabLtr = "//nav//a[contains(text(),'%s')]";
     protected String dayCellLtr = "//div[@role='option'][contains(text(),'%d')]";
     protected String dayCellLtr = "//div[@role='option'][contains(text(),'%d')]";
     protected String seekFilterDdlLocator = "//ul[@id='selectSeekType']/ul/li[text()='%s']";
     protected String seekFilterDdlLocator = "//ul[@id='selectSeekType']/ul/li[text()='%s']";
     protected String savedFilterNameLocator = "//div[@role='savedFilter']/div[contains(text(),'%s')]";
     protected String savedFilterNameLocator = "//div[@role='savedFilter']/div[contains(text(),'%s')]";
@@ -61,13 +60,13 @@ public class TopicDetails extends BasePage {
     @Step
     @Step
     public TopicDetails waitUntilScreenReady() {
     public TopicDetails waitUntilScreenReady() {
         waitUntilSpinnerDisappear();
         waitUntilSpinnerDisappear();
-        overviewTab.shouldBe(Condition.visible);
+        $x(String.format(detailsTabLtr, OVERVIEW)).shouldBe(Condition.visible);
         return this;
         return this;
     }
     }
 
 
     @Step
     @Step
     public TopicDetails openDetailsTab(TopicMenu menu) {
     public TopicDetails openDetailsTab(TopicMenu menu) {
-        $(By.linkText(menu.toString())).shouldBe(Condition.visible).click();
+        $x(String.format(detailsTabLtr, menu.toString())).shouldBe(Condition.enabled).click();
         waitUntilSpinnerDisappear();
         waitUntilSpinnerDisappear();
         return this;
         return this;
     }
     }
@@ -172,9 +171,9 @@ public class TopicDetails extends BasePage {
 
 
     @Step
     @Step
     public TopicDetails clickNextButton() {
     public TopicDetails clickNextButton() {
-      nextBtn.shouldBe(Condition.enabled).click();
-      waitUntilSpinnerDisappear();
-      return this;
+        nextBtn.shouldBe(Condition.enabled).click();
+        waitUntilSpinnerDisappear();
+        return this;
     }
     }
 
 
     @Step
     @Step
@@ -254,7 +253,7 @@ public class TopicDetails extends BasePage {
 
 
     @Step
     @Step
     public boolean isNextButtonEnabled() {
     public boolean isNextButtonEnabled() {
-      return isEnabled(nextBtn);
+        return isEnabled(nextBtn);
     }
     }
 
 
     @Step
     @Step

+ 20 - 3
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topics/TopicsList.java

@@ -54,7 +54,17 @@ public class TopicsList extends BasePage {
 
 
     @Step
     @Step
     public TopicsList setShowInternalRadioButton(boolean select) {
     public TopicsList setShowInternalRadioButton(boolean select) {
-        selectElement(showInternalRadioBtn, select);
+        if (select) {
+            if (!showInternalRadioBtn.isSelected()) {
+                clickByJavaScript(showInternalRadioBtn);
+                waitUntilSpinnerDisappear(1);
+            }
+        } else {
+            if (showInternalRadioBtn.isSelected()) {
+                clickByJavaScript(showInternalRadioBtn);
+                waitUntilSpinnerDisappear(1);
+            }
+        }
         return this;
         return this;
     }
     }
 
 
@@ -169,9 +179,16 @@ public class TopicsList extends BasePage {
 
 
     @Step
     @Step
     public TopicGridItem getTopicItem(String name) {
     public TopicGridItem getTopicItem(String name) {
-        return initGridItems().stream()
+        TopicGridItem topicGridItem = initGridItems().stream()
                 .filter(e -> e.getName().equals(name))
                 .filter(e -> e.getName().equals(name))
-                .findFirst().orElseThrow();
+                .findFirst().orElse(null);
+        if (topicGridItem == null) {
+            searchItem(name);
+            topicGridItem = initGridItems().stream()
+                    .filter(e -> e.getName().equals(name))
+                    .findFirst().orElseThrow();
+        }
+        return topicGridItem;
     }
     }
 
 
     @Step
     @Step

+ 5 - 5
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/services/ApiService.java

@@ -29,27 +29,27 @@ public class ApiService extends BaseSource {
 
 
     @SneakyThrows
     @SneakyThrows
     private TopicsApi topicApi() {
     private TopicsApi topicApi() {
-        return new TopicsApi(new ApiClient().setBasePath(BASE_LOCAL_URL));
+        return new TopicsApi(new ApiClient().setBasePath(BASE_API_URL));
     }
     }
 
 
     @SneakyThrows
     @SneakyThrows
     private SchemasApi schemaApi() {
     private SchemasApi schemaApi() {
-        return new SchemasApi(new ApiClient().setBasePath(BASE_LOCAL_URL));
+        return new SchemasApi(new ApiClient().setBasePath(BASE_API_URL));
     }
     }
 
 
     @SneakyThrows
     @SneakyThrows
     private KafkaConnectApi connectorApi() {
     private KafkaConnectApi connectorApi() {
-        return new KafkaConnectApi(new ApiClient().setBasePath(BASE_LOCAL_URL));
+        return new KafkaConnectApi(new ApiClient().setBasePath(BASE_API_URL));
     }
     }
 
 
     @SneakyThrows
     @SneakyThrows
     private MessagesApi messageApi() {
     private MessagesApi messageApi() {
-        return new MessagesApi(new ApiClient().setBasePath(BASE_LOCAL_URL));
+        return new MessagesApi(new ApiClient().setBasePath(BASE_API_URL));
     }
     }
 
 
     @SneakyThrows
     @SneakyThrows
     private KsqlApi ksqlApi() {
     private KsqlApi ksqlApi() {
-        return new KsqlApi(new ApiClient().setBasePath(BASE_LOCAL_URL));
+        return new KsqlApi(new ApiClient().setBasePath(BASE_API_URL));
     }
     }
 
 
     @SneakyThrows
     @SneakyThrows

+ 9 - 2
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/settings/BaseSource.java

@@ -3,15 +3,22 @@ package com.provectus.kafka.ui.settings;
 import com.provectus.kafka.ui.settings.configs.Config;
 import com.provectus.kafka.ui.settings.configs.Config;
 import org.aeonbits.owner.ConfigFactory;
 import org.aeonbits.owner.ConfigFactory;
 
 
+import static com.provectus.kafka.ui.variables.Browser.LOCAL;
+
 public abstract class BaseSource {
 public abstract class BaseSource {
 
 
-    public static final String BASE_CONTAINER_URL = "http://host.testcontainers.internal:8080";
-    public static final String BASE_LOCAL_URL = "http://localhost:8080";
     public static final String CLUSTER_NAME = "local";
     public static final String CLUSTER_NAME = "local";
     public static final String CONNECT_NAME = "first";
     public static final String CONNECT_NAME = "first";
+    private static final String LOCAL_HOST = "localhost";
     private static Config config;
     private static Config config;
     public static final String BROWSER = config().browser();
     public static final String BROWSER = config().browser();
     public static final String SUITE_NAME = config().suite();
     public static final String SUITE_NAME = config().suite();
+    public static final String BASE_HOST = BROWSER.equals(LOCAL)
+            ? LOCAL_HOST
+            : "host.docker.internal";
+    public static final String REMOTE_URL = String.format("http://%s:4444/wd/hub", LOCAL_HOST);
+    public static final String BASE_API_URL = String.format("http://%s:8080", LOCAL_HOST);
+    public static final String BASE_UI_URL = String.format("http://%s:8080", BASE_HOST);
 
 
     private static Config config() {
     private static Config config() {
         if (config == null) {
         if (config == null) {

+ 0 - 68
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/settings/drivers/LocalWebDriver.java

@@ -1,68 +0,0 @@
-package com.provectus.kafka.ui.settings.drivers;
-
-import static com.codeborne.selenide.Selenide.clearBrowserCookies;
-import static com.codeborne.selenide.Selenide.clearBrowserLocalStorage;
-import static com.codeborne.selenide.Selenide.open;
-import static com.codeborne.selenide.Selenide.refresh;
-
-import com.codeborne.selenide.Configuration;
-import com.codeborne.selenide.WebDriverRunner;
-import com.codeborne.selenide.logevents.SelenideLogger;
-import io.qameta.allure.Step;
-import io.qameta.allure.selenide.AllureSelenide;
-import org.openqa.selenium.chrome.ChromeOptions;
-
-public abstract class LocalWebDriver {
-
-    private static org.openqa.selenium.WebDriver getWebDriver() {
-        try {
-            return WebDriverRunner.getWebDriver();
-        } catch (IllegalStateException ex) {
-            Configuration.headless = false;
-            Configuration.browser = "chrome";
-            Configuration.browserSize = "1920x1080";
-            /**screenshots and savePageSource config is needed for local debug
-             * optionally can be set as 'false' to not duplicate Allure report
-             */
-            Configuration.screenshots = true;
-            Configuration.savePageSource = true;
-            Configuration.pageLoadTimeout = 120000;
-            Configuration.browserCapabilities = new ChromeOptions()
-                    .addArguments("--remote-allow-origins=*")
-                    .addArguments("--lang=en_US");
-            open();
-            return WebDriverRunner.getWebDriver();
-        }
-    }
-
-    @Step
-    public static void openUrl(String url) {
-        if (!getWebDriver().getCurrentUrl().equals(url)) {
-            getWebDriver().get(url);
-        }
-    }
-
-    @Step
-    public static void browserInit() {
-        getWebDriver();
-    }
-
-    @Step
-    public static void browserClear() {
-        clearBrowserLocalStorage();
-        clearBrowserCookies();
-        refresh();
-    }
-
-    @Step
-    public static void browserQuit() {
-        getWebDriver().quit();
-    }
-
-    @Step
-    public static void loggerSetup() {
-        SelenideLogger.addListener("AllureSelenide", new AllureSelenide()
-                .screenshots(true)
-                .savePageSource(false));
-    }
-}

+ 96 - 0
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/settings/drivers/WebDriver.java

@@ -0,0 +1,96 @@
+package com.provectus.kafka.ui.settings.drivers;
+
+import com.codeborne.selenide.Configuration;
+import com.codeborne.selenide.Selenide;
+import com.codeborne.selenide.WebDriverRunner;
+import com.codeborne.selenide.logevents.SelenideLogger;
+import io.qameta.allure.Step;
+import io.qameta.allure.selenide.AllureSelenide;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.remote.DesiredCapabilities;
+
+import static com.codeborne.selenide.Selenide.*;
+import static com.provectus.kafka.ui.settings.BaseSource.BROWSER;
+import static com.provectus.kafka.ui.settings.BaseSource.REMOTE_URL;
+import static com.provectus.kafka.ui.variables.Browser.CONTAINER;
+import static com.provectus.kafka.ui.variables.Browser.LOCAL;
+
+public abstract class WebDriver {
+
+    @Step
+    public static void browserSetup() {
+        Configuration.headless = false;
+        Configuration.browser = "chrome";
+        Configuration.browserSize = "1920x1080";
+        /**screenshots and savePageSource config is needed for local debug
+         * optionally can be set as 'false' to not duplicate Allure report
+         */
+        Configuration.screenshots = true;
+        Configuration.savePageSource = false;
+        Configuration.pageLoadTimeout = 120000;
+        ChromeOptions options = new ChromeOptions()
+                .addArguments("--no-sandbox")
+                .addArguments("--verbose")
+                .addArguments("--remote-allow-origins=*")
+                .addArguments("--disable-dev-shm-usage")
+                .addArguments("--disable-gpu")
+                .addArguments("--lang=en_US");
+        switch (BROWSER) {
+            case (LOCAL) -> Configuration.browserCapabilities = options;
+            case (CONTAINER) -> {
+                Configuration.remote = REMOTE_URL;
+                Configuration.remoteConnectionTimeout = 180000;
+                DesiredCapabilities capabilities = new DesiredCapabilities();
+                capabilities.setCapability("enableVNC", true);
+                capabilities.setCapability("enableVideo", false);
+                Configuration.browserCapabilities = capabilities.merge(options);
+            }
+            default -> throw new IllegalStateException("Unexpected value: " + BROWSER);
+        }
+    }
+
+    private static org.openqa.selenium.WebDriver getWebDriver() {
+        try {
+            return WebDriverRunner.getWebDriver();
+        } catch (IllegalStateException ex) {
+            browserSetup();
+            Selenide.open();
+            return WebDriverRunner.getWebDriver();
+        }
+    }
+
+    @Step
+    public static void openUrl(String url) {
+        org.openqa.selenium.WebDriver driver = getWebDriver();
+        if (!driver.getCurrentUrl().equals(url)) driver.get(url);
+    }
+
+    @Step
+    public static void browserInit() {
+        getWebDriver();
+    }
+
+    @Step
+    public static void browserClear() {
+        clearBrowserLocalStorage();
+        clearBrowserCookies();
+        refresh();
+    }
+
+    @Step
+    public static void browserQuit() {
+        org.openqa.selenium.WebDriver driver = null;
+        try {
+            driver = WebDriverRunner.getWebDriver();
+        } catch (Throwable ignored) {
+        }
+        if (driver != null) driver.quit();
+    }
+
+    @Step
+    public static void loggerSetup() {
+        SelenideLogger.addListener("AllureSelenide", new AllureSelenide()
+                .screenshots(true)
+                .savePageSource(false));
+    }
+}

+ 21 - 6
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/utilities/WebUtils.java

@@ -7,11 +7,23 @@ import lombok.extern.slf4j.Slf4j;
 import org.openqa.selenium.Keys;
 import org.openqa.selenium.Keys;
 import org.openqa.selenium.interactions.Actions;
 import org.openqa.selenium.interactions.Actions;
 
 
+import java.time.Duration;
+
 import static com.codeborne.selenide.Selenide.executeJavaScript;
 import static com.codeborne.selenide.Selenide.executeJavaScript;
 
 
 @Slf4j
 @Slf4j
 public class WebUtils {
 public class WebUtils {
 
 
+    public static int getTimeout(int... timeoutInSeconds) {
+        return (timeoutInSeconds != null && timeoutInSeconds.length > 0) ? timeoutInSeconds[0] : 4;
+    }
+
+    public static void sendKeysAfterClear(SelenideElement element, String keys) {
+        log.debug("\nsendKeysAfterClear: {} \nsend keys '{}'", element.getSearchCriteria(), keys);
+        element.shouldBe(Condition.enabled).clear();
+        if (keys != null) element.sendKeys(keys);
+    }
+
     public static void clickByActions(SelenideElement element) {
     public static void clickByActions(SelenideElement element) {
         log.debug("\nclickByActions: {}", element.getSearchCriteria());
         log.debug("\nclickByActions: {}", element.getSearchCriteria());
         element.shouldBe(Condition.enabled);
         element.shouldBe(Condition.enabled);
@@ -43,11 +55,12 @@ public class WebUtils {
         field.sendKeys(Keys.chord(Keys.CONTROL + "a"), Keys.DELETE);
         field.sendKeys(Keys.chord(Keys.CONTROL + "a"), Keys.DELETE);
     }
     }
 
 
-    public static boolean isVisible(SelenideElement element) {
+    public static boolean isVisible(SelenideElement element, int... timeoutInSeconds) {
         log.debug("\nisVisible: {}", element.getSearchCriteria());
         log.debug("\nisVisible: {}", element.getSearchCriteria());
         boolean isVisible = false;
         boolean isVisible = false;
         try {
         try {
-            element.shouldBe(Condition.visible);
+            element.shouldBe(Condition.visible,
+                    Duration.ofSeconds(getTimeout(timeoutInSeconds)));
             isVisible = true;
             isVisible = true;
         } catch (Throwable e) {
         } catch (Throwable e) {
             log.debug("{} is not visible", element.getSearchCriteria());
             log.debug("{} is not visible", element.getSearchCriteria());
@@ -55,11 +68,12 @@ public class WebUtils {
         return isVisible;
         return isVisible;
     }
     }
 
 
-    public static boolean isEnabled(SelenideElement element) {
+    public static boolean isEnabled(SelenideElement element, int... timeoutInSeconds) {
         log.debug("\nisEnabled: {}", element.getSearchCriteria());
         log.debug("\nisEnabled: {}", element.getSearchCriteria());
         boolean isEnabled = false;
         boolean isEnabled = false;
         try {
         try {
-            element.shouldBe(Condition.enabled);
+            element.shouldBe(Condition.enabled,
+                    Duration.ofSeconds(getTimeout(timeoutInSeconds)));
             isEnabled = true;
             isEnabled = true;
         } catch (Throwable e) {
         } catch (Throwable e) {
             log.debug("{} is not enabled", element.getSearchCriteria());
             log.debug("{} is not enabled", element.getSearchCriteria());
@@ -67,11 +81,12 @@ public class WebUtils {
         return isEnabled;
         return isEnabled;
     }
     }
 
 
-    public static boolean isSelected(SelenideElement element) {
+    public static boolean isSelected(SelenideElement element, int... timeoutInSeconds) {
         log.debug("\nisSelected: {}", element.getSearchCriteria());
         log.debug("\nisSelected: {}", element.getSearchCriteria());
         boolean isSelected = false;
         boolean isSelected = false;
         try {
         try {
-            element.shouldBe(Condition.selected);
+            element.shouldBe(Condition.selected,
+                    Duration.ofSeconds(getTimeout(timeoutInSeconds)));
             isSelected = true;
             isSelected = true;
         } catch (Throwable e) {
         } catch (Throwable e) {
             log.debug("{} is not selected", element.getSearchCriteria());
             log.debug("{} is not selected", element.getSearchCriteria());

+ 2 - 2
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/variables/Url.java

@@ -1,9 +1,9 @@
 package com.provectus.kafka.ui.variables;
 package com.provectus.kafka.ui.variables;
 
 
 public interface Url {
 public interface Url {
-    
+
     String BROKERS_LIST_URL = "http://%s:8080/ui/clusters/local/brokers";
     String BROKERS_LIST_URL = "http://%s:8080/ui/clusters/local/brokers";
-    String TOPICS_LIST_URL = "http://%s:8080/ui/clusters/local/all-topics?perPage=25";
+    String TOPICS_LIST_URL = "http://%s:8080/ui/clusters/local/all-topics";
     String CONSUMERS_LIST_URL = "http://%s:8080/ui/clusters/local/consumer-groups";
     String CONSUMERS_LIST_URL = "http://%s:8080/ui/clusters/local/consumer-groups";
     String SCHEMA_REGISTRY_LIST_URL = "http://%s:8080/ui/clusters/local/schemas";
     String SCHEMA_REGISTRY_LIST_URL = "http://%s:8080/ui/clusters/local/schemas";
     String KAFKA_CONNECT_LIST_URL = "http://%s:8080/ui/clusters/local/connectors";
     String KAFKA_CONNECT_LIST_URL = "http://%s:8080/ui/clusters/local/connectors";

+ 9 - 74
kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/BaseTest.java

@@ -3,104 +3,40 @@ package com.provectus.kafka.ui;
 import com.codeborne.selenide.Condition;
 import com.codeborne.selenide.Condition;
 import com.codeborne.selenide.Selenide;
 import com.codeborne.selenide.Selenide;
 import com.codeborne.selenide.SelenideElement;
 import com.codeborne.selenide.SelenideElement;
-import com.codeborne.selenide.WebDriverRunner;
 import com.provectus.kafka.ui.settings.listeners.AllureListener;
 import com.provectus.kafka.ui.settings.listeners.AllureListener;
 import com.provectus.kafka.ui.settings.listeners.LoggerListener;
 import com.provectus.kafka.ui.settings.listeners.LoggerListener;
 import com.provectus.kafka.ui.settings.listeners.QaseResultListener;
 import com.provectus.kafka.ui.settings.listeners.QaseResultListener;
 import io.qameta.allure.Step;
 import io.qameta.allure.Step;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.openqa.selenium.Dimension;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.remote.RemoteWebDriver;
-import org.testcontainers.Testcontainers;
-import org.testcontainers.containers.BrowserWebDriverContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.utility.DockerImageName;
 import org.testng.annotations.*;
 import org.testng.annotations.*;
 import org.testng.asserts.SoftAssert;
 import org.testng.asserts.SoftAssert;
 
 
-import java.time.Duration;
 import java.util.List;
 import java.util.List;
 
 
 import static com.provectus.kafka.ui.pages.panels.enums.MenuItem.*;
 import static com.provectus.kafka.ui.pages.panels.enums.MenuItem.*;
-import static com.provectus.kafka.ui.settings.BaseSource.*;
-import static com.provectus.kafka.ui.settings.drivers.LocalWebDriver.*;
+import static com.provectus.kafka.ui.settings.BaseSource.BASE_UI_URL;
+import static com.provectus.kafka.ui.settings.drivers.WebDriver.*;
 import static com.provectus.kafka.ui.utilities.qaseUtils.QaseSetup.qaseIntegrationSetup;
 import static com.provectus.kafka.ui.utilities.qaseUtils.QaseSetup.qaseIntegrationSetup;
-import static com.provectus.kafka.ui.variables.Browser.CONTAINER;
-import static com.provectus.kafka.ui.variables.Browser.LOCAL;
 
 
 @Slf4j
 @Slf4j
 @Listeners({AllureListener.class, LoggerListener.class, QaseResultListener.class})
 @Listeners({AllureListener.class, LoggerListener.class, QaseResultListener.class})
 public abstract class BaseTest extends Facade {
 public abstract 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 BrowserWebDriverContainer<?> webDriverContainer = null;
-
-    private static boolean isARM64() {
-        return System.getProperty("os.arch").equals("aarch64");
-    }
-
     @BeforeSuite(alwaysRun = true)
     @BeforeSuite(alwaysRun = true)
     public void beforeSuite() {
     public void beforeSuite() {
         qaseIntegrationSetup();
         qaseIntegrationSetup();
-        switch (BROWSER) {
-            case (CONTAINER) -> {
-                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=")
-                        .withStartupTimeout(Duration.ofSeconds(180))
-                        .withCapabilities(new ChromeOptions()
-                                .addArguments("--disable-dev-shm-usage")
-                                .addArguments("--disable-gpu")
-                                .addArguments("--no-sandbox")
-                                .addArguments("--verbose")
-                                .addArguments("--lang=es")
-                        )
-                        .withLogConsumer(new Slf4jLogConsumer(log).withPrefix("[CHROME]: "));
-                try {
-                    Testcontainers.exposeHostPorts(8080);
-                    log.info("Starting browser container");
-                    webDriverContainer.start();
-                } catch (Throwable e) {
-                    log.error("Couldn't start a container", e);
-                }
-            }
-            case (LOCAL) -> loggerSetup();
-            default -> throw new IllegalStateException("Unexpected value: " + BROWSER);
-        }
+        loggerSetup();
+        browserSetup();
     }
     }
 
 
     @AfterSuite(alwaysRun = true)
     @AfterSuite(alwaysRun = true)
     public void afterSuite() {
     public void afterSuite() {
-        switch (BROWSER) {
-            case (CONTAINER) -> {
-                if (webDriverContainer.isRunning()) {
-                    webDriverContainer.close();
-                    webDriverContainer.stop();
-                }
-            }
-            case (LOCAL) -> browserQuit();
-            default -> throw new IllegalStateException("Unexpected value: " + BROWSER);
-        }
+        browserQuit();
     }
     }
 
 
     @BeforeMethod(alwaysRun = true)
     @BeforeMethod(alwaysRun = true)
     public void beforeMethod() {
     public void beforeMethod() {
-        switch (BROWSER) {
-            case (CONTAINER) -> {
-                RemoteWebDriver remoteWebDriver = webDriverContainer.getWebDriver();
-                WebDriverRunner.setWebDriver(remoteWebDriver);
-                remoteWebDriver.manage()
-                        .window().setSize(new Dimension(1440, 1024));
-                Selenide.open(BASE_CONTAINER_URL);
-            }
-            case (LOCAL) -> openUrl(BASE_LOCAL_URL);
-            default -> throw new IllegalStateException("Unexpected value: " + BROWSER);
-        }
+        Selenide.open(BASE_UI_URL);
         naviSideBar.waitUntilScreenReady();
         naviSideBar.waitUntilScreenReady();
     }
     }
 
 
@@ -133,15 +69,14 @@ public abstract class BaseTest extends Facade {
         naviSideBar
         naviSideBar
                 .openSideMenu(TOPICS);
                 .openSideMenu(TOPICS);
         topicsList
         topicsList
-                .waitUntilScreenReady();
+                .waitUntilScreenReady()
+                .setShowInternalRadioButton(false);
     }
     }
 
 
     @Step
     @Step
     protected void navigateToTopicsAndOpenDetails(String topicName) {
     protected void navigateToTopicsAndOpenDetails(String topicName) {
-        naviSideBar
-                .openSideMenu(TOPICS);
+        navigateToTopics();
         topicsList
         topicsList
-                .waitUntilScreenReady()
                 .openTopic(topicName);
                 .openTopic(topicName);
         topicDetails
         topicDetails
                 .waitUntilScreenReady();
                 .waitUntilScreenReady();

+ 7 - 7
kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/smokeSuite/SmokeTest.java

@@ -3,10 +3,10 @@ package com.provectus.kafka.ui.smokeSuite;
 import com.codeborne.selenide.Condition;
 import com.codeborne.selenide.Condition;
 import com.codeborne.selenide.WebDriverRunner;
 import com.codeborne.selenide.WebDriverRunner;
 import com.provectus.kafka.ui.BaseTest;
 import com.provectus.kafka.ui.BaseTest;
-import com.provectus.kafka.ui.pages.panels.enums.MenuItem;
 import com.provectus.kafka.ui.models.Connector;
 import com.provectus.kafka.ui.models.Connector;
 import com.provectus.kafka.ui.models.Schema;
 import com.provectus.kafka.ui.models.Schema;
 import com.provectus.kafka.ui.models.Topic;
 import com.provectus.kafka.ui.models.Topic;
+import com.provectus.kafka.ui.pages.panels.enums.MenuItem;
 import io.qameta.allure.Step;
 import io.qameta.allure.Step;
 import io.qase.api.annotation.QaseId;
 import io.qase.api.annotation.QaseId;
 import org.testng.Assert;
 import org.testng.Assert;
@@ -18,9 +18,8 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.stream.Stream;
 
 
 import static com.provectus.kafka.ui.pages.panels.enums.MenuItem.*;
 import static com.provectus.kafka.ui.pages.panels.enums.MenuItem.*;
-import static com.provectus.kafka.ui.settings.BaseSource.BROWSER;
+import static com.provectus.kafka.ui.settings.BaseSource.BASE_HOST;
 import static com.provectus.kafka.ui.utilities.FileUtils.getResourceAsString;
 import static com.provectus.kafka.ui.utilities.FileUtils.getResourceAsString;
-import static com.provectus.kafka.ui.variables.Browser.LOCAL;
 import static com.provectus.kafka.ui.variables.Url.*;
 import static com.provectus.kafka.ui.variables.Url.*;
 import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
 import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
 
 
@@ -73,7 +72,7 @@ public class SmokeTest extends BaseTest {
 
 
     @QaseId(46)
     @QaseId(46)
     @Test
     @Test
-    public void checkComponentsPathWhileNavigating() {
+    public void checkPathWhileNavigating() {
         navigateToBrokersAndOpenDetails(BROKER_ID);
         navigateToBrokersAndOpenDetails(BROKER_ID);
         verifyComponentsPath(BROKERS, String.format("Broker %d", BROKER_ID));
         verifyComponentsPath(BROKERS, String.format("Broker %d", BROKER_ID));
         navigateToTopicsAndOpenDetails(TEST_TOPIC.getName());
         navigateToTopicsAndOpenDetails(TEST_TOPIC.getName());
@@ -86,9 +85,10 @@ public class SmokeTest extends BaseTest {
 
 
     @Step
     @Step
     private void verifyCurrentUrl(String expectedUrl) {
     private void verifyCurrentUrl(String expectedUrl) {
-        String host = BROWSER.equals(LOCAL) ? "localhost" : "host.testcontainers.internal";
-        Assert.assertEquals(WebDriverRunner.getWebDriver().getCurrentUrl(),
-                String.format(expectedUrl, host), "getCurrentUrl()");
+        String urlWithoutParameters = WebDriverRunner.getWebDriver().getCurrentUrl();
+        if (urlWithoutParameters.contains("?"))
+            urlWithoutParameters = urlWithoutParameters.substring(0, urlWithoutParameters.indexOf("?"));
+        Assert.assertEquals(urlWithoutParameters, String.format(expectedUrl, BASE_HOST), "getCurrentUrl()");
     }
     }
 
 
     @Step
     @Step

+ 12 - 0
kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/smokeSuite/ksqlDb/KsqlDbTest.java

@@ -4,10 +4,14 @@ import com.provectus.kafka.ui.BaseTest;
 import com.provectus.kafka.ui.pages.ksqlDb.models.Stream;
 import com.provectus.kafka.ui.pages.ksqlDb.models.Stream;
 import com.provectus.kafka.ui.pages.ksqlDb.models.Table;
 import com.provectus.kafka.ui.pages.ksqlDb.models.Table;
 import io.qase.api.annotation.QaseId;
 import io.qase.api.annotation.QaseId;
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 import org.testng.annotations.Test;
 import org.testng.asserts.SoftAssert;
 import org.testng.asserts.SoftAssert;
 
 
+import java.util.ArrayList;
+import java.util.List;
+
 import static com.provectus.kafka.ui.pages.ksqlDb.enums.KsqlQueryConfig.SHOW_TABLES;
 import static com.provectus.kafka.ui.pages.ksqlDb.enums.KsqlQueryConfig.SHOW_TABLES;
 import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
 import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
 
 
@@ -22,12 +26,15 @@ public class KsqlDbTest extends BaseTest {
     private static final Table SECOND_TABLE = new Table()
     private static final Table SECOND_TABLE = new Table()
             .setName("SECOND_TABLE" + randomAlphabetic(4).toUpperCase())
             .setName("SECOND_TABLE" + randomAlphabetic(4).toUpperCase())
             .setStreamName(STREAM_FOR_CHECK_TABLES.getName());
             .setStreamName(STREAM_FOR_CHECK_TABLES.getName());
+    private static final List<String> TOPIC_NAMES_LIST = new ArrayList<>();
 
 
     @BeforeClass(alwaysRun = true)
     @BeforeClass(alwaysRun = true)
     public void beforeClass() {
     public void beforeClass() {
         apiService
         apiService
                 .createStream(STREAM_FOR_CHECK_TABLES)
                 .createStream(STREAM_FOR_CHECK_TABLES)
                 .createTables(FIRST_TABLE, SECOND_TABLE);
                 .createTables(FIRST_TABLE, SECOND_TABLE);
+        TOPIC_NAMES_LIST.addAll(List.of(STREAM_FOR_CHECK_TABLES.getTopicName(),
+                FIRST_TABLE.getName(), SECOND_TABLE.getName()));
     }
     }
 
 
     @QaseId(41)
     @QaseId(41)
@@ -65,4 +72,9 @@ public class KsqlDbTest extends BaseTest {
         softly.assertFalse(ksqlQueryForm.areResultsVisible(), "areResultsVisible()");
         softly.assertFalse(ksqlQueryForm.areResultsVisible(), "areResultsVisible()");
         softly.assertAll();
         softly.assertAll();
     }
     }
+
+    @AfterClass(alwaysRun = true)
+    public void afterClass() {
+        TOPIC_NAMES_LIST.forEach(topicName -> apiService.deleteTopic(topicName));
+    }
 }
 }

+ 4 - 5
kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/smokeSuite/topics/TopicsTest.java

@@ -3,7 +3,6 @@ package com.provectus.kafka.ui.smokeSuite.topics;
 import com.codeborne.selenide.Condition;
 import com.codeborne.selenide.Condition;
 import com.provectus.kafka.ui.BaseTest;
 import com.provectus.kafka.ui.BaseTest;
 import com.provectus.kafka.ui.models.Topic;
 import com.provectus.kafka.ui.models.Topic;
-import com.provectus.kafka.ui.pages.topics.TopicDetails;
 import io.qameta.allure.Issue;
 import io.qameta.allure.Issue;
 import io.qase.api.annotation.QaseId;
 import io.qase.api.annotation.QaseId;
 import org.testng.Assert;
 import org.testng.Assert;
@@ -17,8 +16,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
 import static com.provectus.kafka.ui.pages.BasePage.AlertHeader.SUCCESS;
 import static com.provectus.kafka.ui.pages.BasePage.AlertHeader.SUCCESS;
-import static com.provectus.kafka.ui.pages.topics.TopicDetails.TopicMenu.MESSAGES;
-import static com.provectus.kafka.ui.pages.topics.TopicDetails.TopicMenu.SETTINGS;
+import static com.provectus.kafka.ui.pages.topics.TopicDetails.TopicMenu.*;
 import static com.provectus.kafka.ui.pages.topics.enums.CleanupPolicyValue.COMPACT;
 import static com.provectus.kafka.ui.pages.topics.enums.CleanupPolicyValue.COMPACT;
 import static com.provectus.kafka.ui.pages.topics.enums.CleanupPolicyValue.DELETE;
 import static com.provectus.kafka.ui.pages.topics.enums.CleanupPolicyValue.DELETE;
 import static com.provectus.kafka.ui.pages.topics.enums.CustomParameterType.COMPRESSION_TYPE;
 import static com.provectus.kafka.ui.pages.topics.enums.CustomParameterType.COMPRESSION_TYPE;
@@ -206,7 +204,7 @@ public class TopicsTest extends BaseTest {
         String consumerGroupId = "connect-sink_postgres_activities";
         String consumerGroupId = "connect-sink_postgres_activities";
         navigateToTopicsAndOpenDetails(topicName);
         navigateToTopicsAndOpenDetails(topicName);
         topicDetails
         topicDetails
-                .openDetailsTab(TopicDetails.TopicMenu.CONSUMERS)
+                .openDetailsTab(CONSUMERS)
                 .openConsumerGroup(consumerGroupId);
                 .openConsumerGroup(consumerGroupId);
         consumersDetails
         consumersDetails
                 .waitUntilScreenReady();
                 .waitUntilScreenReady();
@@ -361,8 +359,9 @@ public class TopicsTest extends BaseTest {
     @Test(priority = 15)
     @Test(priority = 15)
     public void checkShowInternalTopicsButton() {
     public void checkShowInternalTopicsButton() {
         navigateToTopics();
         navigateToTopics();
+        topicsList
+                .setShowInternalRadioButton(true);
         SoftAssert softly = new SoftAssert();
         SoftAssert softly = new SoftAssert();
-        softly.assertTrue(topicsList.isShowInternalRadioBtnSelected(), "isInternalRadioBtnSelected()");
         softly.assertTrue(topicsList.getInternalTopics().size() > 0, "getInternalTopics()");
         softly.assertTrue(topicsList.getInternalTopics().size() > 0, "getInternalTopics()");
         softly.assertTrue(topicsList.getNonInternalTopics().size() > 0, "getNonInternalTopics()");
         softly.assertTrue(topicsList.getNonInternalTopics().size() > 0, "getNonInternalTopics()");
         softly.assertAll();
         softly.assertAll();

+ 1 - 1
kafka-ui-e2e-checks/src/test/resources/manual.xml

@@ -1,6 +1,6 @@
 <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
 <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
 <suite name="ManualSuite">
 <suite name="ManualSuite">
-    <test name="Manual" enabled="true" parallel="classes" thread-count="1">
+    <test name="ManualTest" enabled="true" parallel="classes" thread-count="1">
         <packages>
         <packages>
             <package name="com.provectus.kafka.ui.manualSuite.*"/>
             <package name="com.provectus.kafka.ui.manualSuite.*"/>
         </packages>
         </packages>

+ 1 - 1
kafka-ui-e2e-checks/src/test/resources/qase.xml

@@ -1,6 +1,6 @@
 <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
 <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
 <suite name="QaseSuite">
 <suite name="QaseSuite">
-    <test name="Qase" enabled="true" parallel="classes" thread-count="1">
+    <test name="QaseTest" enabled="true" parallel="classes" thread-count="1">
         <packages>
         <packages>
             <package name="com.provectus.kafka.ui.qaseSuite.*"/>
             <package name="com.provectus.kafka.ui.qaseSuite.*"/>
         </packages>
         </packages>

+ 1 - 1
kafka-ui-e2e-checks/src/test/resources/regression.xml

@@ -1,6 +1,6 @@
 <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
 <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
 <suite name="RegressionSuite">
 <suite name="RegressionSuite">
-    <test name="Regression" enabled="true" parallel="classes" thread-count="1">
+    <test name="RegressionTest" enabled="true" parallel="classes" thread-count="3">
         <packages>
         <packages>
             <package name="com.provectus.kafka.ui.smokeSuite.*"/>
             <package name="com.provectus.kafka.ui.smokeSuite.*"/>
             <package name="com.provectus.kafka.ui.sanitySuite.*"/>
             <package name="com.provectus.kafka.ui.sanitySuite.*"/>

+ 1 - 1
kafka-ui-e2e-checks/src/test/resources/sanity.xml

@@ -1,6 +1,6 @@
 <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
 <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
 <suite name="SanitySuite">
 <suite name="SanitySuite">
-    <test name="Sanity" enabled="true" parallel="classes" thread-count="1">
+    <test name="SanityTest" enabled="true" parallel="classes" thread-count="3">
         <packages>
         <packages>
             <package name="com.provectus.kafka.ui.sanitySuite.*"/>
             <package name="com.provectus.kafka.ui.sanitySuite.*"/>
         </packages>
         </packages>

+ 1 - 1
kafka-ui-e2e-checks/src/test/resources/smoke.xml

@@ -1,6 +1,6 @@
 <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
 <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
 <suite name="SmokeSuite">
 <suite name="SmokeSuite">
-    <test name="Smoke" enabled="true" parallel="classes" thread-count="1">
+    <test name="SmokeTest" enabled="true" parallel="classes" thread-count="3">
         <packages>
         <packages>
             <package name="com.provectus.kafka.ui.smokeSuite.*"/>
             <package name="com.provectus.kafka.ui.smokeSuite.*"/>
         </packages>
         </packages>