Create navigation thru the app using web driver (#2701)

* [e2e] create navigation thru the app using web driver #2642

* [e2e]Fix create navigation thru the app using web driver #2642

* [e2e]Fix create navigation thru the app using web driver #2642

* [e2e]Fix2 create navigation thru the app using web driver #2642

* [e2e]Fix3 create navigation thru the app using web driver #2642

* [e2e]Fix4 create navigation thru the app using web driver #2642

* [e2e]Fix5 create navigation thru the app using web driver #2642

* [e2e]Fix6 create navigation thru the app using web driver #2642

* [e2e]Fix7 create navigation thru the app using web driver #2642

Co-authored-by: Vlad Senyuta <66071557+VladSenyuta@users.noreply.github.com>
This commit is contained in:
Arthur 2022-10-07 15:01:58 +03:00 committed by GitHub
parent 6dff8f105e
commit 67eea972f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 235 additions and 154 deletions

View file

@ -1,50 +1,25 @@
package com.provectus.kafka.ui.pages; package com.provectus.kafka.ui.pages;
import com.codeborne.selenide.Condition; import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement; 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 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.codeborne.selenide.Selenide.$x;
import static com.provectus.kafka.ui.settings.Source.CLUSTER_NAME;
@ExtensionMethod({WaitUtils.class}) public class NaviSideBar {
public class MainPage {
private static final String path = "/";
@Step @Step
public MainPage goTo() { public NaviSideBar waitUntilScreenReady() {
Selenide.open(Source.BASE_WEB_URL + path); $x("//*[contains(text(),'Loading')]").shouldBe(Condition.disappear, Duration.ofSeconds(30));
$x("//a[@title='Dashboard']").shouldBe(Condition.visible, Duration.ofSeconds(30));
return this; return this;
} }
@Step @Step
public MainPage waitUntilScreenReady() { public NaviSideBar openSideMenu(String clusterName, SideMenuOption option) {
$(By.xpath("//*[contains(text(),'Loading')]")).shouldBe(Condition.disappear);
$("input[name=switchRoundedDefault]").parent().$("span").shouldBe(Condition.visible);
return this;
}
public enum SideMenuOptions {
BROKERS("Brokers"),
TOPICS("Topics"),
CONSUMERS("Consumers"),
SCHEMA_REGISTRY("Schema Registry");
final String value;
SideMenuOptions(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); SelenideElement clusterElement = $x(String.format("//aside/ul/li[contains(.,'%s')]", clusterName)).shouldBe(Condition.visible);
if (clusterElement.parent().$$x(".//ul").size() == 0) { if (clusterElement.parent().$$x(".//ul").size() == 0) {
clusterElement.click(); clusterElement.click();
@ -55,4 +30,26 @@ public class MainPage {
.click(); .click();
return this; return this;
} }
}
@Step
public NaviSideBar openSideMenu(SideMenuOption option) {
openSideMenu(CLUSTER_NAME, option);
return this;
}
public enum SideMenuOption {
BROKERS("Brokers"),
TOPICS("Topics"),
CONSUMERS("Consumers"),
SCHEMA_REGISTRY("Schema Registry"),
KAFKA_CONNECT("Kafka Connect"),
KSQL_DB("KSQL DB");
final String value;
SideMenuOption(String value) {
this.value = value;
}
}
}

View file

@ -1,8 +1,6 @@
package com.provectus.kafka.ui.pages.connector; package com.provectus.kafka.ui.pages.connector;
import com.codeborne.selenide.Condition; 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 com.provectus.kafka.ui.utilities.WaitUtils;
import io.qameta.allure.Step; import io.qameta.allure.Step;
import lombok.experimental.ExtensionMethod; import lombok.experimental.ExtensionMethod;
@ -16,14 +14,6 @@ import static com.provectus.kafka.ui.utilities.WebUtils.isVisible;
@ExtensionMethod(WaitUtils.class) @ExtensionMethod(WaitUtils.class)
public class KafkaConnectList { 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 @Step
public KafkaConnectList waitUntilScreenReady() { public KafkaConnectList waitUntilScreenReady() {
$(By.xpath("//h1[text()='Connectors']")).shouldBe(Condition.visible); $(By.xpath("//h1[text()='Connectors']")).shouldBe(Condition.visible);

View file

@ -1,5 +1,6 @@
package com.provectus.kafka.ui.pages.schema; package com.provectus.kafka.ui.pages.schema;
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.provectus.kafka.ui.api.model.CompatibilityLevel; import com.provectus.kafka.ui.api.model.CompatibilityLevel;
@ -20,6 +21,12 @@ public class SchemaCreateForm {
protected SelenideElement newSchemaTextArea = $("#newSchema [wrap]"); protected SelenideElement newSchemaTextArea = $("#newSchema [wrap]");
protected SelenideElement schemaTypeDropDown = $x("//ul[@name='schemaType']"); protected SelenideElement schemaTypeDropDown = $x("//ul[@name='schemaType']");
@Step
public SchemaCreateForm waitUntilScreenReady() {
$x("//h1['Edit']").shouldBe(Condition.visible);
return this;
}
@Step @Step
public SchemaCreateForm setSubjectName(String name) { public SchemaCreateForm setSubjectName(String name) {
subjectName.setValue(name); subjectName.setValue(name);

View file

@ -14,6 +14,13 @@ public class SchemaRegistryList {
private final SelenideElement schemaButton = $(By.xpath("//*[contains(text(),'Create Schema')]")); 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 @Step
public SchemaCreateForm clickCreateSchema() { public SchemaCreateForm clickCreateSchema() {
clickByJavaScript(schemaButton); clickByJavaScript(schemaButton);

View file

@ -43,6 +43,6 @@ public class ProduceMessagePanel {
submitBtn.shouldBe(Condition.enabled).click(); submitBtn.shouldBe(Condition.enabled).click();
submitBtn.shouldBe(Condition.disappear); submitBtn.shouldBe(Condition.disappear);
refresh(); refresh();
return new TopicDetails().waitUntilScreenReady(); return new TopicDetails();
} }
} }

View file

@ -1,9 +1,7 @@
package com.provectus.kafka.ui.pages.topic; package com.provectus.kafka.ui.pages.topic;
import com.codeborne.selenide.Condition; import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement; import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.settings.Source;
import com.provectus.kafka.ui.utilities.WaitUtils; import com.provectus.kafka.ui.utilities.WaitUtils;
import io.qameta.allure.Step; import io.qameta.allure.Step;
import lombok.experimental.ExtensionMethod; import lombok.experimental.ExtensionMethod;
@ -15,15 +13,8 @@ import static com.provectus.kafka.ui.utilities.WebUtils.clickByJavaScript;
@ExtensionMethod({WaitUtils.class}) @ExtensionMethod({WaitUtils.class})
public class TopicDetails { public class TopicDetails {
private static final String URL_PATH = "/ui/clusters/%s/topics/%s";
protected SelenideElement dotMenuBtn = $$x("//button[@aria-label='Dropdown Toggle']").first(); 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 @Step
public TopicDetails waitUntilScreenReady() { public TopicDetails waitUntilScreenReady() {
$(By.linkText("Overview")).shouldBe(Condition.visible); $(By.linkText("Overview")).shouldBe(Condition.visible);
@ -70,7 +61,9 @@ public class TopicDetails {
} }
private enum DotMenuHeaderItems { 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; private final String value;
@ -89,7 +82,10 @@ public class TopicDetails {
} }
public enum TopicMenu { public enum TopicMenu {
OVERVIEW("Overview"), MESSAGES("Messages"), CONSUMERS("Consumers"), SETTINGS("Settings"); OVERVIEW("Overview"),
MESSAGES("Messages"),
CONSUMERS("Consumers"),
SETTINGS("Settings");
private final String value; private final String value;

View file

@ -1,29 +1,19 @@
package com.provectus.kafka.ui.pages.topic; package com.provectus.kafka.ui.pages.topic;
import com.codeborne.selenide.CollectionCondition;
import com.codeborne.selenide.Condition; 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 com.provectus.kafka.ui.utilities.WaitUtils;
import io.qameta.allure.Step; import io.qameta.allure.Step;
import lombok.experimental.ExtensionMethod; import lombok.experimental.ExtensionMethod;
import org.openqa.selenium.By; 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.clickByJavaScript;
import static com.provectus.kafka.ui.utilities.WebUtils.isVisible; import static com.provectus.kafka.ui.utilities.WebUtils.isVisible;
@ExtensionMethod(WaitUtils.class) @ExtensionMethod(WaitUtils.class)
public class TopicsList { 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 @Step
public TopicsList waitUntilScreenReady() { public TopicsList waitUntilScreenReady() {
$(By.xpath("//*[contains(text(),'Loading')]")).shouldBe(Condition.disappear); $(By.xpath("//*[contains(text(),'Loading')]")).shouldBe(Condition.disappear);
@ -48,14 +38,4 @@ public class TopicsList {
$(By.linkText(topicName)).click(); $(By.linkText(topicName)).click();
return new TopicDetails(); 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;
}
} }

View file

@ -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_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 String BASE_WEB_URL = System.getProperty("BASE_DOCKER_URL", "http://host.testcontainers.internal:8080");
public static final String CLUSTER_NAME = "local";
} }

View file

@ -14,8 +14,6 @@ public class SmokeTests extends BaseTest {
@CaseId(198) @CaseId(198)
@DisplayName("main page should load") @DisplayName("main page should load")
void mainPageLoads() { void mainPageLoads() {
mainPage.goTo()
.waitUntilScreenReady();
compareScreenshots("main"); compareScreenshots("main");
} }
} }

View file

@ -1,5 +1,7 @@
package com.provectus.kafka.ui.base; package com.provectus.kafka.ui.base;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.WebDriverRunner; import com.codeborne.selenide.WebDriverRunner;
import com.provectus.kafka.ui.utilities.qaseIoUtils.DisplayNameGenerator; import com.provectus.kafka.ui.utilities.qaseIoUtils.DisplayNameGenerator;
import com.provectus.kafka.ui.utilities.qaseIoUtils.TestCaseGenerator; import com.provectus.kafka.ui.utilities.qaseIoUtils.TestCaseGenerator;
@ -22,9 +24,10 @@ import org.testcontainers.utility.DockerImageName;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.File; import java.io.File;
import java.io.IOException; 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.*;
import static com.provectus.kafka.ui.base.Setup.setup; import static com.provectus.kafka.ui.settings.Source.BASE_WEB_URL;
@Slf4j @Slf4j
@DisplayNameGeneration(DisplayNameGenerator.class) @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 SELENIUM_IMAGE_NAME = "selenium/standalone-chrome:103.0";
private static final String SELENIARM_STANDALONE_CHROMIUM = "seleniarm/standalone-chromium: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(); private final Screenshooter screenshooter = new Screenshooter();
protected static BrowserWebDriverContainer<?> webDriverContainer = null; protected static BrowserWebDriverContainer<?> webDriverContainer = null;
@ -55,6 +56,8 @@ public class BaseTest extends Facade {
RemoteWebDriver remoteWebDriver = webDriverContainer.getWebDriver(); RemoteWebDriver remoteWebDriver = webDriverContainer.getWebDriver();
WebDriverRunner.setWebDriver(remoteWebDriver); WebDriverRunner.setWebDriver(remoteWebDriver);
remoteWebDriver.manage().window().setSize(new Dimension(1440, 1024)); remoteWebDriver.manage().window().setSize(new Dimension(1440, 1024));
Selenide.open(BASE_WEB_URL);
naviSideBar.waitUntilScreenReady();
} }
@BeforeAll @BeforeAll
@ -118,5 +121,6 @@ public class BaseTest extends Facade {
Allure.addAttachment("Screenshot", Allure.addAttachment("Screenshot",
new ByteArrayInputStream( new ByteArrayInputStream(
((TakesScreenshot) webDriverContainer.getWebDriver()).getScreenshotAs(OutputType.BYTES))); ((TakesScreenshot) webDriverContainer.getWebDriver()).getScreenshotAs(OutputType.BYTES)));
browserClear();
} }
} }

View file

@ -1,7 +1,7 @@
package com.provectus.kafka.ui.base; package com.provectus.kafka.ui.base;
import com.provectus.kafka.ui.helpers.ApiHelper; 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.ConnectorCreateForm;
import com.provectus.kafka.ui.pages.connector.ConnectorDetails; import com.provectus.kafka.ui.pages.connector.ConnectorDetails;
import com.provectus.kafka.ui.pages.connector.KafkaConnectList; import com.provectus.kafka.ui.pages.connector.KafkaConnectList;
@ -14,7 +14,6 @@ import com.provectus.kafka.ui.pages.topic.TopicDetails;
import com.provectus.kafka.ui.pages.topic.TopicsList; import com.provectus.kafka.ui.pages.topic.TopicsList;
public abstract class Facade { public abstract class Facade {
protected MainPage mainPage = new MainPage();
protected ApiHelper apiHelper = new ApiHelper(); protected ApiHelper apiHelper = new ApiHelper();
protected ConnectorCreateForm connectorCreateForm = new ConnectorCreateForm(); protected ConnectorCreateForm connectorCreateForm = new ConnectorCreateForm();
protected KafkaConnectList kafkaConnectList = new KafkaConnectList(); protected KafkaConnectList kafkaConnectList = new KafkaConnectList();
@ -26,4 +25,5 @@ public abstract class Facade {
protected TopicCreateEditForm topicCreateEditForm = new TopicCreateEditForm(); protected TopicCreateEditForm topicCreateEditForm = new TopicCreateEditForm();
protected TopicsList topicsList = new TopicsList(); protected TopicsList topicsList = new TopicsList();
protected TopicDetails topicDetails = new TopicDetails(); protected TopicDetails topicDetails = new TopicDetails();
protected NaviSideBar naviSideBar = new NaviSideBar();
} }

View file

@ -2,13 +2,19 @@ package com.provectus.kafka.ui.base;
import com.codeborne.selenide.Configuration; import com.codeborne.selenide.Configuration;
import com.codeborne.selenide.logevents.SelenideLogger; import com.codeborne.selenide.logevents.SelenideLogger;
import io.qameta.allure.Step;
import io.qameta.allure.selenide.AllureSelenide; import io.qameta.allure.selenide.AllureSelenide;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import java.io.File; import java.io.File;
import java.util.Arrays; import java.util.Arrays;
import static com.codeborne.selenide.Selenide.*;
import static com.provectus.kafka.ui.settings.Source.BASE_WEB_URL;
@Slf4j @Slf4j
public abstract class Setup { public abstract class Setup {
@ -38,4 +44,13 @@ public abstract class Setup {
} }
} }
} }
@Step
public static void browserClear() {
log.debug("browserClear");
clearBrowserLocalStorage();
clearBrowserCookies();
refresh();
log.debug("=> DONE");
}
} }

View file

@ -12,6 +12,8 @@ import org.junit.jupiter.api.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; 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; import static com.provectus.kafka.ui.utilities.FileUtils.getResourceAsString;
@TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestInstance(TestInstance.Lifecycle.PER_CLASS)
@ -60,14 +62,19 @@ public class ConnectorsTests extends BaseTest {
Connector connectorForCreate = new Connector() Connector connectorForCreate = new Connector()
.setName("sink_postgres_activities_e2e_checks") .setName("sink_postgres_activities_e2e_checks")
.setConfig(getResourceAsString("config_for_create_connector.json")); .setConfig(getResourceAsString("config_for_create_connector.json"));
kafkaConnectList.goTo(CLUSTER_NAME) naviSideBar
.openSideMenu(KAFKA_CONNECT);
kafkaConnectList
.waitUntilScreenReady() .waitUntilScreenReady()
.clickCreateConnectorButton() .clickCreateConnectorButton();
connectorCreateForm
.waitUntilScreenReady() .waitUntilScreenReady()
.setConnectorConfig(connectorForCreate.getName(), connectorForCreate.getConfig()); .setConnectorConfig(connectorForCreate.getName(), connectorForCreate.getConfig());
kafkaConnectList.goTo(CLUSTER_NAME) naviSideBar
.openSideMenu(KAFKA_CONNECT);
kafkaConnectList
.waitUntilScreenReady(); .waitUntilScreenReady();
Assertions.assertTrue(kafkaConnectList.isConnectorVisible(connectorForCreate.getName()),"isConnectorVisible()"); Assertions.assertTrue(kafkaConnectList.isConnectorVisible(connectorForCreate.getName()), "isConnectorVisible()");
CONNECTOR_LIST.add(connectorForCreate); CONNECTOR_LIST.add(connectorForCreate);
} }
@ -77,14 +84,20 @@ public class ConnectorsTests extends BaseTest {
@CaseId(196) @CaseId(196)
@Test @Test
public void updateConnector() { public void updateConnector() {
kafkaConnectList.goTo(CLUSTER_NAME) naviSideBar
.openSideMenu(KAFKA_CONNECT);
kafkaConnectList
.waitUntilScreenReady() .waitUntilScreenReady()
.openConnector(CONNECTOR_FOR_UPDATE.getName()); .openConnector(CONNECTOR_FOR_UPDATE.getName());
connectorDetails.waitUntilScreenReady() connectorDetails
.waitUntilScreenReady()
.openConfigTab() .openConfigTab()
.setConfig(CONNECTOR_FOR_UPDATE.getConfig()); .setConfig(CONNECTOR_FOR_UPDATE.getConfig());
kafkaConnectList.goTo(CLUSTER_NAME); naviSideBar
Assertions.assertTrue(kafkaConnectList.isConnectorVisible(CONNECTOR_FOR_UPDATE.getName()),"isConnectorVisible()"); .openSideMenu(KAFKA_CONNECT);
kafkaConnectList
.waitUntilScreenReady();
Assertions.assertTrue(kafkaConnectList.isConnectorVisible(CONNECTOR_FOR_UPDATE.getName()), "isConnectorVisible()");
} }
@DisplayName("should delete connector") @DisplayName("should delete connector")
@ -93,7 +106,9 @@ public class ConnectorsTests extends BaseTest {
@CaseId(195) @CaseId(195)
@Test @Test
public void deleteConnector() { public void deleteConnector() {
kafkaConnectList.goTo(CLUSTER_NAME) naviSideBar
.openSideMenu(KAFKA_CONNECT);
kafkaConnectList
.waitUntilScreenReady() .waitUntilScreenReady()
.openConnector(CONNECTOR_FOR_DELETE.getName()); .openConnector(CONNECTOR_FOR_DELETE.getName());
connectorDetails connectorDetails
@ -101,7 +116,10 @@ public class ConnectorsTests extends BaseTest {
.openDotMenu() .openDotMenu()
.clickDeleteButton() .clickDeleteButton()
.clickConfirmButton(); .clickConfirmButton();
kafkaConnectList.goTo(CLUSTER_NAME); naviSideBar
.openSideMenu(KAFKA_CONNECT);
kafkaConnectList
.waitUntilScreenReady();
Assertions.assertFalse(kafkaConnectList.isConnectorVisible(CONNECTOR_FOR_DELETE.getName()), "isConnectorVisible()"); Assertions.assertFalse(kafkaConnectList.isConnectorVisible(CONNECTOR_FOR_DELETE.getName()), "isConnectorVisible()");
CONNECTOR_LIST.remove(CONNECTOR_FOR_DELETE); CONNECTOR_LIST.remove(CONNECTOR_FOR_DELETE);
} }

View file

@ -3,8 +3,6 @@ package com.provectus.kafka.ui.tests;
import com.provectus.kafka.ui.api.model.CompatibilityLevel; import com.provectus.kafka.ui.api.model.CompatibilityLevel;
import com.provectus.kafka.ui.base.BaseTest; import com.provectus.kafka.ui.base.BaseTest;
import com.provectus.kafka.ui.models.Schema; 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.AutomationStatus;
import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.Suite; import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.Suite;
import com.provectus.kafka.ui.utilities.qaseIoUtils.enums.Status; import com.provectus.kafka.ui.utilities.qaseIoUtils.enums.Status;
@ -15,6 +13,8 @@ import org.junit.jupiter.api.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; 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; import static com.provectus.kafka.ui.utilities.FileUtils.fileToString;
@TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestInstance(TestInstance.Lifecycle.PER_CLASS)
@ -42,16 +42,22 @@ public class SchemasTests extends BaseTest {
@Order(1) @Order(1)
void createSchemaAvro() { void createSchemaAvro() {
Schema schemaAvro = Schema.createSchemaAvro(); Schema schemaAvro = Schema.createSchemaAvro();
mainPage.goTo() naviSideBar
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .openSideMenu(SCHEMA_REGISTRY);
schemaRegistryList.clickCreateSchema() schemaRegistryList
.waitUntilScreenReady()
.clickCreateSchema();
schemaCreateForm
.setSubjectName(schemaAvro.getName()) .setSubjectName(schemaAvro.getName())
.setSchemaField(fileToString(schemaAvro.getValuePath())) .setSchemaField(fileToString(schemaAvro.getValuePath()))
.selectSchemaTypeFromDropdown(schemaAvro.getType()) .selectSchemaTypeFromDropdown(schemaAvro.getType())
.clickSubmit() .clickSubmit();
schemaDetails
.waitUntilScreenReady();
naviSideBar
.openSideMenu(SCHEMA_REGISTRY);
schemaRegistryList
.waitUntilScreenReady(); .waitUntilScreenReady();
mainPage.goTo()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaAvro.getName()),"isSchemaVisible()"); Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaAvro.getName()),"isSchemaVisible()");
SCHEMA_LIST.add(schemaAvro); SCHEMA_LIST.add(schemaAvro);
} }
@ -64,17 +70,24 @@ public class SchemasTests extends BaseTest {
@Order(2) @Order(2)
void updateSchemaAvro() { void updateSchemaAvro() {
AVRO_API.setValuePath(System.getProperty("user.dir") + "/src/main/resources/testData/schema_avro_for_update.json"); AVRO_API.setValuePath(System.getProperty("user.dir") + "/src/main/resources/testData/schema_avro_for_update.json");
mainPage.goTo() naviSideBar
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .openSideMenu(SCHEMA_REGISTRY);
schemaRegistryList.openSchema(AVRO_API.getName()) schemaRegistryList
.waitUntilScreenReady()
.openSchema(AVRO_API.getName());
schemaDetails
.waitUntilScreenReady() .waitUntilScreenReady()
.openEditSchema(); .openEditSchema();
Assertions.assertTrue(schemaCreateForm.isSchemaDropDownDisabled(),"isSchemaDropDownDisabled()"); schemaCreateForm
schemaCreateForm.selectCompatibilityLevelFromDropdown(CompatibilityLevel.CompatibilityEnum.NONE)
.setNewSchemaValue(fileToString(AVRO_API.getValuePath()))
.clickSubmit()
.waitUntilScreenReady(); .waitUntilScreenReady();
Assertions.assertEquals(CompatibilityLevel.CompatibilityEnum.NONE.toString(), new SchemaDetails().getCompatibility(), "getCompatibility()"); Assertions.assertTrue(schemaCreateForm.isSchemaDropDownDisabled(),"isSchemaDropDownDisabled()");
schemaCreateForm
.selectCompatibilityLevelFromDropdown(CompatibilityLevel.CompatibilityEnum.NONE)
.setNewSchemaValue(fileToString(AVRO_API.getValuePath()))
.clickSubmit();
schemaDetails
.waitUntilScreenReady();
Assertions.assertEquals(CompatibilityLevel.CompatibilityEnum.NONE.toString(), schemaDetails.getCompatibility(), "getCompatibility()");
} }
@DisplayName("should delete AVRO schema") @DisplayName("should delete AVRO schema")
@ -84,11 +97,16 @@ public class SchemasTests extends BaseTest {
@Test @Test
@Order(3) @Order(3)
void deleteSchemaAvro() { void deleteSchemaAvro() {
mainPage.goTo() naviSideBar
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .openSideMenu(SCHEMA_REGISTRY);
schemaRegistryList.openSchema(AVRO_API.getName()) schemaRegistryList
.waitUntilScreenReady()
.openSchema(AVRO_API.getName());
schemaDetails
.waitUntilScreenReady() .waitUntilScreenReady()
.removeSchema(); .removeSchema();
schemaRegistryList
.waitUntilScreenReady();
Assertions.assertFalse(schemaRegistryList.isSchemaVisible(AVRO_API.getName()),"isSchemaVisible()"); Assertions.assertFalse(schemaRegistryList.isSchemaVisible(AVRO_API.getName()),"isSchemaVisible()");
SCHEMA_LIST.remove(AVRO_API); SCHEMA_LIST.remove(AVRO_API);
} }
@ -101,15 +119,22 @@ public class SchemasTests extends BaseTest {
@Order(4) @Order(4)
void createSchemaJson() { void createSchemaJson() {
Schema schemaJson = Schema.createSchemaJson(); Schema schemaJson = Schema.createSchemaJson();
mainPage.goTo() naviSideBar
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .openSideMenu(SCHEMA_REGISTRY);
schemaRegistryList.clickCreateSchema() schemaRegistryList
.waitUntilScreenReady()
.clickCreateSchema();
schemaCreateForm
.setSubjectName(schemaJson.getName()) .setSubjectName(schemaJson.getName())
.setSchemaField(fileToString(schemaJson.getValuePath())) .setSchemaField(fileToString(schemaJson.getValuePath()))
.selectSchemaTypeFromDropdown(schemaJson.getType()) .selectSchemaTypeFromDropdown(schemaJson.getType())
.clickSubmit() .clickSubmit();
schemaDetails
.waitUntilScreenReady();
naviSideBar
.openSideMenu(SCHEMA_REGISTRY);
schemaRegistryList
.waitUntilScreenReady(); .waitUntilScreenReady();
mainPage.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaJson.getName()),"isSchemaVisible()"); Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaJson.getName()),"isSchemaVisible()");
SCHEMA_LIST.add(schemaJson); SCHEMA_LIST.add(schemaJson);
} }
@ -121,11 +146,16 @@ public class SchemasTests extends BaseTest {
@Test @Test
@Order(5) @Order(5)
void deleteSchemaJson() { void deleteSchemaJson() {
mainPage.goTo() naviSideBar
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .openSideMenu(SCHEMA_REGISTRY);
schemaRegistryList.openSchema(JSON_API.getName()) schemaRegistryList
.waitUntilScreenReady()
.openSchema(JSON_API.getName());
schemaDetails
.waitUntilScreenReady() .waitUntilScreenReady()
.removeSchema(); .removeSchema();
schemaRegistryList
.waitUntilScreenReady();
Assertions.assertFalse(schemaRegistryList.isSchemaVisible(JSON_API.getName()),"isSchemaVisible()"); Assertions.assertFalse(schemaRegistryList.isSchemaVisible(JSON_API.getName()),"isSchemaVisible()");
SCHEMA_LIST.remove(JSON_API); SCHEMA_LIST.remove(JSON_API);
} }
@ -138,15 +168,22 @@ public class SchemasTests extends BaseTest {
@Order(6) @Order(6)
void createSchemaProtobuf() { void createSchemaProtobuf() {
Schema schemaProtobuf = Schema.createSchemaProtobuf(); Schema schemaProtobuf = Schema.createSchemaProtobuf();
mainPage.goTo() naviSideBar
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .openSideMenu(SCHEMA_REGISTRY);
schemaRegistryList.clickCreateSchema() schemaRegistryList
.waitUntilScreenReady()
.clickCreateSchema();
schemaCreateForm
.setSubjectName(schemaProtobuf.getName()) .setSubjectName(schemaProtobuf.getName())
.setSchemaField(fileToString(schemaProtobuf.getValuePath())) .setSchemaField(fileToString(schemaProtobuf.getValuePath()))
.selectSchemaTypeFromDropdown(schemaProtobuf.getType()) .selectSchemaTypeFromDropdown(schemaProtobuf.getType())
.clickSubmit() .clickSubmit();
schemaDetails
.waitUntilScreenReady();
naviSideBar
.openSideMenu(SCHEMA_REGISTRY);
schemaRegistryList
.waitUntilScreenReady(); .waitUntilScreenReady();
mainPage.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaProtobuf.getName()),"isSchemaVisible()"); Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaProtobuf.getName()),"isSchemaVisible()");
SCHEMA_LIST.add(schemaProtobuf); SCHEMA_LIST.add(schemaProtobuf);
} }
@ -158,11 +195,16 @@ public class SchemasTests extends BaseTest {
@Test @Test
@Order(7) @Order(7)
void deleteSchemaProtobuf() { void deleteSchemaProtobuf() {
mainPage.goTo() naviSideBar
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .openSideMenu(SCHEMA_REGISTRY);
schemaRegistryList.openSchema(PROTOBUF_API.getName()) schemaRegistryList
.waitUntilScreenReady()
.openSchema(PROTOBUF_API.getName());
schemaDetails
.waitUntilScreenReady() .waitUntilScreenReady()
.removeSchema(); .removeSchema();
schemaRegistryList
.waitUntilScreenReady();
Assertions.assertFalse(schemaRegistryList.isSchemaVisible(PROTOBUF_API.getName()),"isSchemaVisible()"); Assertions.assertFalse(schemaRegistryList.isSchemaVisible(PROTOBUF_API.getName()),"isSchemaVisible()");
SCHEMA_LIST.remove(PROTOBUF_API); SCHEMA_LIST.remove(PROTOBUF_API);
} }

View file

@ -2,7 +2,6 @@ package com.provectus.kafka.ui.tests;
import com.provectus.kafka.ui.base.BaseTest; import com.provectus.kafka.ui.base.BaseTest;
import com.provectus.kafka.ui.models.Topic; 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.pages.topic.TopicDetails;
import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.AutomationStatus; 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.annotations.Suite;
@ -14,6 +13,8 @@ import org.junit.jupiter.api.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; 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; import static com.provectus.kafka.ui.utilities.FileUtils.fileToString;
@TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestInstance(TestInstance.Lifecycle.PER_CLASS)
@ -44,15 +45,21 @@ public class TopicTests extends BaseTest {
@Test @Test
public void createTopic() { public void createTopic() {
Topic topicToCreate = new Topic().setName("new-topic"); Topic topicToCreate = new Topic().setName("new-topic");
mainPage.goTo() naviSideBar
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.TOPICS); .openSideMenu(TOPICS);
topicsList.pressCreateNewTopic() topicsList
.waitUntilScreenReady()
.pressCreateNewTopic();
topicCreateEditForm
.setTopicName(topicToCreate.getName()) .setTopicName(topicToCreate.getName())
.sendData() .sendData();
topicDetails
.waitUntilScreenReady(); .waitUntilScreenReady();
mainPage.goTo() naviSideBar
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.TOPICS); .openSideMenu(TOPICS);
Assertions.assertTrue(topicsList.isTopicVisible(topicToCreate.getName()),"isTopicVisible"); topicsList
.waitUntilScreenReady();
Assertions.assertTrue(topicsList.isTopicVisible(topicToCreate.getName()), "isTopicVisible");
TOPIC_LIST.add(topicToCreate); TOPIC_LIST.add(topicToCreate);
} }
@ -63,21 +70,29 @@ public class TopicTests extends BaseTest {
@CaseId(197) @CaseId(197)
@Test @Test
public void updateTopic() { public void updateTopic() {
topicsList.goTo(CLUSTER_NAME) naviSideBar
.waitUntilScreenReady(); .openSideMenu(TOPICS);
topicsList.openTopic(TOPIC_FOR_UPDATE.getName()) topicsList
.waitUntilScreenReady() .waitUntilScreenReady()
.openEditSettings() .openTopic(TOPIC_FOR_UPDATE.getName());
topicDetails
.waitUntilScreenReady()
.openEditSettings();
topicCreateEditForm
.selectCleanupPolicy(TOPIC_FOR_UPDATE.getCompactPolicyValue()) .selectCleanupPolicy(TOPIC_FOR_UPDATE.getCompactPolicyValue())
.setMinInsyncReplicas(10) .setMinInsyncReplicas(10)
.setTimeToRetainDataInMs(TOPIC_FOR_UPDATE.getTimeToRetainData()) .setTimeToRetainDataInMs(TOPIC_FOR_UPDATE.getTimeToRetainData())
.setMaxSizeOnDiskInGB(TOPIC_FOR_UPDATE.getMaxSizeOnDisk()) .setMaxSizeOnDiskInGB(TOPIC_FOR_UPDATE.getMaxSizeOnDisk())
.setMaxMessageBytes(TOPIC_FOR_UPDATE.getMaxMessageBytes()) .setMaxMessageBytes(TOPIC_FOR_UPDATE.getMaxMessageBytes())
.sendData() .sendData();
topicDetails
.waitUntilScreenReady(); .waitUntilScreenReady();
topicsList.goTo(CLUSTER_NAME) naviSideBar
.waitUntilScreenReady(); .openSideMenu(TOPICS);
topicsList.openTopic(TOPIC_FOR_UPDATE.getName()) topicsList
.waitUntilScreenReady()
.openTopic(TOPIC_FOR_UPDATE.getName());
topicDetails
.waitUntilScreenReady() .waitUntilScreenReady()
.openEditSettings(); .openEditSettings();
SoftAssertions softly = new SoftAssertions(); SoftAssertions softly = new SoftAssertions();
@ -94,14 +109,19 @@ public class TopicTests extends BaseTest {
@CaseId(207) @CaseId(207)
@Test @Test
public void deleteTopic() { public void deleteTopic() {
topicsList.goTo(CLUSTER_NAME) naviSideBar
.openSideMenu(TOPICS);
topicsList
.waitUntilScreenReady() .waitUntilScreenReady()
.openTopic(TOPIC_FOR_DELETE.getName()) .openTopic(TOPIC_FOR_DELETE.getName());
topicDetails
.waitUntilScreenReady() .waitUntilScreenReady()
.deleteTopic(); .deleteTopic();
topicsList.goTo(CLUSTER_NAME) naviSideBar
.openSideMenu(TOPICS);
topicsList
.waitUntilScreenReady(); .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); TOPIC_LIST.remove(TOPIC_FOR_DELETE);
} }
@ -111,15 +131,21 @@ public class TopicTests extends BaseTest {
@CaseId(222) @CaseId(222)
@Test @Test
void produceMessage() { void produceMessage() {
topicsList.goTo(CLUSTER_NAME) naviSideBar
.openSideMenu(TOPICS);
topicsList
.waitUntilScreenReady() .waitUntilScreenReady()
.openTopic(TOPIC_FOR_UPDATE.getName()) .openTopic(TOPIC_FOR_UPDATE.getName());
topicDetails
.waitUntilScreenReady() .waitUntilScreenReady()
.openTopicMenu(TopicDetails.TopicMenu.MESSAGES) .openTopicMenu(TopicDetails.TopicMenu.MESSAGES)
.clickOnButton("Produce Message") .clickOnButton("Produce Message");
produceMessagePanel
.setContentFiled(TOPIC_FOR_UPDATE.getMessageContent()) .setContentFiled(TOPIC_FOR_UPDATE.getMessageContent())
.setKeyField(TOPIC_FOR_UPDATE.getMessageKey()) .setKeyField(TOPIC_FOR_UPDATE.getMessageKey())
.submitProduceMessage(); .submitProduceMessage();
topicDetails
.waitUntilScreenReady();
SoftAssertions softly = new SoftAssertions(); SoftAssertions softly = new SoftAssertions();
softly.assertThat(topicDetails.isKeyMessageVisible((TOPIC_FOR_UPDATE.getMessageKey()))).withFailMessage("isKeyMessageVisible()").isTrue(); softly.assertThat(topicDetails.isKeyMessageVisible((TOPIC_FOR_UPDATE.getMessageKey()))).withFailMessage("isKeyMessageVisible()").isTrue();
softly.assertThat(topicDetails.isContentMessageVisible((TOPIC_FOR_UPDATE.getMessageContent()).trim())).withFailMessage("isContentMessageVisible()").isTrue(); softly.assertThat(topicDetails.isContentMessageVisible((TOPIC_FOR_UPDATE.getMessageContent()).trim())).withFailMessage("isContentMessageVisible()").isTrue();