[e2e] Update module structure (#2641)

This commit is contained in:
Vlad Senyuta 2022-09-26 16:02:48 +03:00 committed by GitHub
parent bae5c39cf2
commit eb062359a9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
35 changed files with 166 additions and 228 deletions

View file

@ -13,6 +13,7 @@ import com.provectus.kafka.ui.api.model.TopicCreation;
import com.provectus.kafka.ui.models.Connector;
import com.provectus.kafka.ui.models.Schema;
import com.provectus.kafka.ui.models.Topic;
import com.provectus.kafka.ui.settings.Source;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.reactive.function.client.WebClientResponseException;
@ -21,7 +22,7 @@ import java.util.HashMap;
import java.util.Map;
import static com.codeborne.selenide.Selenide.sleep;
import static com.provectus.kafka.ui.extensions.FileUtils.fileToString;
import static com.provectus.kafka.ui.utilities.FileUtils.fileToString;
@Slf4j
@ -29,7 +30,7 @@ public class ApiHelper {
int partitions = 1;
int replicationFactor = 1;
String baseURL = TestConfiguration.BASE_API_URL;
String baseURL = Source.BASE_API_URL;
@SneakyThrows

View file

@ -1,21 +0,0 @@
package com.provectus.kafka.ui.helpers;
public class TestConfiguration {
public static boolean CLEAR_REPORTS_DIR =
Boolean.parseBoolean(System.getProperty("CLEAR_REPORTS_DIR", "true"));
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 boolean USE_LOCAL_BROWSER =
Boolean.parseBoolean(System.getProperty("USE_LOCAL_BROWSER", "true"));
public static String REPORTS_FOLDER = System.getProperty("REPORTS_FOLDER", "allure-results");
public static Boolean SCREENSHOTS =
Boolean.parseBoolean(System.getProperty("SCREENSHOTS", "true"));
public static Boolean SAVE_PAGE_SOURCE =
Boolean.parseBoolean(System.getProperty("SAVE_PAGE_SOURCE", "false"));
public static Boolean REOPEN_BROWSER_ON_FAIL =
Boolean.parseBoolean(System.getProperty("REOPEN_BROWSER_ON_FAIL", "true"));
public static String BROWSER = System.getProperty("BROWSER", "chromium");
public static String BROWSER_SIZE = System.getProperty("BROWSER_SIZE", "1920x1080");
public static Boolean ENABLE_VNC = Boolean.parseBoolean(System.getProperty("ENABLE_VNC", "true"));
}

View file

@ -3,8 +3,8 @@ package com.provectus.kafka.ui.pages;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.extensions.WaitUtils;
import com.provectus.kafka.ui.helpers.TestConfiguration;
import com.provectus.kafka.ui.utilities.WaitUtils;
import com.provectus.kafka.ui.settings.Source;
import io.qameta.allure.Step;
import lombok.experimental.ExtensionMethod;
import org.openqa.selenium.By;
@ -19,7 +19,7 @@ public class MainPage {
@Step
public MainPage goTo() {
Selenide.open(TestConfiguration.BASE_WEB_URL + path);
Selenide.open(Source.BASE_WEB_URL + path);
return this;
}

View file

@ -2,15 +2,15 @@ package com.provectus.kafka.ui.pages.connector;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.extensions.WaitUtils;
import com.provectus.kafka.ui.utils.BrowserUtils;
import com.provectus.kafka.ui.utilities.WaitUtils;
import io.qameta.allure.Step;
import lombok.experimental.ExtensionMethod;
import org.openqa.selenium.By;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.sleep;
import static com.provectus.kafka.ui.screenshots.Screenshooter.log;
import static com.provectus.kafka.ui.utilities.WebUtils.javaExecutorClick;
import static com.provectus.kafka.ui.utilities.screenshots.Screenshooter.log;
@ExtensionMethod(WaitUtils.class)
public class ConnectorCreateView {
@ -28,7 +28,7 @@ public class ConnectorCreateView {
contentTextArea.setValue("");
contentTextArea.setValue(String.valueOf(configJson.toCharArray()));
nameField.click();
BrowserUtils.javaExecutorClick(submitButton);
javaExecutorClick(submitButton);
sleep(4000);
log.info("Connector config is submitted");
return new ConnectorsView();

View file

@ -1,49 +0,0 @@
package com.provectus.kafka.ui.pages.connector;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.utils.BrowserUtils;
import io.qameta.allure.Step;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import static com.codeborne.selenide.Selectors.byLinkText;
import static com.codeborne.selenide.Selenide.*;
import static com.provectus.kafka.ui.screenshots.Screenshooter.log;
public class ConnectorUpdateView {
SelenideElement submitButton = $(By.xpath("//button[@type='submit']"));
SelenideElement contentTextArea = $("[wrap]");
@Step("Update connector from new JSON")
public ConnectorUpdateView updateConnectorConfig(String configJson) {
BrowserUtils.javaExecutorClick($("#config"));
String str = configJson.replace("\r\n", "");
executeJavaScript(
"function clearAndNot(){" +
"var editor = ace.edit('config');" +
"editor.setValue(\"\");" +
"editor.setValue('" + str + "');}" +
"clearAndNot();");
$("#config").click();
submitButton.click();
$(byLinkText("Edit Config")).shouldBe(Condition.visible);
sleep(3000);
return this;
}
@Step("Set connector config JSON")
public ConnectorsView updConnectorConfig(String configJson) {
$("#config").click();
contentTextArea.sendKeys(Keys.LEFT_CONTROL+"a");
contentTextArea.setValue("");
contentTextArea.setValue(String.valueOf(configJson.toCharArray()));
$("#config").click();
submitButton.shouldBe(Condition.enabled);
BrowserUtils.javaExecutorClick(submitButton);
sleep(4000);
log.info("Connector config is submitted");
return new ConnectorsView();
}
}

View file

@ -2,16 +2,16 @@ package com.provectus.kafka.ui.pages.connector;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Selenide;
import com.provectus.kafka.ui.extensions.WaitUtils;
import com.provectus.kafka.ui.helpers.TestConfiguration;
import com.provectus.kafka.ui.utils.BrowserUtils;
import com.provectus.kafka.ui.utilities.WaitUtils;
import com.provectus.kafka.ui.settings.Source;
import io.qameta.allure.Step;
import lombok.experimental.ExtensionMethod;
import org.openqa.selenium.By;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.$x;
import static com.provectus.kafka.ui.extensions.WebUtils.isVisible;
import static com.provectus.kafka.ui.utilities.WebUtils.isVisible;
import static com.provectus.kafka.ui.utilities.WebUtils.javaExecutorClick;
@ExtensionMethod(WaitUtils.class)
public class ConnectorsList {
@ -20,7 +20,7 @@ public class ConnectorsList {
@Step("Open URL to {cluster}")
public ConnectorsList goTo(String cluster) {
Selenide.open(TestConfiguration.BASE_WEB_URL + String.format(path, cluster));
Selenide.open(Source.BASE_WEB_URL + String.format(path, cluster));
return this;
}
@ -32,7 +32,7 @@ public class ConnectorsList {
@Step("Click on button 'Create Connector'")
public ConnectorCreateView clickCreateConnectorButton() {
BrowserUtils.javaExecutorClick($x("//button[text()='Create Connector']"));
javaExecutorClick($x("//button[text()='Create Connector']"));
return new ConnectorCreateView();
}

View file

@ -3,44 +3,62 @@ package com.provectus.kafka.ui.pages.connector;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.helpers.TestConfiguration;
import com.provectus.kafka.ui.extensions.WaitUtils;
import com.provectus.kafka.ui.utils.BrowserUtils;
import com.provectus.kafka.ui.settings.Source;
import com.provectus.kafka.ui.utilities.WaitUtils;
import io.qameta.allure.Step;
import lombok.experimental.ExtensionMethod;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.$x;
import static com.codeborne.selenide.Selenide.*;
import static com.provectus.kafka.ui.utilities.WebUtils.javaExecutorClick;
import static com.provectus.kafka.ui.utilities.screenshots.Screenshooter.log;
@ExtensionMethod(WaitUtils.class)
public class ConnectorsView {
private static final String path = "/ui/clusters/%s/connects/first/connectors/%s";
protected SelenideElement submitButton = $(By.xpath("//button[@type='submit']"));
protected SelenideElement contentTextArea = $("[wrap]");
@Step
public ConnectorsView goTo(String cluster, String connector) {
Selenide.open(String.format(TestConfiguration.BASE_WEB_URL + path, cluster, connector));
Selenide.open(String.format(Source.BASE_WEB_URL + path, cluster, connector));
return this;
}
@Step()
public ConnectorUpdateView openConfigTab() {
BrowserUtils.javaExecutorClick($(By.xpath("//a[text() ='Config']")));
return new ConnectorUpdateView();
public ConnectorsView openConfigTab() {
javaExecutorClick($(By.xpath("//a[text() ='Config']")));
return new ConnectorsView();
}
@Step("Set connector config JSON")
public ConnectorsView setConfig(String configJson) {
$("#config").click();
contentTextArea.sendKeys(Keys.LEFT_CONTROL+"a");
contentTextArea.setValue("");
contentTextArea.setValue(String.valueOf(configJson.toCharArray()));
$("#config").click();
submitButton.shouldBe(Condition.enabled);
javaExecutorClick(submitButton);
sleep(4000);
log.info("Connector config is submitted");
return new ConnectorsView();
}
@Step("Click 'Delete' button")
public void clickDeleteButton() {
BrowserUtils.javaExecutorClick($x("//button[text()='Delete']"));
javaExecutorClick($x("//button[text()='Delete']"));
SelenideElement confirmButton = $x("//div[@role=\"dialog\"]//button[text()='Confirm']");
confirmButton.shouldBe(Condition.enabled).click();
confirmButton.shouldBe(Condition.disappear);
}
@Step
public void connectorIsVisibleOnOverview() {
public ConnectorsView waitUntilScreenReady() {
$(By.xpath("//a[text() ='Tasks']")).shouldBe(Condition.visible);
$(By.xpath("//a[text() ='Config']")).shouldBe(Condition.visible);
$(By.xpath("//a[text() ='Overview']")).shouldBe(Condition.visible);
return this;
}
}

View file

@ -2,12 +2,12 @@ package com.provectus.kafka.ui.pages.schema;
import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.api.model.SchemaType;
import com.provectus.kafka.ui.utils.BrowserUtils;
import io.qameta.allure.Step;
import org.openqa.selenium.By;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.$x;
import static com.provectus.kafka.ui.utilities.WebUtils.javaExecutorClick;
public class SchemaCreateView {
@ -22,7 +22,7 @@ public class SchemaCreateView {
}
@Step
public SchemaView clickSubmit() {
BrowserUtils.javaExecutorClick(submitSchemaButton);
javaExecutorClick(submitSchemaButton);
return new SchemaView();
}
@Step

View file

@ -5,13 +5,13 @@ import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.api.model.CompatibilityLevel;
import com.provectus.kafka.ui.api.model.SchemaType;
import com.provectus.kafka.ui.utils.BrowserUtils;
import io.qameta.allure.Step;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.$x;
import static com.provectus.kafka.ui.utilities.WebUtils.javaExecutorClick;
public class SchemaEditView {
@ -32,7 +32,7 @@ public class SchemaEditView {
}
@Step
public SchemaView clickSubmit() {
BrowserUtils.javaExecutorClick($(By.xpath("//button[@type='submit']")));
javaExecutorClick($(By.xpath("//button[@type='submit']")));
return new SchemaView();
}

View file

@ -2,12 +2,12 @@ package com.provectus.kafka.ui.pages.schema;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.utils.BrowserUtils;
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;
import static com.provectus.kafka.ui.utilities.WebUtils.isVisible;
import static com.provectus.kafka.ui.utilities.WebUtils.javaExecutorClick;
public class SchemaRegistryList {
@ -15,7 +15,7 @@ public class SchemaRegistryList {
@Step
public SchemaCreateView clickCreateSchema() {
BrowserUtils.javaExecutorClick(schemaButton);
javaExecutorClick(schemaButton);
return new SchemaCreateView();
}

View file

@ -2,11 +2,12 @@ package com.provectus.kafka.ui.pages.schema;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.utils.BrowserUtils;
import io.qameta.allure.Step;
import org.openqa.selenium.By;
import static com.codeborne.selenide.Selenide.*;
import static com.provectus.kafka.ui.utilities.WebUtils.javaExecutorClick;
public class SchemaView {
protected SelenideElement dotMenuBtn = $$x("//button[@aria-label='Dropdown Toggle']").first();
@ -29,7 +30,7 @@ public class SchemaView {
}
@Step
public SchemaRegistryList removeSchema() {
BrowserUtils.javaExecutorClick(dotMenuBtn);
javaExecutorClick(dotMenuBtn);
$(By.xpath("//*[contains(text(),'Remove')]")).click();
SelenideElement confirmButton = $x("//div[@role=\"dialog\"]//button[text()='Confirm']");
confirmButton.shouldBe(Condition.enabled).click();

View file

@ -6,9 +6,9 @@ import com.codeborne.selenide.ElementsCollection;
import com.codeborne.selenide.SelenideElement;
import io.qameta.allure.Step;
import org.openqa.selenium.By;
import com.provectus.kafka.ui.utils.BrowserUtils;
import static com.codeborne.selenide.Selenide.*;
import static com.provectus.kafka.ui.utilities.WebUtils.javaExecutorClick;
import static org.assertj.core.api.Assertions.assertThat;
public class TopicCreateEditSettingsView {
@ -83,7 +83,7 @@ public class TopicCreateEditSettingsView {
}
@Step
public TopicView sendData() {
BrowserUtils.javaExecutorClick($x("//button[@type='submit']"));
javaExecutorClick($x("//button[@type='submit']"));
return new TopicView();
}
@Step

View file

@ -3,14 +3,14 @@ package com.provectus.kafka.ui.pages.topic;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.extensions.WaitUtils;
import com.provectus.kafka.ui.helpers.TestConfiguration;
import com.provectus.kafka.ui.utils.BrowserUtils;
import com.provectus.kafka.ui.utilities.WaitUtils;
import com.provectus.kafka.ui.settings.Source;
import io.qameta.allure.Step;
import lombok.experimental.ExtensionMethod;
import org.openqa.selenium.By;
import static com.codeborne.selenide.Selenide.*;
import static com.provectus.kafka.ui.utilities.WebUtils.javaExecutorClick;
@ExtensionMethod({WaitUtils.class})
public class TopicView {
@ -20,7 +20,7 @@ public class TopicView {
@Step
public TopicView goTo(String cluster, String topic) {
Selenide.open(TestConfiguration.BASE_WEB_URL + String.format(URL_PATH, cluster, topic));
Selenide.open(Source.BASE_WEB_URL + String.format(URL_PATH, cluster, topic));
return this;
}
@ -32,7 +32,7 @@ public class TopicView {
@Step
public TopicCreateEditSettingsView openEditSettings() {
BrowserUtils.javaExecutorClick(dotMenuBtn);
javaExecutorClick(dotMenuBtn);
$x("//li[@role][text()='Edit settings']").click();
return new TopicCreateEditSettingsView();
}
@ -45,7 +45,7 @@ public class TopicView {
@Step
public TopicsList deleteTopic() {
BrowserUtils.javaExecutorClick(dotMenuBtn);
javaExecutorClick(dotMenuBtn);
$x("//ul[@role='menu']//div[text()='Remove Topic']").click();
SelenideElement confirmButton = $x("//div[@role=\"dialog\"]//button[text()='Confirm']");
confirmButton.shouldBe(Condition.enabled).click();
@ -55,7 +55,7 @@ public class TopicView {
@Step
public ProduceMessagePanel clickOnButton(String buttonName) {
BrowserUtils.javaExecutorClick($(By.xpath(String.format("//div//button[text()='%s']", buttonName))));
javaExecutorClick($(By.xpath(String.format("//div//button[text()='%s']", buttonName))));
return new ProduceMessagePanel();
}

View file

@ -3,15 +3,15 @@ package com.provectus.kafka.ui.pages.topic;
import com.codeborne.selenide.CollectionCondition;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Selenide;
import com.provectus.kafka.ui.extensions.WaitUtils;
import com.provectus.kafka.ui.helpers.TestConfiguration;
import com.provectus.kafka.ui.utils.BrowserUtils;
import com.provectus.kafka.ui.utilities.WaitUtils;
import com.provectus.kafka.ui.settings.Source;
import io.qameta.allure.Step;
import lombok.experimental.ExtensionMethod;
import org.openqa.selenium.By;
import static com.codeborne.selenide.Selenide.*;
import static com.provectus.kafka.ui.extensions.WebUtils.isVisible;
import static com.provectus.kafka.ui.utilities.WebUtils.isVisible;
import static com.provectus.kafka.ui.utilities.WebUtils.javaExecutorClick;
@ExtensionMethod(WaitUtils.class)
public class TopicsList {
@ -20,7 +20,7 @@ public class TopicsList {
@Step
public TopicsList goTo(String cluster) {
Selenide.open(TestConfiguration.BASE_WEB_URL + String.format(path, cluster));
Selenide.open(Source.BASE_WEB_URL + String.format(path, cluster));
return this;
}
@ -33,7 +33,7 @@ public class TopicsList {
@Step
public TopicCreateEditSettingsView pressCreateNewTopic() {
BrowserUtils.javaExecutorClick($x("//button[normalize-space(text()) ='Add a Topic']"));
javaExecutorClick($x("//button[normalize-space(text()) ='Add a Topic']"));
return new TopicCreateEditSettingsView();
}

View file

@ -0,0 +1,7 @@
package com.provectus.kafka.ui.settings;
public abstract class Source {
public static String BASE_API_URL = System.getProperty("BASE_URL", "http://localhost:8080");
public static String BASE_WEB_URL = System.getProperty("BASE_DOCKER_URL", "http://host.testcontainers.internal:8080");
}

View file

@ -1,4 +1,4 @@
package com.provectus.kafka.ui.extensions;
package com.provectus.kafka.ui.utilities;
import org.testcontainers.shaded.org.apache.commons.io.IOUtils;

View file

@ -1,4 +1,4 @@
package com.provectus.kafka.ui.extensions;
package com.provectus.kafka.ui.utilities;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;

View file

@ -1,12 +1,17 @@
package com.provectus.kafka.ui.extensions;
package com.provectus.kafka.ui.utilities;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class WebUtils {
public static void javaExecutorClick(SelenideElement element){
Selenide.executeJavaScript("arguments[0].click();", element);
}
public static boolean isVisible(SelenideElement element) {
boolean isVisible = false;
try {

View file

@ -1,12 +1,11 @@
package com.provectus.kafka.ui.utils;
package com.provectus.kafka.ui.utilities.qaseIoUtils;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.platform.commons.util.ClassUtils;
import org.junit.platform.commons.util.Preconditions;
import java.lang.reflect.Method;
public class CamelCaseToSpacedDisplayNameGenerator implements DisplayNameGenerator {
public class DisplayNameGenerator implements org.junit.jupiter.api.DisplayNameGenerator {
@Override
public String generateDisplayNameForClass(Class<?> testClass) {
String name = testClass.getName();

View file

@ -1,6 +1,5 @@
package com.provectus.kafka.ui.extensions;
package com.provectus.kafka.ui.utilities.qaseIoUtils;
import com.provectus.kafka.ui.utils.qaseIO.TestCaseGenerator;
import io.qase.api.QaseClient;
import io.qase.api.StepStorage;
import io.qase.api.exceptions.QaseException;
@ -41,11 +40,9 @@ public class QaseExtension implements TestExecutionListener {
static {
String qaseApiToken = System.getProperty("QASEIO_API_TOKEN");
if (qaseApiToken == null || StringUtils.isEmpty(qaseApiToken)) {
throw new RuntimeException("QaseIO API token should be present");
}
if ("true".equalsIgnoreCase(System.getProperty("QASEIO_CREATE_TESTRUN"))) {
System.setProperty("QASE_RUN_NAME", "Automation run " +
new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()));
@ -56,7 +53,6 @@ public class QaseExtension implements TestExecutionListener {
System.setProperty("QASE_USE_BULK", "false");
}
@Override
public void executionStarted(TestIdentifier testIdentifier) {
if (QaseClient.isEnabled() && testIdentifier.isTest()) {

View file

@ -1,7 +1,8 @@
package com.provectus.kafka.ui.utils.qaseIO;
package com.provectus.kafka.ui.utilities.qaseIoUtils;
import com.provectus.kafka.ui.utils.qaseIO.annotation.AutomationStatus;
import com.provectus.kafka.ui.utils.qaseIO.annotation.Suite;
import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.AutomationStatus;
import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.Suite;
import com.provectus.kafka.ui.utilities.qaseIoUtils.enums.Status;
import io.qase.api.QaseClient;
import io.qase.api.annotation.CaseId;
import io.qase.client.ApiClient;
@ -9,14 +10,13 @@ import io.qase.client.api.CasesApi;
import io.qase.client.model.*;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.junit.Assert;
import org.junit.platform.engine.support.descriptor.MethodSource;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import static io.qase.api.QaseClient.getConfig;
@ -146,9 +146,18 @@ public class TestCaseGenerator {
return true;
}
private static String formatTestCaseTitle(String testMethodName) {
String[] split = StringUtils.splitByCharacterTypeCamelCase(testMethodName);
String[] name = Arrays.stream(split).map(String::toLowerCase).toArray(String[]::new);
String[] subarray = ArrayUtils.subarray(name, 1, name.length);
ArrayList<String> stringList = new ArrayList<>(Arrays.asList(subarray));
stringList.add(0, StringUtils.capitalize(name[0]));
return StringUtils.join(stringList, " ");
}
public static String generateTestCaseTitle(Method testMethod) {
return getClassName(MethodSource.from(testMethod)) + "." + testMethod.getName() + " : " +
MethodNameUtils.formatTestCaseTitle(testMethod.getName());
formatTestCaseTitle(testMethod.getName());
}
private static String getClassName(MethodSource testSource) {

View file

@ -1,6 +1,6 @@
package com.provectus.kafka.ui.utils.qaseIO.annotation;
package com.provectus.kafka.ui.utilities.qaseIoUtils.annotations;
import com.provectus.kafka.ui.utils.qaseIO.Status;
import com.provectus.kafka.ui.utilities.qaseIoUtils.enums.Status;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

View file

@ -1,4 +1,4 @@
package com.provectus.kafka.ui.utils.qaseIO.annotation;
package com.provectus.kafka.ui.utilities.qaseIoUtils.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

View file

@ -1,4 +1,4 @@
package com.provectus.kafka.ui.utils.qaseIO;
package com.provectus.kafka.ui.utilities.qaseIoUtils.enums;
public enum Status {
AUTOMATED, TO_BE_AUTOMATED, MANUAL;

View file

@ -1,4 +1,4 @@
package com.provectus.kafka.ui.screenshots;
package com.provectus.kafka.ui.utilities.screenshots;
public class NoReferenceScreenshotFoundException extends Throwable {
public NoReferenceScreenshotFoundException(String name) {

View file

@ -1,4 +1,4 @@
package com.provectus.kafka.ui.screenshots;
package com.provectus.kafka.ui.utilities.screenshots;
import io.qameta.allure.Allure;
import io.qameta.allure.Attachment;
@ -29,7 +29,7 @@ public class Screenshooter {
private static final int PIXELS_THRESHOLD =
Integer.parseInt(System.getProperty("PIXELS_THRESHOLD", "200"));
private static final String SCREENSHOTS_FOLDER =
System.getProperty("SCREENSHOTS_FOLDER", "com/provectus/kafka/ui/screenshots/");
System.getProperty("SCREENSHOTS_FOLDER", "com/provectus/kafka/ui/utilities/screenshots/");
private static final String DIFF_SCREENSHOTS_FOLDER =
System.getProperty("DIFF_SCREENSHOTS_FOLDER", "build/__diff__/");
private static final String ACTUAL_SCREENSHOTS_FOLDER =

View file

@ -1,23 +0,0 @@
package com.provectus.kafka.ui.utils;
import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement;
import org.openqa.selenium.NoSuchElementException;
public class BrowserUtils {
public static void javaExecutorClick(SelenideElement element){
Selenide.executeJavaScript("arguments[0].click();", element);
}
public static void waitElementPresentJavaExecutor( SelenideElement element ) {
try {
Selenide.executeJavaScript("return typeof(arguments[0]) != 'undefined' && arguments[0] != null;",
element);
}
catch(org.openqa.selenium.StaleElementReferenceException | NoSuchElementException ex){
Selenide.executeJavaScript("return typeof(arguments[0]) != 'undefined' && arguments[0] != null;",
element);
}
}
}

View file

@ -1,23 +0,0 @@
package com.provectus.kafka.ui.utils.qaseIO;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
public class MethodNameUtils {
public static String formatTestCaseTitle(String testMethodName) {
String[] split = StringUtils.splitByCharacterTypeCamelCase(testMethodName);
String[] name = Arrays.stream(split).map(String::toLowerCase).toArray(String[]::new);
String[] subarray = ArrayUtils.subarray(name, 1, name.length);
ArrayList<String> stringList = new ArrayList<>(Arrays.asList(subarray));
stringList.add(0, StringUtils.capitalize(name[0]));
return StringUtils.join(stringList, " ");
}
}

View file

@ -1 +1 @@
com.provectus.kafka.ui.extensions.QaseExtension
com.provectus.kafka.ui.utilities.qaseIoUtils.QaseExtension

View file

@ -1,8 +1,8 @@
package com.provectus.kafka.ui;
import com.provectus.kafka.ui.base.BaseTest;
import com.provectus.kafka.ui.utils.qaseIO.Status;
import com.provectus.kafka.ui.utils.qaseIO.annotation.AutomationStatus;
import com.provectus.kafka.ui.utilities.qaseIoUtils.enums.Status;
import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.AutomationStatus;
import io.qase.api.annotation.CaseId;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

View file

@ -4,11 +4,10 @@ import com.codeborne.selenide.Configuration;
import com.codeborne.selenide.WebDriverRunner;
import com.codeborne.selenide.logevents.SelenideLogger;
import com.provectus.kafka.ui.helpers.Helpers;
import com.provectus.kafka.ui.helpers.TestConfiguration;
import com.provectus.kafka.ui.pages.Pages;
import com.provectus.kafka.ui.screenshots.Screenshooter;
import com.provectus.kafka.ui.utils.CamelCaseToSpacedDisplayNameGenerator;
import com.provectus.kafka.ui.utils.qaseIO.TestCaseGenerator;
import com.provectus.kafka.ui.utilities.qaseIoUtils.DisplayNameGenerator;
import com.provectus.kafka.ui.utilities.qaseIoUtils.TestCaseGenerator;
import com.provectus.kafka.ui.utilities.screenshots.Screenshooter;
import io.github.cdimascio.dotenv.Dotenv;
import io.qameta.allure.Allure;
import io.qameta.allure.selenide.AllureSelenide;
@ -32,7 +31,7 @@ import java.io.IOException;
import java.util.Arrays;
@Slf4j
@DisplayNameGeneration(CamelCaseToSpacedDisplayNameGenerator.class)
@DisplayNameGeneration(DisplayNameGenerator.class)
public class BaseTest {
public static final String SELENIUM_IMAGE_NAME = "selenium/standalone-chrome:103.0";
@ -103,7 +102,7 @@ public class BaseTest {
}
}
Dotenv.load().entries().forEach(env -> System.setProperty(env.getKey(), env.getValue()));
if (TestConfiguration.CLEAR_REPORTS_DIR) {
if (Config.CLEAR_REPORTS_DIR) {
clearReports();
}
setup();
@ -125,21 +124,20 @@ public class BaseTest {
@SneakyThrows
private static void setup() {
Configuration.reportsFolder = TestConfiguration.REPORTS_FOLDER;
Configuration.screenshots = TestConfiguration.SCREENSHOTS;
Configuration.savePageSource = TestConfiguration.SAVE_PAGE_SOURCE;
Configuration.reopenBrowserOnFail = TestConfiguration.REOPEN_BROWSER_ON_FAIL;
Configuration.browser = TestConfiguration.BROWSER;
Configuration.baseUrl = TestConfiguration.BASE_WEB_URL;
Configuration.reportsFolder = Config.REPORTS_FOLDER;
Configuration.screenshots = Config.SCREENSHOTS;
Configuration.savePageSource = Config.SAVE_PAGE_SOURCE;
Configuration.reopenBrowserOnFail = Config.REOPEN_BROWSER_ON_FAIL;
Configuration.browser = Config.BROWSER;
Configuration.timeout = 10000;
Configuration.pageLoadTimeout = 180000;
Configuration.browserSize = TestConfiguration.BROWSER_SIZE;
Configuration.browserSize = Config.BROWSER_SIZE;
SelenideLogger.addListener("allure", new AllureSelenide().savePageSource(false));
}
public static void clearReports() {
log.info(String.format("Clearing reports dir [%s]...", TestConfiguration.REPORTS_FOLDER));
File allureResults = new File(TestConfiguration.REPORTS_FOLDER);
log.info(String.format("Clearing reports dir [%s]...", Config.REPORTS_FOLDER));
File allureResults = new File(Config.REPORTS_FOLDER);
if (allureResults.isDirectory()) {
File[] list = allureResults.listFiles();
if (list != null) {

View file

@ -0,0 +1,19 @@
package com.provectus.kafka.ui.base;
public abstract class Config {
public static boolean CLEAR_REPORTS_DIR =
Boolean.parseBoolean(System.getProperty("CLEAR_REPORTS_DIR", "true"));
public static boolean USE_LOCAL_BROWSER =
Boolean.parseBoolean(System.getProperty("USE_LOCAL_BROWSER", "true"));
public static String REPORTS_FOLDER = System.getProperty("REPORTS_FOLDER", "allure-results");
public static Boolean SCREENSHOTS =
Boolean.parseBoolean(System.getProperty("SCREENSHOTS", "true"));
public static Boolean SAVE_PAGE_SOURCE =
Boolean.parseBoolean(System.getProperty("SAVE_PAGE_SOURCE", "false"));
public static Boolean REOPEN_BROWSER_ON_FAIL =
Boolean.parseBoolean(System.getProperty("REOPEN_BROWSER_ON_FAIL", "true"));
public static String BROWSER = System.getProperty("BROWSER", "chromium");
public static String BROWSER_SIZE = System.getProperty("BROWSER_SIZE", "1920x1080");
public static Boolean ENABLE_VNC = Boolean.parseBoolean(System.getProperty("ENABLE_VNC", "true"));
}

View file

@ -4,16 +4,16 @@ import com.provectus.kafka.ui.base.BaseTest;
import com.provectus.kafka.ui.helpers.Helpers;
import com.provectus.kafka.ui.models.Connector;
import com.provectus.kafka.ui.models.Topic;
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 com.provectus.kafka.ui.utilities.qaseIoUtils.enums.Status;
import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.AutomationStatus;
import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.Suite;
import io.qase.api.annotation.CaseId;
import org.junit.jupiter.api.*;
import java.util.ArrayList;
import java.util.List;
import static com.provectus.kafka.ui.extensions.FileUtils.getResourceAsString;
import static com.provectus.kafka.ui.utilities.FileUtils.getResourceAsString;
public class ConnectorsTests extends BaseTest {
private static final long SUITE_ID = 10;
@ -80,9 +80,10 @@ public class ConnectorsTests extends BaseTest {
pages.openConnectorsList(CLUSTER_NAME)
.waitUntilScreenReady()
.openConnector(CONNECTOR_FOR_UPDATE.getName());
pages.connectorsView.connectorIsVisibleOnOverview();
pages.connectorsView.openConfigTab()
.updConnectorConfig(CONNECTOR_FOR_UPDATE.getConfig());
pages.connectorsView
.waitUntilScreenReady()
.openConfigTab()
.setConfig(CONNECTOR_FOR_UPDATE.getConfig());
pages.openConnectorsList(CLUSTER_NAME);
Assertions.assertTrue(pages.connectorsList.isConnectorVisible(CONNECTOR_FOR_UPDATE.getName()),"isConnectorVisible()");
}

View file

@ -7,9 +7,9 @@ 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;
import com.provectus.kafka.ui.utilities.qaseIoUtils.enums.Status;
import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.AutomationStatus;
import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.Suite;
import io.qase.api.annotation.CaseId;
import lombok.SneakyThrows;
import org.junit.jupiter.api.*;
@ -17,7 +17,7 @@ import org.junit.jupiter.api.*;
import java.util.ArrayList;
import java.util.List;
import static com.provectus.kafka.ui.extensions.FileUtils.fileToString;
import static com.provectus.kafka.ui.utilities.FileUtils.fileToString;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)

View file

@ -6,9 +6,9 @@ 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 com.provectus.kafka.ui.utilities.qaseIoUtils.enums.Status;
import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.AutomationStatus;
import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.Suite;
import io.qase.api.annotation.CaseId;
import org.assertj.core.api.SoftAssertions;
import org.junit.jupiter.api.*;
@ -16,7 +16,7 @@ import org.junit.jupiter.api.*;
import java.util.ArrayList;
import java.util.List;
import static com.provectus.kafka.ui.extensions.FileUtils.fileToString;
import static com.provectus.kafka.ui.utilities.FileUtils.fileToString;
public class TopicTests extends BaseTest {
private static final long SUITE_ID = 2;