diff --git a/domiSMP-ui-tests/pom.xml b/domiSMP-ui-tests/pom.xml index 93ba729169696a0d8068140198e6a090cef4f25b..7e72072c7d093fba031917a4344224a7f9c15f06 100644 --- a/domiSMP-ui-tests/pom.xml +++ b/domiSMP-ui-tests/pom.xml @@ -39,7 +39,7 @@ <configuration> <failIfNoTests>true</failIfNoTests> <systemPropertyVariables> - <runBrowser>firefox</runBrowser> + <runBrowser>chrome</runBrowser> <propertiesFile>./src/main/resources/myLocal.properties</propertiesFile> </systemPropertyVariables> <properties> @@ -229,6 +229,12 @@ <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M7</version> </dependency> + <dependency> + <groupId>org.jetbrains</groupId> + <artifactId>annotations</artifactId> + <version>RELEASE</version> + <scope>compile</scope> + </dependency> </dependencies> diff --git a/domiSMP-ui-tests/src/main/java/ddsl/Components.java b/domiSMP-ui-tests/src/main/java/ddsl/Components.java deleted file mode 100644 index 58952236423555e9b245e8d0ea6315ece5168858..0000000000000000000000000000000000000000 --- a/domiSMP-ui-tests/src/main/java/ddsl/Components.java +++ /dev/null @@ -1,40 +0,0 @@ -package ddsl; - -import org.openqa.selenium.JavascriptExecutor; -import org.openqa.selenium.WebDriver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import pages.objects.Wait; -import utils.TestRunData; - -public class Components { - - protected final Logger log = LoggerFactory.getLogger(this.getClass()); - public Wait wait; - protected WebDriver driver; - protected TestRunData data = new TestRunData(); - - public Components(WebDriver driver) { - this.driver = driver; - this.wait = new Wait(driver); - } - - public void waitForRowsToLoad() { - - try { - wait.forXMillis(100); - int bars = 1; - int waits = 0; - while (bars > 0 && waits < 30) { - Object tmp = ((JavascriptExecutor) driver).executeScript("return document.querySelectorAll('datatable-progress').length;"); - bars = Integer.parseInt(tmp.toString()); - waits++; - wait.forXMillis(100); - } - log.debug("waited for rows to load for ms = " + waits * 100); - wait.forXMillis(100); - } catch (Exception e) { - } - - } -} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/SideNavigation.java b/domiSMP-ui-tests/src/main/java/ddsl/SideNavigation.java deleted file mode 100644 index 918193bf45006e15cce5e0fcc5319e374c0ae340..0000000000000000000000000000000000000000 --- a/domiSMP-ui-tests/src/main/java/ddsl/SideNavigation.java +++ /dev/null @@ -1,12 +0,0 @@ -package ddsl; - -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.support.PageFactory; -import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; - -public class SideNavigation extends Components { - public SideNavigation(WebDriver driver) { - super(driver); - PageFactory.initElements(new AjaxElementLocatorFactory(driver, 1), this); - } -} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java new file mode 100644 index 0000000000000000000000000000000000000000..e0d4007ee23f0094710845c12760e1ffbb527708 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java @@ -0,0 +1,44 @@ +package ddsl.dcomponents; + +import ddsl.dobjects.DObject; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +public class AlertComponent extends DComponent { + @FindBy(id = "alertmessage_id") + public WebElement alertToaster; + @FindBy(css = "#alertmessage_id > span.closebtn") + public WebElement closeButton; + + public AlertComponent(WebDriver driver) { + super(driver); + } + + public void closeAlert() throws Exception { + weToDButton(closeButton).click(); + } + + public String getAlertMessage() { + try { + wait.forElementToBeVisible(alertToaster, true); + + log.error(closeButton.getText()); + } catch (Exception e) { + } + DObject alertObject = new DObject(driver, alertToaster); + + if (!alertObject.isPresent()) { + log.debug("No messages displayed."); + return null; + } + + String messageTxt = alertToaster.getText().replace(closeButton.getText(), "").replaceAll("\n", "").trim(); + + log.debug("messageTxt = " + messageTxt); + + log.debug("Getting alert message ..."); + return messageTxt.trim(); + } + +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Breadcrump.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Breadcrump.java new file mode 100644 index 0000000000000000000000000000000000000000..0ba2226057a01e15ff7448a5ef4cf304174ad21c --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Breadcrump.java @@ -0,0 +1,21 @@ +package ddsl.dcomponents; + + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +public class Breadcrump extends DomiSMPPage { + @FindBy(xpath = "//smp-breadcrumb/div/smp-breadcrumb-item[3]/a/div[3]/span") + public WebElement CurrentPage; + + public Breadcrump(WebDriver driver) { + super(driver); + } + + public String getCurrentPage() { + return CurrentPage.getText(); + } + + +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java new file mode 100644 index 0000000000000000000000000000000000000000..ce5fcf84f8da2f873231198bc435b10356854656 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java @@ -0,0 +1,36 @@ +package ddsl.dcomponents; + +import ddsl.dobjects.DButton; +import ddsl.dobjects.DInput; +import ddsl.dobjects.DSelect; +import ddsl.dobjects.DWait; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import utils.TestRunData; + +public class DComponent { + + protected final Logger log = LoggerFactory.getLogger(this.getClass()); + public DWait wait; + protected WebDriver driver; + protected TestRunData data = new TestRunData(); + + public DComponent(WebDriver driver) { + this.driver = driver; + this.wait = new DWait(driver); + } + + protected DButton weToDButton(WebElement element) { + return new DButton(driver, element); + } + + protected DInput weToDInput(WebElement element) { + return new DInput(driver, element); + } + + protected DSelect weToDSelect(WebElement element) { + return new DSelect(driver, element); + } +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java new file mode 100644 index 0000000000000000000000000000000000000000..9c413f382b494f9fd079e6088757f0a20e9168f5 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java @@ -0,0 +1,60 @@ +package ddsl.dcomponents; + + +import ddsl.dobjects.DButton; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; +import pages.LoginPage; + +public class DomiSMPPage extends DComponent { + @FindBy(css = "page-header > h1") + protected WebElement pageTitle; + @FindBy(id = "login_id") + private WebElement loginBtnTop; + @FindBy(id = "settingsmenu_id") + private WebElement rightMenuBtn; + @FindBy(id = "logout_id") + private WebElement logoutMenuBtn; + @FindBy(className = "smp-expired-password-dialog") + private WebElement expiredPasswordDialog; + + @FindBy(css = "#okbuttondialog_id ") + private WebElement dialogOKbutton; + + + public DomiSMPPage(WebDriver driver) { + super(driver); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this); + } + + public SideNavigation getSidebar() { + return new SideNavigation(driver); + } + + public Breadcrump getBreadcrump() { + return new Breadcrump(driver); + } + + public LoginPage goToLoginPage() { + loginBtnTop.click(); + return new LoginPage(driver); + } + + public LoginPage logout() { + rightMenuBtn.click(); + logoutMenuBtn.click(); + return new LoginPage(driver); + } + + + public AlertComponent getAlertArea() { + return new AlertComponent(driver); + } + + public DButton getExpiredDialoginbutton() { + return weToDButton(dialogOKbutton); + } +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigation.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigation.java new file mode 100644 index 0000000000000000000000000000000000000000..e053cce49206730f5e9a6148d8868b131d735701 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigation.java @@ -0,0 +1,201 @@ +package ddsl.dcomponents; + +import ddsl.enums.Pages; +import org.openqa.selenium.ElementNotInteractableException; +import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; +import pages.ProfilePage; + +public class SideNavigation extends DomiSMPPage { + @FindBy(id = "window-sidenav-panel") + public WebElement sideBar; + + // --------------------Search------------------------- + @FindBy(id = "") + private WebElement resourcesLnk; + + @FindBy(css = "mat-nested-tree-node cdk-nested-tree-node cdk-tree-node ng-star-inserted") + private WebElement resourcesExpandLnk; + // ---------------------------------------------------- + + // --------------Administration--------------------------- + @FindBy(id = "") + private WebElement editDomainsLnk; + + @FindBy(id = "") + private WebElement editGroupsLnk; + + @FindBy(id = "") + private WebElement editResourcesLnk; + + @FindBy(id = "mat-expansion-panel-header-1") + private WebElement administrationExpand; + // ---------------------------------------------------- + + // --------------System Settings --------------------------- + @FindBy(id = "") + private WebElement usersLnk; + + @FindBy(id = "") + private WebElement domainsLnk; + + @FindBy(id = "") + private WebElement keystoreLnk; + @FindBy(id = "") + private WebElement truststoreLnk; + + @FindBy(id = "") + private WebElement extensionsLnk; + + @FindBy(id = "") + private WebElement propertiesLnk; + + @FindBy(id = "") + private WebElement alersLnk; + + @FindBy(id = "mat-expansion-panel-header-1") + private WebElement systemSettingsExpand; + // ---------------------------------------------------- + + // --------------User Settings--------------------------- + @FindBy(id = "user-data-profileButton") + private WebElement profileLnk; + + @FindBy(id = "user-data-access-tokenButton") + private WebElement accessTokensLnk; + + @FindBy(id = "user-data-certificatesButton") + private WebElement certificatesLnk; + + @FindBy(id = "user-dataButton") + private WebElement userSettingsExpand; + // ---------------------------------------------------- + + public SideNavigation(WebDriver driver) { + super(driver); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, 1), this); + } + + private MenuNavigation getNavigationLinks(Pages pages) { + switch (pages) { + + case USER_SETTINGS_PROFILE: + return new MenuNavigation(userSettingsExpand, profileLnk); + + default: + return null; + } + } + + public DomiSMPPage navigateTo(Pages page) { + + wait.forElementToHaveText(sideBar); + + log.debug("Get link to " + page.name()); + switch (page) { +// case SEARCH_RESOURCES: +// expandSection(resourcesExpandLnk); +// return new DLink(driver, resourcesLnk); +// case ADMINISTRATION_EDIT_DOMAINS: +// expandSection(administrationExpand); +// return new DLink(driver, editDomainsLnk); +// case ADMINISTRATION_EDIT_GROUPS: +// expandSection(administrationExpand); +// return new DLink(driver, editGroupsLnk); +// case ADMINISTRATION_EDIT_RESOURCES: +// expandSection(administrationExpand); +// return new DLink(driver, editResourcesLnk); +// case SYSTEM_SETTINGS_USERS: +// expandSection(systemSettingsExpand); +// return new DLink(driver, usersLnk); +// case SYSTEM_SETTINGS_DOMAINS: +// expandSection(systemSettingsExpand); +// return new DLink(driver, domainsLnk); +// case SYSTEM_SETTINGS_KEYSTORE: +// expandSection(systemSettingsExpand); +// return new DLink(driver, keystoreLnk); +// case SYSTEM_SETTINGS_TRUSTSTORE: +// expandSection(systemSettingsExpand); +// return new DLink(driver, truststoreLnk); +// case SYSTEM_SETTINGS_EXTENSIONS: +// expandSection(systemSettingsExpand); +// return new DLink(driver, extensionsLnk); +// case SYSTEM_SETTINGS_PROPERTIES: +// expandSection(systemSettingsExpand); +// return new DLink(driver, propertiesLnk); +// case SYSTEM_SETTINGS_ALERS: +// expandSection(systemSettingsExpand); +// return new DLink(driver, alersLnk); + case USER_SETTINGS_PROFILE: + openSubmenu(userSettingsExpand, profileLnk); + return new ProfilePage(driver); +// case USER_SETTINGS_ACCESS_TOKEN: +// //expandSection(userSettingsExpand); +// //accessTokensLnk.click(); +// return new ProfilePage(driver); +// case USER_SETTINGS_CERTIFICATES: +// expandSection(userSettingsExpand); +// return new DLink(driver, certificatesLnk); + default: + return null; + } + } + + public Boolean isMenuAvailable(Pages page) { + MenuNavigation navigationLinks = getNavigationLinks(page); + try { + if (navigationLinks.menuLink.isEnabled()) { + navigationLinks.menuLink.click(); + if (navigationLinks.submenuLink.isEnabled()) { + return true; + } else { + return false; + } + } + return false; + } catch (NoSuchElementException e) { + return false; + } + } + + private void openSubmenu(WebElement menu, @org.jetbrains.annotations.NotNull WebElement submenu) { + try { + submenu.click(); + if (submenu.getText().contains(getBreadcrump().getCurrentPage())) { + log.info("Current page is " + getBreadcrump().getCurrentPage()); + + } else { + log.error("Current page is not as expected. EXPECTED: " + submenu.getText() + "but ACTUAL PAGE: " + getBreadcrump().getCurrentPage()); + throw new RuntimeException(); + } + + } catch (ElementNotInteractableException exception) { + menu.click(); + submenu.click(); + if (submenu.getText().contains(getBreadcrump().getCurrentPage())) { + log.info("Current page is " + getBreadcrump().getCurrentPage()); + + } else { + log.error("Current page is not as expected. EXPECTED: " + submenu.getText() + "but ACTUAL PAGE: " + getBreadcrump().getCurrentPage()); + throw new RuntimeException(); + } + } + } + + public class MenuNavigation { + WebElement menuLink; + WebElement submenuLink; + + public MenuNavigation(WebElement menuLink, WebElement submenuLink) { + this.menuLink = menuLink; + this.submenuLink = submenuLink; + } + } +} + + + diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java new file mode 100644 index 0000000000000000000000000000000000000000..fd7926f7323b78cc13c5632e39ff8d769dc2cf9a --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java @@ -0,0 +1,17 @@ +package ddsl.dobjects; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public class DButton extends DObject { + public DButton(WebDriver driver, WebElement element) { + super(driver, element); + } + + + @Override + public String getText() { + return element.findElement(By.cssSelector("span > span")).getText().trim(); + } +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java new file mode 100644 index 0000000000000000000000000000000000000000..d7451d5274ed407c9f43d386ef3b270cfb87a1a3 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java @@ -0,0 +1,40 @@ +package ddsl.dobjects; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public class DInput extends DObject { + public DInput(WebDriver driver, WebElement element) { + super(driver, element); + } + + public void fill(String value) throws Exception { + if (null == value) { + return; + } + if (isEnabled()) { + element.clear(); + element.sendKeys(value); + } else { + throw new Exception("Cannot type disabled field"); + } + } + + public void clear() throws Exception { + if (isEnabled()) { + element.clear(); + } else { + throw new Exception("Cannot type disabled field"); + } + } + + @Override + public String getText() { + if (isPresent()) { + return element.getAttribute("value").trim(); + } + return null; + } + + +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java new file mode 100644 index 0000000000000000000000000000000000000000..05abd0bfc5ee292a876abe1a0e6a715919f40e62 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java @@ -0,0 +1,20 @@ +package ddsl.dobjects; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public class DLink extends DObject { + + + public DLink(WebDriver driver, WebElement element) { + super(driver, element); + } + + public String getLinkText() throws Exception { + if (isPresent()) { + return super.getText(); + } + throw new Exception(); + } + +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java new file mode 100644 index 0000000000000000000000000000000000000000..93f1cd6ff03af626f03b2e57e15e9627fcc3b47f --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java @@ -0,0 +1,89 @@ +package ddsl.dobjects; + +import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DObject { + protected final Logger log = LoggerFactory.getLogger(this.getClass()); + public WebElement element; + protected WebDriver driver; + protected DWait wait; + + public DObject(WebDriver driver, WebElement element) { + wait = new DWait(driver); + this.driver = driver; + this.element = element; + } + + public boolean isPresent() { + try { + wait.forElementToBe(element); + scrollIntoView(); + } catch (Exception e) { + return false; + } + return true; + } + + public boolean isEnabled() throws Exception { + if (isPresent()) { + wait.forElementToBeEnabled(element); + return element.isEnabled(); + } + throw new Exception(); + } + + public boolean isDisabled() throws Exception { + if (isPresent()) { + wait.forElementToBeDisabled(element); + return !element.isEnabled(); + } + throw new Exception(); + } + + public boolean isVisible() throws Exception { + if (isPresent()) { + wait.forElementToBeEnabled(element); + return element.isDisplayed(); + } + throw new Exception(); + } + + public String getText() throws Exception { + if (!isPresent()) { + throw new Exception(); + } + scrollIntoView(); + String text = ((JavascriptExecutor) driver).executeScript("return arguments[0].innerText;", element).toString(); + return text.trim(); + } + + public void scrollIntoView() { + ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", element); + } + + public void click() throws Exception { + if (isEnabled()) { + wait.forElementToBeClickable(element).click(); + } else { + throw new Exception("Not enabled"); + } + } + + public String getAttribute(String attributeName) throws Exception { + if (isPresent()) { + String attr = element.getAttribute(attributeName); + if (attr == null) { + log.debug("Attribute " + attributeName + " not found"); + return null; + } + return attr.trim(); + } + throw new RuntimeException(); + } + + +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java new file mode 100644 index 0000000000000000000000000000000000000000..1561252692c9cefb7e1f8ec8bf4fbd11e79d9304 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java @@ -0,0 +1,25 @@ +package ddsl.dobjects; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.Select; + + +public class DSelect extends DObject { + + Select select = new Select(element); + + public DSelect(WebDriver driver, WebElement element) { + super(driver, element); + } + + public void selectValue(String value) { + select.selectByVisibleText(value); + } + + public String getCurrentValue() { + return element.getText(); + } + + +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java new file mode 100644 index 0000000000000000000000000000000000000000..ea486d48ee634598d97318af3658db8bf7e8f1e8 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java @@ -0,0 +1,153 @@ +package ddsl.dobjects; + +import org.openqa.selenium.By; +import org.openqa.selenium.StaleElementReferenceException; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedCondition; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import utils.TestRunData; + +import java.time.Duration; + +public class DWait { + public final WebDriverWait defaultWait; + public final WebDriverWait longWait; + public final WebDriverWait shortWait; + protected final Logger log = LoggerFactory.getLogger(this.getClass()); + private TestRunData data = new TestRunData(); + private WebDriver driver; + + public DWait(WebDriver driver) { + this.defaultWait = new WebDriverWait(driver, data.getTIMEOUTinDuration()); + this.longWait = new WebDriverWait(driver, data.getLongWaitInDuration()); + this.shortWait = new WebDriverWait(driver, Duration.ofMinutes(1)); + this.driver = driver; + } + + public void forXMillis(Integer millis) { + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + log.error("EXCEPTION: ", e); + } + } + + public WebElement forElementToBeClickable(WebElement element) { + return defaultWait.until(ExpectedConditions.elementToBeClickable(element)); + } + + public WebElement forElementToBeVisible(WebElement element) { + return defaultWait.until(ExpectedConditions.visibilityOf(element)); + } + + public WebElement forElementToBeVisible(WebElement element, boolean waitLonger) { + if (waitLonger) { + return longWait.until(ExpectedConditions.visibilityOf(element)); + } + log.error(String.valueOf(element.isDisplayed())); + return defaultWait.until(ExpectedConditions.visibilityOf(element)); + } + + public void forElementToBeEnabled(WebElement element) { + int maxTimeout = data.getTIMEOUT() * 1000; + int waitedSoFar = 0; + + while ((null != element.getAttribute("disabled")) && (waitedSoFar < maxTimeout)) { + waitedSoFar += 300; + forXMillis(300); + } + } + + public void forElementToBeDisabled(WebElement element) { + int maxTimeout = data.getTIMEOUT() * 1000; + int waitedSoFar = 0; + + while ((null == element.getAttribute("disabled")) && (waitedSoFar < maxTimeout)) { + waitedSoFar += 300; + forXMillis(300); + } + } + + public void forAttributeNotEmpty(WebElement element, String attributeName) { + defaultWait.until(ExpectedConditions.attributeToBeNotEmpty(element, attributeName)); + } + + public void forElementToBeGone(WebElement element) { + defaultWait.until((ExpectedConditions.invisibilityOf(element))); + + forXMillis(500); + } + + public void forInvisibilityofLocator(By locator) { + defaultWait.until((ExpectedConditions.invisibilityOfElementLocated(locator))); + } + + public void forElementToBeGone(By selector) { + + log.debug("Waiting for element to be gone: " + selector.toString()); + int c = 0; + + while (c < 50) { + try { + driver.findElement(selector); + } catch (Exception e) { + break; + } + forXMillis(100); + c++; + } + + } + + public void forElementToBe(WebElement element) { + + defaultWait.until(new ExpectedCondition<Boolean>() { + @Override + public Boolean apply(WebDriver driver) { + return element.getLocation() != null; + } + }); + + } + + public void forAttributeToContain(WebElement element, String attributeName, String value) { + defaultWait.until(ExpectedConditions.attributeContains(element, attributeName, value)); + } + + public void forAttributeToNOTContain(WebElement element, String attributeName, String value) { + defaultWait.until(new ExpectedCondition<Boolean>() { + @Override + public Boolean apply(WebDriver driver) { + return !element.getAttribute(attributeName).contains(value); + } + }); + } + + public void forAttributeToContain(WebElement element, String attributeName, String value, boolean waitLonger) { + + WebDriverWait myWait = defaultWait; + if (waitLonger) { + myWait = longWait; + } + myWait.until(ExpectedConditions.attributeContains(element, attributeName, value)); + } + + public void forElementToHaveText(WebElement element) { + defaultWait.until(new ExpectedCondition<Boolean>() { + @Override + public Boolean apply(WebDriver driver) { + return !element.getText().trim().isEmpty(); + } + }); + } + + public void forElementToContainText(WebElement element, String text) { + defaultWait.ignoring(StaleElementReferenceException.class) + .until(ExpectedConditions.textToBePresentInElement(element, text)); + + } +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/ApplicationRoles.java b/domiSMP-ui-tests/src/main/java/ddsl/enums/ApplicationRoles.java similarity index 94% rename from domiSMP-ui-tests/src/main/java/ddsl/ApplicationRoles.java rename to domiSMP-ui-tests/src/main/java/ddsl/enums/ApplicationRoles.java index a76caba0db6096b33257ffef54e262497395bb34..9a40519e12f0aa4d9aeca8b34c9ece97d2a7a67d 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/ApplicationRoles.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/enums/ApplicationRoles.java @@ -1,4 +1,4 @@ -package ddsl; +package ddsl.enums; import java.util.Arrays; import java.util.List; diff --git a/domiSMP-ui-tests/src/main/java/ddsl/enums/Pages.java b/domiSMP-ui-tests/src/main/java/ddsl/enums/Pages.java new file mode 100644 index 0000000000000000000000000000000000000000..88ecd432fdd8440b270b10c387dae28336647610 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/enums/Pages.java @@ -0,0 +1,18 @@ +package ddsl.enums; + +public enum Pages { + SEARCH_RESOURCES, + ADMINISTRATION_EDIT_DOMAINS, + ADMINISTRATION_EDIT_GROUPS, + ADMINISTRATION_EDIT_RESOURCES, + SYSTEM_SETTINGS_USERS, + SYSTEM_SETTINGS_DOMAINS, + SYSTEM_SETTINGS_KEYSTORE, + SYSTEM_SETTINGS_TRUSTSTORE, + SYSTEM_SETTINGS_EXTENSIONS, + SYSTEM_SETTINGS_PROPERTIES, + SYSTEM_SETTINGS_ALERS, + USER_SETTINGS_PROFILE, + USER_SETTINGS_ACCESS_TOKEN, + USER_SETTINGS_CERTIFICATES +} diff --git a/domiSMP-ui-tests/src/main/java/pages/LoginPage.java b/domiSMP-ui-tests/src/main/java/pages/LoginPage.java index 0e4a1e3fcc3cb0360a552c650511eb2e753d0089..7dbae68f098aa416bfadb6fcd425b02df876da18 100644 --- a/domiSMP-ui-tests/src/main/java/pages/LoginPage.java +++ b/domiSMP-ui-tests/src/main/java/pages/LoginPage.java @@ -1,4 +1,47 @@ package pages; -public class LoginPage { +import ddsl.dcomponents.DomiSMPPage; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; + +import java.util.HashMap; + +public class LoginPage extends DomiSMPPage { + @FindBy(id = "username_id") + private WebElement username; + @FindBy(id = "password_id") + private WebElement password; + @FindBy(id = "loginbutton_id") + private WebElement loginBtn; + + public LoginPage(WebDriver driver) { + super(driver); + log.debug(".... init"); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this); + } + + public DomiSMPPage login(String user, String pass) throws Exception { + HashMap<String, String> usr = new HashMap<>(); + usr.put("username", user); + usr.put("pass", pass); + log.debug("Login started " + usr.get("username") + " / " + usr.get("pass")); + + goToLoginPage(); + weToDInput(username).fill(usr.get("username")); + weToDInput(password).fill(usr.get("pass")); + weToDButton(loginBtn).click(); + + if (getExpiredDialoginbutton().isPresent()) { + log.info("Expired password dialog is present."); + getExpiredDialoginbutton().click(); + } + ; + + return new DomiSMPPage(driver); + + } + } diff --git a/domiSMP-ui-tests/src/main/java/pages/ProfilePage.java b/domiSMP-ui-tests/src/main/java/pages/ProfilePage.java new file mode 100644 index 0000000000000000000000000000000000000000..2e57a9977bbdedb23319667a6d327d1ec3cd3749 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/pages/ProfilePage.java @@ -0,0 +1,80 @@ +package pages; + +import ddsl.dcomponents.DomiSMPPage; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; + +public class ProfilePage extends DomiSMPPage { + + @FindBy(id = "smpTheme_id") + private WebElement themeSel; + @FindBy(id = "moment-locale") + private WebElement localeSel; + @FindBy(id = "saveButton") + private WebElement saveBtn; + @FindBy(id = "emailAddress_id") + private WebElement emailAddressInput; + @FindBy(id = "fullName_id") + private WebElement fullNameInput; + + public ProfilePage(WebDriver driver) { + super(driver); + log.debug(".... init"); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this); + } + + public void changeUserProfileData(String emailValue, String fullNameValue, String selectThemeValue, String localeValue) throws Exception { + try { + if (!emailValue.isEmpty()) { + weToDInput(emailAddressInput).fill(emailValue); + } + if (!emailValue.isEmpty()) { + weToDInput(fullNameInput).fill(fullNameValue); + } + if (!selectThemeValue.isEmpty()) { + weToDSelect(themeSel).selectValue(selectThemeValue); + } + if (!localeValue.isEmpty()) { + weToDSelect(localeSel).selectValue(localeValue); + } + + } catch (Exception e) { + log.error("Cannot change User Profile Data ", e); + } + + if (saveBtn.isEnabled()) { + saveBtn.click(); + } else { + log.debug("Save button enable is " + saveBtn.isEnabled()); + } + + try { + getAlertArea().getAlertMessage(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + + public String getSelectedTheme() { + return weToDSelect(themeSel).getCurrentValue(); + } + + public String getSelectedLocale() { + return weToDSelect(localeSel).getCurrentValue(); + } + + public String getEmailAddress() { + return weToDInput(emailAddressInput).getText(); + } + + public String getFullName() { + return weToDInput(fullNameInput).getText(); + } + + +} \ No newline at end of file diff --git a/domiSMP-ui-tests/src/main/java/pages/baseComponents/PageComponent.java b/domiSMP-ui-tests/src/main/java/pages/baseComponents/PageComponent.java deleted file mode 100644 index 710c588596685d1955afeae20e431aea4126128b..0000000000000000000000000000000000000000 --- a/domiSMP-ui-tests/src/main/java/pages/baseComponents/PageComponent.java +++ /dev/null @@ -1,19 +0,0 @@ -package pages.baseComponents; - -import org.openqa.selenium.WebDriver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import pages.objects.Wait; -import utils.TestRunData; - -public class PageComponent { - protected final Logger log = LoggerFactory.getLogger(this.getClass()); - public Wait wait; - protected WebDriver driver; - protected TestRunData data = new TestRunData(); - - public PageComponent(WebDriver driver) { - this.driver = driver; - this.wait = new Wait(driver); - } -} diff --git a/domiSMP-ui-tests/src/main/java/pages/components/DomiSMPPage.java b/domiSMP-ui-tests/src/main/java/pages/components/DomiSMPPage.java deleted file mode 100644 index 92d6445277cc91cbf6e665a9656aee03afa1236f..0000000000000000000000000000000000000000 --- a/domiSMP-ui-tests/src/main/java/pages/components/DomiSMPPage.java +++ /dev/null @@ -1,19 +0,0 @@ -package pages.components; - -import ddsl.SideNavigation; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.support.PageFactory; -import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; -import pages.baseComponents.PageComponent; - -public class DomiSMPPage extends PageComponent { - public DomiSMPPage(WebDriver driver) { - super(driver); - PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this); - } - - public SideNavigation getSidebar() { - return new SideNavigation(driver); - } - -} diff --git a/domiSMP-ui-tests/src/main/java/pages/objects/Wait.java b/domiSMP-ui-tests/src/main/java/pages/objects/Wait.java deleted file mode 100644 index e36ed275240a705049b925a559973371bd764fab..0000000000000000000000000000000000000000 --- a/domiSMP-ui-tests/src/main/java/pages/objects/Wait.java +++ /dev/null @@ -1,33 +0,0 @@ -package pages.objects; - -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.support.ui.WebDriverWait; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import utils.TestRunData; - -import java.time.Duration; - -public class Wait { - public final WebDriverWait defaultWait; - public final WebDriverWait longWait; - public final WebDriverWait shortWait; - protected final Logger log = LoggerFactory.getLogger(this.getClass()); - private TestRunData data = new TestRunData(); - private WebDriver driver; - - public Wait(WebDriver driver) { - this.defaultWait = new WebDriverWait(driver, data.getTIMEOUTinDuration()); - this.longWait = new WebDriverWait(driver, data.getLongWaitInDuration()); - this.shortWait = new WebDriverWait(driver, Duration.ofMinutes(1)); - this.driver = driver; - } - - public void forXMillis(Integer millis) { - try { - Thread.sleep(millis); - } catch (InterruptedException e) { - log.error("EXCEPTION: ", e); - } - } -} diff --git a/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java index 4fdabfc02dc25931bd054ec709a4d1caac06e252..2f30da5f1a477f0a8e09c30ea309f67e36aad4f0 100644 --- a/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java +++ b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java @@ -25,78 +25,22 @@ public class BaseRestClient { protected List<NewCookie> cookies; protected String token; - //protected ObjectProvider provider; - protected String username; protected String password; + protected String newPassword; public BaseRestClient(String username, String password) { this.username = username; this.password = password; } + public BaseRestClient() { this.username = data.getAdminUser().get("username"); this.password = data.getAdminUser().get("pass"); } - protected WebResource.Builder decorateBuilder(WebResource resource) { - - WebResource.Builder builder = resource.getRequestBuilder(); - - if (null != cookies) { - log.debug(""); - for (NewCookie cookie : cookies) { - builder = builder.cookie( - new Cookie(cookie.getName(), - cookie.getValue(), - "/", - "" - ) - ); - log.debug("cookie " + cookie + " is added to the builder"); - } - } - if (null != token) { - builder = builder.header("X-XSRF-TOKEN", token); - } - - return builder; - } - - public List<NewCookie> login() throws SMPRestException { - log.debug("Rest client using to login: " + this.username); - HashMap<String, String> params = new HashMap<>(); - params.put("username", this.username); - params.put("password", this.password); - - ClientResponse response = resource.path(RestServicePaths.LOGIN) - .type(MediaType.APPLICATION_JSON) - .post(ClientResponse.class, new JSONObject(params).toString()); - - JSONObject responseBody = new JSONObject(response.getEntity(String.class)); - // extract userId to be used in the Paths of the requests - - data.setUserId((String) responseBody.get("userId")); - log.debug("Last Userid is " + data.getUserId()); - - if (response.getStatus() == 200) { - return response.getCookies(); - } - throw new SMPRestException("Login failed", response); - - } - - private String extractToken() { - String mytoken = null; - for (NewCookie cookie : cookies) { - if (StringUtils.equalsIgnoreCase(cookie.getName(), "XSRF-TOKEN")) { - mytoken = cookie.getValue(); - } - } - return mytoken; - } - + // ---------------------------------------Default request methods ------------------------------------------------- protected ClientResponse requestPUT(WebResource resource, String params, String type) { if (!isLoggedIn()) { @@ -109,9 +53,7 @@ public class BaseRestClient { WebResource.Builder builder = decorateBuilder(resource); - return builder - .type(type) - .put(ClientResponse.class, params); + return builder.type(type).put(ClientResponse.class, params); } protected ClientResponse requestPUT(WebResource resource, JSONObject body, String type) { @@ -127,9 +69,7 @@ public class BaseRestClient { WebResource.Builder builder = decorateBuilder(resource); - return builder - .type(type) - .put(ClientResponse.class, body.toString()); + return builder.type(type).put(ClientResponse.class, body.toString()); } @@ -144,14 +84,59 @@ public class BaseRestClient { protected ClientResponse requestPOST(WebResource resource, String params, String type) { - WebResource.Builder builder = decorateBuilder(resource); - return builder - .type(type) - .post(ClientResponse.class, params); + return builder.type(type).post(ClientResponse.class, params); + } + + // -------------------------------------------- Login -------------------------------------------------------------- + + protected WebResource.Builder decorateBuilder(WebResource resource) { + + WebResource.Builder builder = resource.getRequestBuilder(); + + if (null != cookies) { + log.debug(""); + for (NewCookie cookie : cookies) { + builder = builder.cookie(new Cookie(cookie.getName(), cookie.getValue(), "/", "")); + log.debug("cookie " + cookie + " is added to the builder"); + } + } + if (null != token) { + builder = builder.header("X-XSRF-TOKEN", token); + } + + return builder; } + public List<NewCookie> login() throws SMPRestException { + log.debug("Rest client using to login: " + this.username); + HashMap<String, String> params = new HashMap<>(); + params.put("username", this.username); + params.put("password", this.password); + + ClientResponse response = resource.path(RestServicePaths.LOGIN).type(MediaType.APPLICATION_JSON).post(ClientResponse.class, new JSONObject(params).toString()); + + JSONObject responseBody = new JSONObject(response.getEntity(String.class)); + // extract userId to be used in the Paths of the requests + + data.setUserId((String) responseBody.get("userId")); + log.debug("Last Userid is " + data.getUserId()); + + if (response.getStatus() == 200) { + return response.getCookies(); + } + throw new SMPRestException("Login failed", response); + } + private String extractToken() { + String mytoken = null; + for (NewCookie cookie : cookies) { + if (StringUtils.equalsIgnoreCase(cookie.getName(), "XSRF-TOKEN")) { + mytoken = cookie.getValue(); + } + } + return mytoken; + } public void refreshCookies() throws Exception { if (isLoggedIn()) { return; @@ -167,7 +152,6 @@ public class BaseRestClient { throw new Exception("Could not obtain XSRF token, tests will not be able to generate necessary data!"); } } - public boolean isLoggedIn() { WebResource.Builder builder = decorateBuilder(resource.path(RestServicePaths.CONNECTED)); int response = builder.get(ClientResponse.class).getStatus(); diff --git a/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java index e25887ab5e2578e026efb704566ec3a87a8fb4c4..cbbb65d919eeaaca29bbcba65bb63426f3cfeef0 100644 --- a/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java +++ b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java @@ -5,8 +5,9 @@ public class DomiSMPRestClient extends BaseRestClient { super(); } - public UsersClient users() { - return new UsersClient(username, password); + // -------------------------------------------- get clients ----------------------------------------------------------- + public UserClient users() { + return new UserClient(username, password); } } diff --git a/domiSMP-ui-tests/src/main/java/rest/UserClient.java b/domiSMP-ui-tests/src/main/java/rest/UserClient.java new file mode 100644 index 0000000000000000000000000000000000000000..6594bd1c7e72ecffefeb564717b53bf9492a2289 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/rest/UserClient.java @@ -0,0 +1,63 @@ +package rest; + +import com.sun.jersey.api.client.ClientResponse; +import org.json.JSONObject; +import rest.models.CreateUserModel; + +public class UserClient extends BaseRestClient { + public UserClient(String username, String password) { + super(username, password); + } + + public JSONObject createUser(CreateUserModel user) { + + JSONObject usrObj = new JSONObject(user); + + if (!isLoggedIn()) { + try { + refreshCookies(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + String usersPath = RestServicePaths.getUsersPath(data.userId); + + ClientResponse response = jsonPUT(resource.path(usersPath), usrObj); + JSONObject responseBody = new JSONObject(response.getEntity(String.class)); + // extract userId to be used in the Paths of the requests + + String forUserId = (String) responseBody.get("userId"); + + //Set password for user + changePassword(forUserId, data.getNewPassword()); + + if (response.getStatus() != 200) { + try { + throw new SMPRestException("Could not create user", response); + } catch (SMPRestException e) { + throw new RuntimeException(e); + } + } + log.debug("User: " + user.getUsername() + " has been created successfully!"); + return responseBody; + + } + + public JSONObject changePassword(String forUserId, String newPassword) { + + + String changePasswordPath = RestServicePaths.getChangePasswordPath(data.userId, forUserId); + JSONObject passwordChangeBody = new JSONObject(); + passwordChangeBody.put("currentPassword", password); + passwordChangeBody.put("newPassword", newPassword); + + + ClientResponse response = jsonPUT(resource.path(changePasswordPath), passwordChangeBody); + JSONObject responseBody = new JSONObject(response.getEntity(String.class)); + return responseBody; + + } + + +} diff --git a/domiSMP-ui-tests/src/main/java/rest/UsersClient.java b/domiSMP-ui-tests/src/main/java/rest/UsersClient.java deleted file mode 100644 index 5c62a3b0e5c38c3fd28a8e62ddfdc16f107ed696..0000000000000000000000000000000000000000 --- a/domiSMP-ui-tests/src/main/java/rest/UsersClient.java +++ /dev/null @@ -1,47 +0,0 @@ -package rest; - -import com.sun.jersey.api.client.ClientResponse; -import models.rest.CreateUserModel; -import org.json.JSONArray; -import org.json.JSONObject; -import utils.Generator; - -public class UsersClient extends BaseRestClient { - public UsersClient(String username, String password) { - super(username, password); - } - - public void createUser(String username, String role, String email) { - - CreateUserModel createUserModel = new CreateUserModel(username, true, role, email, Generator.randomAlphaNumeric(6), "default_theme", "fr"); - JSONObject usrObj = new JSONObject(createUserModel); - - JSONArray payload = new JSONArray(); - payload.put(usrObj); - - - - if (!isLoggedIn()) { - try { - refreshCookies(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - String usersPath = RestServicePaths.getUsersPath(data.userId); - - ClientResponse response = jsonPUT(resource.path(usersPath), usrObj); - - if (response.getStatus() != 200) { - try { - throw new SMPRestException("Could not create user", response); - } catch (SMPRestException e) { - throw new RuntimeException(e); - } - } - log.debug("User: " + username + " has been created successfully!"); - } - - -} diff --git a/domiSMP-ui-tests/src/main/java/models/rest/CreateUserModel.java b/domiSMP-ui-tests/src/main/java/rest/models/CreateUserModel.java similarity index 56% rename from domiSMP-ui-tests/src/main/java/models/rest/CreateUserModel.java rename to domiSMP-ui-tests/src/main/java/rest/models/CreateUserModel.java index 1810a70e212f55c61a4780cd4449cba7624bd7eb..80589b6a6c5ab8db238548d553d2dba7e899308c 100644 --- a/domiSMP-ui-tests/src/main/java/models/rest/CreateUserModel.java +++ b/domiSMP-ui-tests/src/main/java/rest/models/CreateUserModel.java @@ -1,6 +1,10 @@ -package models.rest; +package rest.models; +import ddsl.enums.ApplicationRoles; +import ddsl.enums.SMPThemes; +import utils.Generator; + public class CreateUserModel { private String userId; @@ -22,6 +26,9 @@ public class CreateUserModel { this.smpLocale = smpLocale; } + public CreateUserModel() { + } + public String getUserId() { return userId; } @@ -86,5 +93,31 @@ public class CreateUserModel { public void setSmpLocale(String smpLocale) { this.smpLocale = smpLocale; } + + public static CreateUserModel createUserWithUSERrole() { + CreateUserModel userModel = new CreateUserModel(); + userModel.username = ("AUT_username_ " + Generator.randomAlphaNumeric(4)).toLowerCase(); + userModel.active = true; + userModel.role = ApplicationRoles.USER; + userModel.emailAddress = "AUT_email_ " + Generator.randomAlphaNumeric(4) + "@automation.com"; + ; + userModel.fullName = "AUT_fullname_ " + Generator.randomAlphaNumeric(4); + userModel.smpTheme = SMPThemes.getRandomTheme().toString(); + userModel.smpLocale = "English"; + return userModel; + } + + public static CreateUserModel createUserWithADMINrole() { + CreateUserModel userModel = new CreateUserModel(); + userModel.username = ("AUT_username_ " + Generator.randomAlphaNumeric(4)).toLowerCase(); + userModel.active = true; + userModel.role = ApplicationRoles.SYSTEM_ADMIN; + userModel.emailAddress = "AUT_email_ " + Generator.randomAlphaNumeric(4) + "@automation.com"; + ; + userModel.fullName = "AUT_fullname_ " + Generator.randomAlphaNumeric(4); + userModel.smpTheme = SMPThemes.getRandomTheme().toString(); + userModel.smpLocale = "English"; + return userModel; + } } diff --git a/domiSMP-ui-tests/src/main/java/utils/DriverManager.java b/domiSMP-ui-tests/src/main/java/utils/DriverManager.java index 7e2d8f2ed5248111e75e6a31076549cc9a9146b1..2ac4c7a7e3a90fad4a3d44f5b989560650aba740 100644 --- a/domiSMP-ui-tests/src/main/java/utils/DriverManager.java +++ b/domiSMP-ui-tests/src/main/java/utils/DriverManager.java @@ -2,7 +2,6 @@ package utils; import org.apache.commons.lang3.StringUtils; import org.openqa.selenium.Dimension; -import org.openqa.selenium.Proxy; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; @@ -62,11 +61,4 @@ public class DriverManager { return new FirefoxDriver(options); } - private static Proxy getProxy() { - String proxyAddress = data.getProxyAddress(); - Proxy proxy = new Proxy(); - proxy.setHttpProxy(proxyAddress).setSslProxy(proxyAddress); - return proxy; - } - } diff --git a/domiSMP-ui-tests/src/main/java/utils/TestRunData.java b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java index c9255c121680f298a788ebe905c471d923f9b51d..2deb4c502532b7dc1c89699e829fb7ffc596619b 100644 --- a/domiSMP-ui-tests/src/main/java/utils/TestRunData.java +++ b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java @@ -1,6 +1,6 @@ package utils; -import ddsl.ApplicationRoles; +import ddsl.enums.ApplicationRoles; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,7 +18,6 @@ public class TestRunData { public static SimpleDateFormat CSV_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); public static SimpleDateFormat REST_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); public static SimpleDateFormat REST_JMS_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - public static SimpleDateFormat DATEWIDGET_DATE_FORMAT = new SimpleDateFormat(" dd/MM/yyyy HH:mm"); public String userId; static Properties prop = new Properties(); protected final Logger log = LoggerFactory.getLogger(this.getClass()); @@ -40,7 +39,7 @@ public class TestRunData { private void loadTestData() { try { String filename = System.getProperty("propertiesFile"); - FileInputStream stream = new FileInputStream(new File(filename)); + FileInputStream stream = new FileInputStream(filename); prop.load(stream); } catch (Exception e) { throw new RuntimeException(e); @@ -57,18 +56,15 @@ public class TestRunData { return toReturn; } - public String defaultPass() { - return prop.getProperty("default.password"); - } - - public String getNewTestPass() { - return prop.getProperty("new.password"); - } public HashMap<String, String> getAdminUser() { return getUser(ApplicationRoles.SYSTEM_ADMIN); } + public String getNewPassword() { + return prop.getProperty("new.password"); + } + public String getUiBaseUrl() { String url = prop.getProperty("UI_BASE_URL"); log.debug(url); diff --git a/domiSMP-ui-tests/src/main/resources/myLocal.properties b/domiSMP-ui-tests/src/main/resources/myLocal.properties index cf0e461025c8b77fcb697830594a9b62b5330fd6..4cb63757445890c4008d31682ebfbbddf9e5a084 100644 --- a/domiSMP-ui-tests/src/main/resources/myLocal.properties +++ b/domiSMP-ui-tests/src/main/resources/myLocal.properties @@ -1,15 +1,15 @@ # Local runner, Edeltest2 target, Single tenancy # Test runner properties webdriver.ie.driver=MicrosoftWebDriver.exe -#webdriver.chrome.driver=/opt/programs/web-driver/chromedriver -webdriver.gecko.driver=/data/opt/programs/web-driver/geckodriver +webdriver.chrome.driver=./chromedriver.exe +webdriver.gecko.driver=./geckodriver.exe reports.folder=./reports/ LONG_TIMEOUT_SECONDS=15 SHORT_TIMEOUT_SECONDS=5 headless=false # Test system properties -#UI_BASE_URL=http://eulogin.protected.smp.local:8982/smp/ui -UI_BASE_URL=http://localhost:8080/smp/ui +UI_BASE_URL=http://eulogin.protected.smp.local:8982/smp/ui +#UI_BASE_URL=http://localhost:8080/smp/ui SYSTEM_ADMIN.username=system SYSTEM_ADMIN.password=123456 ROLE_ADMIN.username=admin diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/BaseTest.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/BaseTest.java index 4979b1a18d86e87be5d360a86df2191fa11a6448..337c8b9f457ff11845ff2414f1c49db05fd6602e 100644 --- a/domiSMP-ui-tests/src/test/java/domiSMPTests/BaseTest.java +++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/BaseTest.java @@ -1,18 +1,13 @@ package domiSMPTests; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; import org.openqa.selenium.WebDriver; import rest.DomiSMPRestClient; -import utils.MyLogger; import utils.TestRunData; public class BaseTest { public static TestRunData data = new TestRunData(); public static DomiSMPRestClient rest = new DomiSMPRestClient(); - public WebDriver driver; - public ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/LoginPgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/LoginPgTests.java index e835287153d7ca7e1c95003d9a5018f54720a032..eb8abd41000756ddc97d07ec1f907d708f1b762d 100644 --- a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/LoginPgTests.java +++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/LoginPgTests.java @@ -1,6 +1,6 @@ package domiSMPTests.ui; -import ddsl.ApplicationRoles; +import ddsl.enums.ApplicationRoles; import domiSMPTests.SeleniumTest; import org.testng.Reporter; import org.testng.annotations.Test; @@ -22,13 +22,12 @@ public class LoginPgTests extends SeleniumTest { String username = Generator.randomAlphaNumeric(10); String email = Generator.randomAlphaNumeric(5) + "@automatedTesint.com"; - rest.users().createUser(username, role, email); + //rest.users().createUser(username, role, email); Reporter.log(String.format("Created user %s with role %s", username, role)); LOG.info("Created user [{}] with role [{}]", username, role); Reporter.log(String.format("Login %s with role %s", username, role)); LOG.info(String.format("Login %s with role %s", username, role)); - //login(username, data.defaultPass()); } diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java new file mode 100644 index 0000000000000000000000000000000000000000..8c13f4e662af016d75125e5215eb710309623ea1 --- /dev/null +++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java @@ -0,0 +1,48 @@ +package domiSMPTests.ui; + +import ddsl.dcomponents.DomiSMPPage; +import ddsl.enums.Pages; +import domiSMPTests.SeleniumTest; +import org.testng.Assert; +import org.testng.annotations.Test; +import pages.LoginPage; +import rest.models.CreateUserModel; + + +public class ProfilePgTests extends SeleniumTest { + @Test(description = "PROF-01") + public void AllUsersAreAbleToSeeProfilePage() throws Exception { + CreateUserModel normalUser = CreateUserModel.createUserWithUSERrole(); + + rest.users().createUser(normalUser); + + DomiSMPPage homePage = new DomiSMPPage(driver); + LoginPage loginPage = homePage.goToLoginPage(); + loginPage.login(normalUser.getUsername(), data.getNewPassword()); + + //Check if menu is available + Assert.assertTrue(homePage.getSidebar().isMenuAvailable(Pages.USER_SETTINGS_PROFILE)); + + //Navigate to page + homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE); + + homePage.logout(); + + //Check if page is avaiable for Admin users + CreateUserModel adminUser = CreateUserModel.createUserWithUSERrole(); + rest.users().createUser(adminUser); + + loginPage = homePage.goToLoginPage(); + loginPage.login(adminUser.getUsername(), data.getNewPassword()); + + //Check if menu is available + Assert.assertTrue(homePage.getSidebar().isMenuAvailable(Pages.USER_SETTINGS_PROFILE)); + + //Navigate to page + homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE); + + //Check if ProfilePage is not available for anonymous users + homePage.logout(); + Assert.assertFalse(homePage.getSidebar().isMenuAvailable(Pages.USER_SETTINGS_PROFILE)); + } +}