Issue#2437 (#2626)

* [e2e] refactoring of assertions cross tests #2437

* [e2e] refactoring of assertions cross tests #2437

* [e2e] refactoring of assertions cross tests #2437

* [e2e] refactoring of assertions cross tests #2437

* [e2e] refactoring of assertions cross tests #2437

* [e2e]Fix refactoring of assertions cross tests #2437

* [e2e]Fix refactoring of assertions cross tests #2437

* [e2e]Fix refactoring of assertions cross tests #2437
This commit is contained in:
Arthur 2022-09-22 15:39:01 +03:00 committed by GitHub
parent d673ea63a1
commit 6e8ce77fd3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 94 additions and 99 deletions

View file

@ -0,0 +1,20 @@
package com.provectus.kafka.ui.extensions;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class WebUtils {
public static boolean isVisible(SelenideElement element) {
boolean isVisible = false;
try {
element.shouldBe(Condition.visible);
isVisible = true;
} catch (Throwable e) {
log.debug("Element {} is not visible", element.getSearchCriteria());
}
return isVisible;
}
}

View file

@ -5,7 +5,6 @@ import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.extensions.WaitUtils;
import com.provectus.kafka.ui.helpers.TestConfiguration;
import com.provectus.kafka.ui.pages.topic.TopicsList;
import io.qameta.allure.Step;
import lombok.experimental.ExtensionMethod;
import org.openqa.selenium.By;
@ -31,16 +30,6 @@ public class MainPage {
return this;
}
@Step
public void topicIsVisible(String topicName) {
new TopicsList().isTopicVisible(topicName);
}
@Step
public void topicIsNotVisible(String topicName){
new TopicsList().isTopicNotVisible(topicName);
}
public enum SideMenuOptions {
BROKERS("Brokers"),
TOPICS("Topics"),
@ -54,8 +43,6 @@ public class MainPage {
}
}
@Step
public MainPage goToSideMenu(String clusterName, SideMenuOptions option) {
SelenideElement clusterElement = $x(String.format("//aside/ul/li[contains(.,'%s')]", clusterName)).shouldBe(Condition.visible);

View file

@ -9,7 +9,9 @@ import io.qameta.allure.Step;
import lombok.experimental.ExtensionMethod;
import org.openqa.selenium.By;
import static com.codeborne.selenide.Selenide.*;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.$x;
import static com.provectus.kafka.ui.extensions.WebUtils.isVisible;
@ExtensionMethod(WaitUtils.class)
public class ConnectorsList {
@ -34,27 +36,18 @@ public class ConnectorsList {
return new ConnectorCreateView();
}
@Step
public ConnectorsList openConnector(String connectorName) {
$(By.linkText(connectorName)).click();
return this;
}
@Step
public ConnectorsList isNotVisible(String connectorName) {
public boolean isConnectorVisible(String connectorName) {
$(By.xpath("//table")).shouldBe(Condition.visible);
$x("//tbody//td[1]//a[text()='" + connectorName + "']").shouldBe(Condition.not(Condition.visible));
return this;
return isVisible($x("//tbody//td[1]//a[text()='" + connectorName + "']"));
}
@Step("Verify that connector {connectorName} is visible in the list")
public ConnectorsList connectorIsVisibleInList(String connectorName, String topicName) {
$x("//table//a[@href='/ui/clusters/local/connects/first/connectors/" + connectorName + "']").shouldBe(Condition.visible);
$$(By.linkText(topicName));
return this;
}
@Step
public ConnectorsList connectorIsUpdatedInList(String connectorName, String topicName) {
$(By.xpath(String.format("//a[text() = '%s']", connectorName))).shouldBe(Condition.visible);

View file

@ -7,15 +7,18 @@ import io.qameta.allure.Step;
import org.openqa.selenium.By;
import static com.codeborne.selenide.Selenide.*;
import static com.provectus.kafka.ui.extensions.WebUtils.isVisible;
public class SchemaRegistryList {
private final SelenideElement schemaButton = $(By.xpath("//*[contains(text(),'Create Schema')]"));
@Step
public SchemaCreateView clickCreateSchema() {
BrowserUtils.javaExecutorClick(schemaButton);
return new SchemaCreateView();
}
@Step
public SchemaView openSchema(String schemaName) {
$(By.xpath("//*[contains(text(),'" + schemaName + "')]")).click();
@ -23,17 +26,10 @@ public class SchemaRegistryList {
}
@Step
public SchemaRegistryList isNotVisible(String schemaName) {
$x(String.format("//*[contains(text(),'%s')]", schemaName)).shouldNotBe(Condition.visible);
return this;
}
@Step
public SchemaRegistryList isSchemaVisible(String schemaName) {
$$("tbody td>a")
.find(Condition.exactText(schemaName))
.shouldBe(Condition.visible);
return this;
public boolean isSchemaVisible(String schemaName) {
$(By.xpath("//table")).shouldBe(Condition.visible);
return isVisible($x("//tbody//td//a[text()='" + schemaName + "']"));
}
}

View file

@ -2,13 +2,11 @@ package com.provectus.kafka.ui.pages.schema;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.api.model.CompatibilityLevel;
import com.provectus.kafka.ui.utils.BrowserUtils;
import io.qameta.allure.Step;
import org.openqa.selenium.By;
import static com.codeborne.selenide.Selenide.*;
public class SchemaView {
protected SelenideElement dotMenuBtn = $$x("//button[@aria-label='Dropdown Toggle']").first();
@ -20,9 +18,8 @@ public class SchemaView {
}
@Step
public SchemaView isCompatibility(CompatibilityLevel.CompatibilityEnum compatibility){
$x("//div//p[.='" + compatibility.getValue() + "']").shouldBe(Condition.visible);
return this;
public String getCompatibility() {
return $x("//h4[contains(text(),'Compatibility')]/../p").getText();
}
@Step

View file

@ -140,21 +140,23 @@ public class TopicCreateEditSettingsView {
return this;
}
@Step
public TopicCreateEditSettingsView maxSizeOnDiskIs(String size) {
String retentionBytes = new KafkaUISelectElement("retentionBytes")
.getCurrentValue();
assertThat(retentionBytes)
.as("Max size on disk in GB should be " + size)
.isEqualTo(size);
return this;
public String getCleanupPolicy() {
return new KafkaUISelectElement("cleanupPolicy").getCurrentValue();
}
@Step
public TopicCreateEditSettingsView maxMessageBytesIs(String bytes) {
String value = maxMessageBytes.getValue();
assertThat(value)
.as("Maximum message size in bytes should be " + bytes)
.isEqualTo(bytes);
return this;
public String getTimeToRetain() {
return timeToRetain.getValue();
}
@Step
public String getMaxSizeOnDisk() {
return new KafkaUISelectElement("retentionBytes").getCurrentValue();
}
@Step
public String getMaxMessageBytes() {
return maxMessageBytes.getValue();
}

View file

@ -33,7 +33,7 @@ public class TopicView {
@Step
public TopicCreateEditSettingsView openEditSettings() {
BrowserUtils.javaExecutorClick(dotMenuBtn);
$x("//a[text()= '" + DotMenuHeaderItems.EDIT_SETTINGS.getValue() + "']").click();
$x("//li[@role][text()='Edit settings']").click();
return new TopicCreateEditSettingsView();
}

View file

@ -11,6 +11,7 @@ import lombok.experimental.ExtensionMethod;
import org.openqa.selenium.By;
import static com.codeborne.selenide.Selenide.*;
import static com.provectus.kafka.ui.extensions.WebUtils.isVisible;
@ExtensionMethod(WaitUtils.class)
public class TopicsList {
@ -37,12 +38,9 @@ public class TopicsList {
}
@Step
public TopicsList isTopicVisible(String topicName) {
$$("tbody td>a")
.shouldBe(CollectionCondition.sizeGreaterThan(4))
.find(Condition.exactText(topicName))
.shouldBe(Condition.visible);
return this;
public boolean isTopicVisible(String topicName) {
$(By.xpath("//table")).shouldBe(Condition.visible);
return isVisible($x("//tbody//td//a[text()='" + topicName + "']"));
}
@Step

View file

@ -8,10 +8,7 @@ import com.provectus.kafka.ui.utils.qaseIO.Status;
import com.provectus.kafka.ui.utils.qaseIO.annotation.AutomationStatus;
import com.provectus.kafka.ui.utils.qaseIO.annotation.Suite;
import io.qase.api.annotation.CaseId;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.*;
import java.util.ArrayList;
import java.util.List;
@ -69,8 +66,8 @@ public class ConnectorsTests extends BaseTest {
.waitUntilScreenReady()
.setConnectorConfig(connectorForCreate.getName(), connectorForCreate.getConfig());
pages.openConnectorsList(CLUSTER_NAME)
.waitUntilScreenReady()
.connectorIsVisibleInList(connectorForCreate.getName(), TOPIC_FOR_CREATE.getName());
.waitUntilScreenReady();
Assertions.assertTrue(pages.connectorsList.isConnectorVisible(connectorForCreate.getName()),"isConnectorVisible()");
CONNECTOR_LIST.add(connectorForCreate);
}
@ -86,8 +83,8 @@ public class ConnectorsTests extends BaseTest {
pages.connectorsView.connectorIsVisibleOnOverview();
pages.connectorsView.openEditConfig()
.updConnectorConfig(CONNECTOR_FOR_UPDATE.getConfig());
pages.openConnectorsList(CLUSTER_NAME)
.connectorIsVisibleInList(CONNECTOR_FOR_UPDATE.getName(), TOPIC_FOR_UPDATE.getName());
pages.openConnectorsList(CLUSTER_NAME);
Assertions.assertTrue(pages.connectorsList.isConnectorVisible(CONNECTOR_FOR_UPDATE.getName()),"isConnectorVisible()");
}
@DisplayName("should delete connector")
@ -100,8 +97,8 @@ public class ConnectorsTests extends BaseTest {
.waitUntilScreenReady()
.openConnector(CONNECTOR_FOR_DELETE.getName());
pages.connectorsView.clickDeleteButton();
pages.openConnectorsList(CLUSTER_NAME)
.isNotVisible(CONNECTOR_FOR_DELETE.getName());
pages.openConnectorsList(CLUSTER_NAME);
Assertions.assertFalse(pages.connectorsList.isConnectorVisible(CONNECTOR_FOR_DELETE.getName()),"isConnectorVisible()");
CONNECTOR_LIST.remove(CONNECTOR_FOR_DELETE);
}

View file

@ -6,6 +6,7 @@ import com.provectus.kafka.ui.helpers.Helpers;
import com.provectus.kafka.ui.models.Schema;
import com.provectus.kafka.ui.pages.MainPage;
import com.provectus.kafka.ui.pages.schema.SchemaEditView;
import com.provectus.kafka.ui.pages.schema.SchemaView;
import com.provectus.kafka.ui.utils.qaseIO.Status;
import com.provectus.kafka.ui.utils.qaseIO.annotation.AutomationStatus;
import com.provectus.kafka.ui.utils.qaseIO.annotation.Suite;
@ -53,7 +54,7 @@ public class SchemasTests extends BaseTest {
.waitUntilScreenReady();
pages.mainPage
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.isSchemaVisible(schemaAvro.getName());
Assertions.assertTrue(pages.schemaRegistry.isSchemaVisible(schemaAvro.getName()),"isSchemaVisible()");
SCHEMA_LIST.add(schemaAvro);
}
@ -74,8 +75,8 @@ public class SchemasTests extends BaseTest {
new SchemaEditView().selectCompatibilityLevelFromDropdown(CompatibilityLevel.CompatibilityEnum.NONE)
.setNewSchemaValue(fileToString(AVRO_API.getValuePath()))
.clickSubmit()
.waitUntilScreenReady()
.isCompatibility(CompatibilityLevel.CompatibilityEnum.NONE);
.waitUntilScreenReady();
Assertions.assertEquals(CompatibilityLevel.CompatibilityEnum.NONE.toString(), new SchemaView().getCompatibility(), "getCompatibility()");
}
@DisplayName("should delete AVRO schema")
@ -89,8 +90,8 @@ public class SchemasTests extends BaseTest {
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.openSchema(AVRO_API.getName())
.waitUntilScreenReady()
.removeSchema()
.isNotVisible(AVRO_API.getName());
.removeSchema();
Assertions.assertFalse(pages.schemaRegistry.isSchemaVisible(AVRO_API.getName()),"isSchemaVisible()");
SCHEMA_LIST.remove(AVRO_API);
}
@ -112,7 +113,7 @@ public class SchemasTests extends BaseTest {
.waitUntilScreenReady();
pages.mainPage
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.isSchemaVisible(schemaJson.getName());
Assertions.assertTrue(pages.schemaRegistry.isSchemaVisible(schemaJson.getName()),"isSchemaVisible()");
SCHEMA_LIST.add(schemaJson);
}
@ -127,8 +128,8 @@ public class SchemasTests extends BaseTest {
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.openSchema(JSON_API.getName())
.waitUntilScreenReady()
.removeSchema()
.isNotVisible(JSON_API.getName());
.removeSchema();
Assertions.assertFalse(pages.schemaRegistry.isSchemaVisible(JSON_API.getName()),"isSchemaVisible()");
SCHEMA_LIST.remove(JSON_API);
}
@ -150,7 +151,7 @@ public class SchemasTests extends BaseTest {
.waitUntilScreenReady();
pages.mainPage
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.isSchemaVisible(schemaProtobuf.getName());
Assertions.assertTrue(pages.schemaRegistry.isSchemaVisible(schemaProtobuf.getName()),"isSchemaVisible()");
SCHEMA_LIST.add(schemaProtobuf);
}
@ -165,8 +166,8 @@ public class SchemasTests extends BaseTest {
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.openSchema(PROTOBUF_API.getName())
.waitUntilScreenReady()
.removeSchema()
.isNotVisible(PROTOBUF_API.getName());
.removeSchema();
Assertions.assertFalse(pages.schemaRegistry.isSchemaVisible(PROTOBUF_API.getName()),"isSchemaVisible()");
SCHEMA_LIST.remove(PROTOBUF_API);
}

View file

@ -4,12 +4,13 @@ import com.provectus.kafka.ui.base.BaseTest;
import com.provectus.kafka.ui.helpers.Helpers;
import com.provectus.kafka.ui.models.Topic;
import com.provectus.kafka.ui.pages.MainPage;
import com.provectus.kafka.ui.pages.topic.TopicCreateEditSettingsView;
import com.provectus.kafka.ui.pages.topic.TopicView;
import com.provectus.kafka.ui.utils.qaseIO.Status;
import com.provectus.kafka.ui.utils.qaseIO.annotation.AutomationStatus;
import com.provectus.kafka.ui.utils.qaseIO.annotation.Suite;
import io.qameta.allure.Issue;
import io.qase.api.annotation.CaseId;
import org.assertj.core.api.SoftAssertions;
import org.junit.jupiter.api.*;
import java.util.ArrayList;
@ -51,14 +52,13 @@ public class TopicTests extends BaseTest {
.sendData()
.waitUntilScreenReady();
pages.open()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.TOPICS)
.topicIsVisible(topicToCreate.getName());
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.TOPICS);
Assertions.assertTrue(pages.topicsList.isTopicVisible(topicToCreate.getName()),"isTopicVisible");
TOPIC_LIST.add(topicToCreate);
}
@Disabled("Due to issue https://github.com/provectus/kafka-ui/issues/1500 ignore this test")
@Disabled("https://github.com/provectus/kafka-ui/issues/2625")
@DisplayName("should update a topic")
@Issue("1500")
@Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED)
@CaseId(197)
@ -66,7 +66,7 @@ public class TopicTests extends BaseTest {
public void updateTopic() {
pages.openTopicsList(CLUSTER_NAME)
.waitUntilScreenReady();
pages.openTopicView(CLUSTER_NAME, TOPIC_FOR_UPDATE.getName())
pages.topicsList.openTopic(TOPIC_FOR_UPDATE.getName())
.waitUntilScreenReady()
.openEditSettings()
.selectCleanupPolicy(TOPIC_FOR_UPDATE.getCompactPolicyValue())
@ -78,13 +78,15 @@ public class TopicTests extends BaseTest {
.waitUntilScreenReady();
pages.openTopicsList(CLUSTER_NAME)
.waitUntilScreenReady();
pages.openTopicView(CLUSTER_NAME, TOPIC_FOR_UPDATE.getName())
.openEditSettings()
// Assertions
.cleanupPolicyIs(TOPIC_FOR_UPDATE.getCompactPolicyValue())
.timeToRetainIs(TOPIC_FOR_UPDATE.getTimeToRetainData())
.maxSizeOnDiskIs(TOPIC_FOR_UPDATE.getMaxSizeOnDisk())
.maxMessageBytesIs(TOPIC_FOR_UPDATE.getMaxMessageBytes());
pages.topicsList.openTopic(TOPIC_FOR_UPDATE.getName())
.waitUntilScreenReady()
.openEditSettings();
SoftAssertions softly = new SoftAssertions();
softly.assertThat(new TopicCreateEditSettingsView().getCleanupPolicy()).as("Cleanup Policy").isEqualTo(TOPIC_FOR_UPDATE.getCompactPolicyValue());
softly.assertThat(new TopicCreateEditSettingsView().getTimeToRetain()).as("Time to retain").isEqualTo(TOPIC_FOR_UPDATE.getTimeToRetainData());
softly.assertThat(new TopicCreateEditSettingsView().getMaxSizeOnDisk()).as("Max size on disk").isEqualTo(TOPIC_FOR_UPDATE.getMaxSizeOnDisk());
softly.assertThat(new TopicCreateEditSettingsView().getMaxMessageBytes()).as("Max message bytes").isEqualTo(TOPIC_FOR_UPDATE.getMaxMessageBytes());
softly.assertAll();
}
@DisplayName("should delete topic")
@ -99,8 +101,8 @@ public class TopicTests extends BaseTest {
.waitUntilScreenReady()
.deleteTopic();
pages.openTopicsList(CLUSTER_NAME)
.waitUntilScreenReady()
.isTopicNotVisible(TOPIC_FOR_DELETE.getName());
.waitUntilScreenReady();
Assertions.assertFalse(pages.topicsList.isTopicVisible(TOPIC_FOR_DELETE.getName()),"isTopicVisible");
TOPIC_LIST.remove(TOPIC_FOR_DELETE);
}
@ -119,8 +121,10 @@ public class TopicTests extends BaseTest {
.setContentFiled(TOPIC_FOR_UPDATE.getMessageContent())
.setKeyField(TOPIC_FOR_UPDATE.getMessageKey())
.submitProduceMessage();
Assertions.assertTrue(pages.topicView.isKeyMessageVisible(TOPIC_FOR_UPDATE.getMessageKey()));
Assertions.assertTrue(pages.topicView.isContentMessageVisible(TOPIC_FOR_UPDATE.getMessageContent().trim()));
SoftAssertions softly = new SoftAssertions();
softly.assertThat(pages.topicView.isKeyMessageVisible((TOPIC_FOR_UPDATE.getMessageKey()))).withFailMessage("isKeyMessageVisible()").isTrue();
softly.assertThat(pages.topicView.isContentMessageVisible((TOPIC_FOR_UPDATE.getMessageContent()).trim())).withFailMessage("isContentMessageVisible()").isTrue();
softly.assertAll();
}
@AfterAll