Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit fbb87be7 authored by Mihai BOZ's avatar Mihai BOZ
Browse files

Pull request #39: EDELIVERY-12323 Automate new SMP UI testcases part 7

Merge in EDELIVERY/smp from EDELIVERY-12323-Automate_new_SMP_UI_testcases-part_7 to development

* commit '145fd1cb':
  fix PR comments
  fix issue when alert was blocking the code editor.
  updated mvn dependecies versions. renamed test methods to start with lowercase.
  modify locator for expired on element to fix test.
  Mapped Edit resource page, created rest methods to create resource and add member, created tests EDT-RES01, EDT-RES02, EDT-RES03, EDT-DOM02,
  Mapped Edit resource page, created rest methods to create resource and add member, created tests EDT-RES01, EDT-RES02
parents 56ff6cd2 145fd1cb
No related branches found
No related tags found
No related merge requests found
Pipeline #116713 passed with warnings
Showing
with 373 additions and 57 deletions
......@@ -13,23 +13,23 @@
<test.properties.path>./src/main/resources/myLocal.properties</test.properties.path>
<commons-csv_version>1.10.0</commons-csv_version>
<selenium-chrome-driver_version>4.11.0</selenium-chrome-driver_version>
<selenium-java_version>4.11.0</selenium-java_version>
<poi-ooxml_version>5.2.3</poi-ooxml_version>
<selenium-chrome-driver_version>4.15.0</selenium-chrome-driver_version>
<selenium-java_version>4.15.0</selenium-java_version>
<poi-ooxml_version>5.2.4</poi-ooxml_version>
<reflections_version>0.10.2</reflections_version>
<jersey-client_version>1.19.4</jersey-client_version>
<jersey-multipart_version>1.19.4</jersey-multipart_version>
<json_version>20230618</json_version>
<json_version>20231013</json_version>
<jackson_version>2.15.2</jackson_version>
<javax.ws.rs-api_version>2.1.1</javax.ws.rs-api_version>
<javax.ws.rs-api_version>2.1.1</javax.ws.rs-api_version>
<xmlunit_version>1.6</xmlunit_version>
<maven-surefire-plugin_version>3.1.2</maven-surefire-plugin_version>
<maven-surefire-plugin_version>3.2.2</maven-surefire-plugin_version>
<testng_version>7.8.0</testng_version>
<logback-classic_version>1.4.11</logback-classic_version>
<extentreports_version>5.1.0</extentreports_version>
<extentreports_version>5.1.1</extentreports_version>
<commons-lang3_version>3.13.0</commons-lang3_version>
<commons-io_version>2.13.0</commons-io_version>
<commons-io_version>2.15.0</commons-io_version>
</properties>
......@@ -232,6 +232,11 @@
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin_version}</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.12.2</version>
</dependency>
</dependencies>
......
......@@ -31,7 +31,6 @@ public class CommonPageWithTabs extends DomiSMPPage {
}
public String getAlertMessageAndClose() {
return getAlertArea().getAlertMessage();
}
}
......@@ -6,13 +6,10 @@ 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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Generic page used for pages which have small grid in the right of the page and tabs in the left. This element gives access to action buttons and elements of the page.
*/
public class CommonPageWithTabsAndGrid extends CommonPageWithTabs {
private final static Logger LOG = LoggerFactory.getLogger(CommonPageWithTabsAndGrid.class);
@FindBy(css = "mat-form-field input")
public WebElement filterInput;
@FindBy(css = "data-panel >div >div> mat-toolbar button:first-of-type")
......@@ -23,9 +20,7 @@ public class CommonPageWithTabsAndGrid extends CommonPageWithTabs {
public CommonPageWithTabsAndGrid(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
LOG.debug("CommonPageWithTabs is loaded");
}
public SmallGrid getLeftSideGrid() {
return new SmallGrid(driver, rightPanel);
}
......
......@@ -13,14 +13,11 @@ import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pages.LoginPage;
/**
* Page object for the common components from Domismp like navigation, right menu. This contains the locators of the page and the methods for the behaviour of the page
*/
public class DomiSMPPage extends DComponent {
private final static Logger LOG = LoggerFactory.getLogger(DomiSMPPage.class);
@FindBy(css = "cdk-overlay-backdrop cdk-overlay-dark-backdrop cdk-overlay-backdrop-showing")
protected WebElement overlay;
@FindBy(id = "login_id")
......@@ -63,7 +60,6 @@ public class DomiSMPPage extends DComponent {
Actions actions = new Actions(driver);
actions.moveToElement(logoutMenuBtn);
actions.perform();
logoutMenuBtn.click();
}
......@@ -71,31 +67,15 @@ public class DomiSMPPage extends DComponent {
driver.navigate().refresh();
waitForPageToLoaded();
}
//
// public AlertComponent getAlertArea() {
// return new AlertComponent(driver);
// }
public AlertComponent getAlertArea(){
if ( alertComponent == null){
alertComponent = new AlertComponent(driver);
}
return alertComponent;
}
public DButton getExpiredDialoginbutton() {
return weToDButton(dialogOKbutton);
}
public boolean isExpiredDialoginbuttonEnabled() {
try {
return weToDButton(dialogOKbutton).isPresent();
// return dialogOKbutton.isEnabled();
} catch (Exception e) {
LOG.info("Expiration poup not found", e);
return false;
}
}
public void waitForPageToLoaded() {
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.readyState").toString().equals("complete");
......
......@@ -16,10 +16,10 @@ public class AlertComponent extends DComponent {
private final static Logger LOG = LoggerFactory.getLogger(AlertComponent.class);
@FindBy(id = "alertmessage_id")
public WebElement alertToaster;
private WebElement alertToaster;
@FindBy(css = "[class = \"closebtn\"]")
public WebElement closeBtn;
private WebElement closeBtn;
public AlertComponent(WebDriver driver) {
......@@ -41,4 +41,8 @@ public class AlertComponent extends DComponent {
}
}
public void closeAlert() {
weToDButton(closeBtn).click();
}
}
......@@ -9,6 +9,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.NoSuchElementException;
public class SmallGrid extends DComponent {
private final static Logger LOG = LoggerFactory.getLogger(SmallGrid.class);
......@@ -157,6 +158,7 @@ public class SmallGrid extends DComponent {
if (columnIndex == -1) {
LOG.error("No element found");
}
boolean isElementPresent = false;
for (int pageNr = 1; pageNr < numOfPages + 1; pageNr++) {
List<WebElement> rows = getRows();
......@@ -165,13 +167,21 @@ public class SmallGrid extends DComponent {
WebElement currentCell = cells.get(columnIndex);
if (currentCell.getText().equals(value)) {
LOG.debug("[{}] found on page [{}]", value, pageNr);
isElementPresent = true;
currentCell.click();
return;
}
}
if (isElementPresent) {
return;
}
getGridPagination().goToNextPage();
}
if (!isElementPresent) {
throw new NoSuchElementException("Value [" + value + "] was not found in the grid");
}
LOG.error("No element found");
}
......
......@@ -13,6 +13,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pages.administration.editDomainsPage.EditDomainsPage;
import pages.administration.editGroupsPage.EditGroupsPage;
import pages.administration.editResourcesPage.EditResourcePage;
import pages.systemSettings.TruststorePage;
import pages.systemSettings.UsersPage;
import pages.systemSettings.domainsPage.DomainsPage;
......@@ -121,12 +122,10 @@ public class SideNavigationComponent extends DomiSMPPage {
openSubmenu(administrationExpand, editGroupsLnk);
return (T) new EditGroupsPage(driver);
}
// case ADMINISTRATION_EDIT_RESOURCES:
// expandSection(administrationExpand);
// return new DLink(driver, editResourcesLnk);
if (page == Pages.ADMINISTRATION_EDIT_RESOURCES) {
openSubmenu(administrationExpand, editResourcesLnk);
return (T) new EditResourcePage(driver);
}
if (page == Pages.SYSTEM_SETTINGS_USERS) {
openSubmenu(systemSettingsExpand, usersLnk);
return (T) new UsersPage(driver);
......
......@@ -26,7 +26,7 @@ public class UserDataCommonComponent extends DomiSMPPage {
private WebElement fullNameInput;
@FindBy(id = "passwordUpdatedOn_id")
private WebElement lastSetLbl;
@FindBy(id = "passwordExpireOnMessage_id")
@FindBy(id = "passwordExpireOn_id")
private WebElement passwordExpiresOnLbl;
public UserDataCommonComponent(WebDriver driver) {
......
package ddsl.dcomponents.commonComponents.members;
import ddsl.dcomponents.DComponent;
import ddsl.dcomponents.Grid.SmallGrid;
import org.openqa.selenium.ElementNotInteractableException;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rest.models.UserModel;
/**
* Generic component for Invite members with members grid popup. It contains the WebElements and the methods specific to the dialog.
*/
public class InviteMembersWithGridPopup extends DComponent {
private final static Logger LOG = LoggerFactory.getLogger(InviteMembersWithGridPopup.class);
@FindBy(id = "addMemberButton")
private WebElement inviteMemberBtn;
@FindBy(id = "editButton")
private WebElement editMemberBtn;
@FindBy(id = "closeDialogButton")
private WebElement closeBtn;
@FindBy(css = "domain-member-panel")
private WebElement panel;
public InviteMembersWithGridPopup(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
}
public SmallGrid getGrid() {
return new SmallGrid(driver, panel);
}
protected InviteMembersPopup inviteMember() throws ElementNotInteractableException {
weToDButton(inviteMemberBtn).click();
return new InviteMembersPopup(driver);
}
protected InviteMembersPopup editMember(String columnName, String value) {
WebElement tobeEdited = getGrid().searchAndGetElementInColumn(columnName, value);
tobeEdited.click();
wait.forElementToBeEnabled(editMemberBtn);
weToDButton(editMemberBtn).click();
return new InviteMembersPopup(driver);
}
public boolean isMemberPresentByUsername(UserModel userModel) {
return getGrid().isValuePresentInColumn("Username", userModel.getUsername());
}
public void clickOnCloseBtn() {
weToDButton(closeBtn).click();
}
}
......@@ -3,26 +3,22 @@ package ddsl.dcomponents.commonComponents.subcategoryTab;
import ddsl.dcomponents.ConfirmationDialog;
import ddsl.dcomponents.DComponent;
import ddsl.dcomponents.Grid.SmallGrid;
import ddsl.dcomponents.commonComponents.members.InviteMembersWithGridPopup;
import org.openqa.selenium.ElementNotInteractableException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Generic component for Subcategory tabs. It contains the WebElements and the methods specific to the dialog.
*
*/
public class SubcategoryTabComponent extends DComponent {
private final static Logger LOG = LoggerFactory.getLogger(SubcategoryTabComponent.class);
@FindBy(id = "createButton")
private WebElement createBtn;
@FindBy(id = "editButton")
private WebElement editBtn;
@FindBy(id = "groupMembersButton")
private WebElement resourceMembersBtn;
private WebElement membersBtn;
@FindBy(id = "deleteButton")
private WebElement deleteBtn;
@FindBy(css = "[class=smp-column-data]")
......@@ -40,6 +36,11 @@ public class SubcategoryTabComponent extends DComponent {
weToDButton(createBtn).click();
}
protected InviteMembersWithGridPopup clickOnMembersButton() {
weToDButton(membersBtn).click();
return new InviteMembersWithGridPopup(driver);
}
protected void edit(String columnName, String value) throws Exception {
WebElement tobeEdited = getGrid().searchAndGetElementInColumn(columnName, value);
tobeEdited.click();
......
......@@ -45,7 +45,6 @@ public class LoginPage extends DomiSMPPage {
}
} catch (Exception e) {
LOG.debug("Password expiration popup is not present");
throw new RuntimeException("Password expiration popup is not present", e);
}
......
package pages.administration.editDomainsPage;
import ddsl.dcomponents.commonComponents.members.InviteMembersWithGridPopup;
import ddsl.dcomponents.commonComponents.subcategoryTab.SubcategoryTabComponent;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
/**
* Page object Groups tab of Edit Groups page. This contains the locators of the page and the methods for the behaviour of the page
*/
......@@ -24,6 +26,11 @@ public class GroupTab extends SubcategoryTabComponent {
return new CreateGroupDetailsDialog(driver);
}
public InviteMembersWithGridPopup clickOnGroupMembersBtn() {
return clickOnMembersButton();
}
public void deleteGroup(String domainCode){
delete("Group name", domainCode);
}
......
package pages.administration.editResourcesPage;
import ddsl.dcomponents.AlertComponent;
import ddsl.dcomponents.DComponent;
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 rest.models.ResourceModel;
public class CreateSubresourceDetailsDialog extends DComponent {
@FindBy(id = "identifierValue_id")
private WebElement subresourceIdentifierInput;
@FindBy(id = "identifierScheme_id")
private WebElement subresourceSchemeInput;
@FindBy(id = "createButton")
private WebElement createBtn;
private AlertComponent alertComponent = null;
public CreateSubresourceDetailsDialog(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
}
public AlertComponent getAlertArea() {
if (alertComponent == null) {
alertComponent = new AlertComponent(driver);
}
return alertComponent;
}
public void fillResourceDetails(ResourceModel resourceModel) {
weToDInput(subresourceIdentifierInput).fill(resourceModel.getIdentifierValue());
weToDInput(subresourceSchemeInput).fill(resourceModel.getIdentifierScheme());
}
public Boolean tryClickOnSave() {
wait.forElementToBeClickable(createBtn);
if (weToDButton(createBtn).isEnabled()) {
weToDButton(createBtn).click();
return true;
} else {
return false;
}
}
}
package pages.administration.editResourcesPage;
import ddsl.DomiSMPPage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
/**
* Page object for the Edit resource document page. This contains the locators of the page and the methods for the behaviour of the page
*/
public class EditResourceDocumentPage extends DomiSMPPage {
private final static Logger LOG = LoggerFactory.getLogger(EditResourceDocumentPage.class);
@FindBy(id = "GenerateResource_id")
private WebElement generateBtn;
@FindBy(id = "validateResource_id")
private WebElement validateBtn;
@FindBy(css = "smp-titled-label[title=\"Resource identifier:\"] div.smp-tl-value")
private WebElement resourceIdentifierLbl;
@FindBy(css = "smp-titled-label[title=\"Resource scheme:\"] div.smp-tl-value")
private WebElement resourceSchemeLbl;
@FindBy(css = "smp-titled-label[title=\"Document name:\"] div.smp-tl-value")
private WebElement documentNameLbl;
@FindBy(css = "smp-titled-label[title=\"Document mimeType:\"] div.smp-tl-value")
private WebElement documentMimeTypeLbl;
@FindBy(css = "smp-titled-label[title=\"Current document version:\"] div.smp-tl-value")
private WebElement currentDocumentVersionLbl;
@FindBy(id = "saveResource_id")
private WebElement saveBtn;
@FindBy(id = "cancel_id")
private WebElement cancelBtn;
@FindBy(id = "document version_id")
private WebElement versionDdl;
@FindBy(css = "ngx-codemirror[formcontrolname= \"payload\"] div textarea")
private WebElement codeEditorSendValueElement;
@FindBy(css = ".CodeMirror-line")
private List<WebElement> codeEditorReadValueElement;
protected EditResourceDocumentPage(WebDriver driver) {
super(driver);
LOG.debug("Loading Edit resource document page.");
}
public String getDocumentValue() {
ArrayList<String> document = new ArrayList<>();
for (WebElement el : codeEditorReadValueElement) {
document.add(el.getText());
}
String formatedDoc = document.toString();
formatedDoc
= formatedDoc.replace("[", "")
.replace("]", "")
.replace(",", "");
return formatedDoc;
}
public void clickOnGenerate() {
weToDButton(generateBtn).click();
}
public void clickOnSave() {
weToDButton(saveBtn).click();
}
public void clickOnValidate() {
weToDButton(validateBtn).click();
}
public void selectDocumentVersion(int version) {
weToDSelect(versionDdl).selectValue(String.valueOf(version));
}
}
package pages.administration.editResourcesPage;
import ddsl.CommonPageWithTabsAndGrid;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rest.models.DomainModel;
import rest.models.GroupModel;
import rest.models.ResourceModel;
/**
* Page object for the Edit resource page. This contains the locators of the page and the methods for the behaviour of the page
*/
public class EditResourcePage extends CommonPageWithTabsAndGrid {
private final static Logger LOG = LoggerFactory.getLogger(EditResourcePage.class);
@FindBy(id = "domain_id")
private WebElement domainDdl;
@FindBy(id = "group_id")
private WebElement groupDdl;
@FindBy(css = ".smp-warning-panel")
private WebElement notAdministratorWarning;
public EditResourcePage(WebDriver driver) {
super(driver);
LOG.debug("Loading Edit resources page.");
}
public void selectGroup(DomainModel domainModel, GroupModel groupModel) {
weToMatSelect(domainDdl).selectByVisibleText(domainModel.getDomainCode());
}
public ResourcesMembersTab getResourceMembersTab() {
return new ResourcesMembersTab(driver);
}
public ResourceDetailsTab getResourceDetailsTab() {
return new ResourceDetailsTab(driver);
}
public void selectDomain(DomainModel domainModel, GroupModel groupModel, ResourceModel resourceModel) {
weToMatSelect(domainDdl).selectByVisibleText(domainModel.getDomainCode());
weToMatSelect(groupDdl).selectByVisibleText(groupModel.getGroupName());
getLeftSideGrid().searchAndClickElementInColumn("Identifier", resourceModel.getIdentifierValue());
}
public boolean isCurrentUserAdministrator() {
try {
if (notAdministratorWarning.isDisplayed()) {
return true;
}
return false;
} catch (NoSuchElementException e) {
return false;
}
}
}
package pages.administration.editResourcesPage;
import ddsl.dcomponents.DComponent;
import org.openqa.selenium.ElementNotInteractableException;
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;
/**
* Page object Resource details tab of Edit Resource page. This contains the locators of the page and the methods for the behaviour of the page
*/
public class ResourceDetailsTab extends DComponent {
@FindBy(id = "showResource")
private WebElement editDocumentBtn;
public ResourceDetailsTab(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
}
public EditResourceDocumentPage clickOnEditDocument() throws ElementNotInteractableException {
weToDButton(editDocumentBtn).click();
return new EditResourceDocumentPage(driver);
}
}
package pages.administration.editResourcesPage;
import ddsl.dcomponents.commonComponents.members.MembersComponent;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
/**
* Page object Resources members tab of Edit Resource page. This contains the locators of the page and the methods for the behaviour of the page
*/
public class ResourcesMembersTab extends MembersComponent {
public ResourcesMembersTab(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
}
}
package pages.administration.editResourcesPage;
import ddsl.dcomponents.commonComponents.members.MembersComponent;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
/**
* Page object Subresource tab of Edit Resource page. This contains the locators of the page and the methods for the behaviour of the page
*/
public class SubresourceTab extends MembersComponent {
public SubresourceTab(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
}
}
package pages.systemSettings;
import ddsl.CommonCertificatePage;
import ddsl.dcomponents.Grid.SmallGrid;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
......@@ -18,10 +17,6 @@ public class TruststorePage extends CommonCertificatePage {
public TruststorePage(WebDriver driver) {
super(driver);
}
public SmallGrid getCertificateGrid() {
return new SmallGrid(driver, rightPanel);
}
public String addCertificateAndReturnAlias(String filePath) {
uploadInput.sendKeys(filePath);
String certificateAlias = getAlertMessageAndClose();
......
......@@ -10,10 +10,14 @@ public class DomiSMPRestClient extends BaseRestClient {
public DomainClient domains() {
return new DomainClient();
}
public GroupClient groups() {
return new GroupClient();
}
public ResourceClient resources() {
return new ResourceClient();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment