From b09d82cf2f25fa5e5b3648929b7a86288bab2d05 Mon Sep 17 00:00:00 2001
From: sonali <sonali.mohanty@ext.ec.europa.eu>
Date: Thu, 13 Jan 2022 21:47:42 +0100
Subject: [PATCH] 1)Duplicate domain code validation in domain pop up page
 2)domain code is showing as strikethrough in domain grid page when only
 domain code is used to create new domain 3)Error message is showing while
 creating duplicate user 4)Error message is showing when password and confirm
 password doesn't match in user pop up page

---
 .../java/pages/components/grid/BasicGrid.java |   9 +-
 .../main/java/pages/domain/DomainGrid.java    |  14 +-
 .../main/java/pages/domain/DomainPopup.java   |  41 +
 .../src/main/java/pages/users/UserPopup.java  |   8 +
 .../src/main/java/pages/users/UsersPage.java  |  25 +-
 .../src/test/java/ui/DomainPgTest.java        | 559 +++++++------
 .../src/test/java/ui/UsersPgTest.java         | 779 ++++++++++--------
 7 files changed, 828 insertions(+), 607 deletions(-)

diff --git a/smp-ui-tests/src/main/java/pages/components/grid/BasicGrid.java b/smp-ui-tests/src/main/java/pages/components/grid/BasicGrid.java
index 00195ea9d..680bf6566 100644
--- a/smp-ui-tests/src/main/java/pages/components/grid/BasicGrid.java
+++ b/smp-ui-tests/src/main/java/pages/components/grid/BasicGrid.java
@@ -75,9 +75,10 @@ public class BasicGrid extends PageComponent {
 	public int getRowsNo(){
 		return gridRows.size();
 	}
-	
 
-	
-	
-	
+	public void scrollRow(int index) {
+		JavascriptExecutor js = (JavascriptExecutor) driver;
+		js.executeScript("arguments[0].scrollIntoView();",gridRows.get(index));
+		waitForXMillis(500);
+	}
 }
diff --git a/smp-ui-tests/src/main/java/pages/domain/DomainGrid.java b/smp-ui-tests/src/main/java/pages/domain/DomainGrid.java
index 01f8b936c..735b23622 100644
--- a/smp-ui-tests/src/main/java/pages/domain/DomainGrid.java
+++ b/smp-ui-tests/src/main/java/pages/domain/DomainGrid.java
@@ -3,6 +3,7 @@ package pages.domain;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
 import pages.components.grid.BasicGrid;
 
 import java.util.ArrayList;
@@ -15,7 +16,7 @@ public class DomainGrid extends BasicGrid {
 
 	private By cellSelector = By.tagName("datatable-body-cell");
 
-	public List<DomainRow> getRowsInfo(){
+	public List<DomainRow> getRowsInfo() {
 		log.info("getting all row info");
 		List<DomainRow> rowInfos = new ArrayList<>();
 
@@ -25,7 +26,7 @@ public class DomainGrid extends BasicGrid {
 			DomainRow row = new DomainRow();
 
 			for (int i = 0; i < headerTxt.size(); i++) {
-				switch (headerTxt.get(i)){
+				switch (headerTxt.get(i)) {
 					case "Domain code":
 						row.setDomainCode(cells.get(i).getText().trim());
 						break;
@@ -47,6 +48,11 @@ public class DomainGrid extends BasicGrid {
 
 		return rowInfos;
 	}
+	public void mouseHoverOnDomainCode(int rowNumber)
+	{
+		WebElement element = driver.findElement(By.cssSelector(".datatable-row-wrapper:nth-child(" + rowNumber + ") .datatable-body-cell:nth-child(1) .datatable-body-cell-label span"));
+		Actions action = new Actions(driver);
+		action.moveToElement(element).build().perform();
+	}
 
-
-}
+}
\ No newline at end of file
diff --git a/smp-ui-tests/src/main/java/pages/domain/DomainPopup.java b/smp-ui-tests/src/main/java/pages/domain/DomainPopup.java
index 8ec1c6d70..62fc8590a 100644
--- a/smp-ui-tests/src/main/java/pages/domain/DomainPopup.java
+++ b/smp-ui-tests/src/main/java/pages/domain/DomainPopup.java
@@ -38,6 +38,13 @@ public class DomainPopup extends PageComponent {
 
 	@FindBy(css = "#smlSMPId_id")
 	WebElement smlSMPIdInput;
+
+	@FindBy(xpath = "//div[contains(text(),' The Domain code already exists! ')]")
+	WebElement duplicateDomainErrorMsg;
+
+
+
+
 	
 //	@FindBy(css = "#smlClientHeader_id")
 //	WebElement smlClientHeaderInput;
@@ -87,6 +94,40 @@ public class DomainPopup extends PageComponent {
 		smlClientAliasSelect.selectFirstOption();
 	}
 
+    public String getDuplicateDomainErrorMsgText()
+	{
+		String duplicateDomainMsg = duplicateDomainErrorMsg.getText();
+		return duplicateDomainMsg;
+
+	}
+	public boolean isEnableOkButton()
+	{
+		try {
+			return okBtn.isEnabled();
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+			return false;
+		}
+	}
+	public boolean isEnableCancelButton()
+	{
+		try {
+			return cancelBtn.isEnabled();
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+			return false;
+		}
+
+	}
+
+	public void clearAndFillDomainCodeInput(String domainCode) {
+		log.info("filling only domain code data for new domain");
+		clearAndFillInput(domainCodeInput, domainCode);
+	}
 
 
 }
diff --git a/smp-ui-tests/src/main/java/pages/users/UserPopup.java b/smp-ui-tests/src/main/java/pages/users/UserPopup.java
index 748478d7a..69d09936d 100644
--- a/smp-ui-tests/src/main/java/pages/users/UserPopup.java
+++ b/smp-ui-tests/src/main/java/pages/users/UserPopup.java
@@ -49,6 +49,9 @@ public class UserPopup extends PageComponent {
 	@FindBy(css = "mat-dialog-content > table > tbody > tr > td > button:nth-child(2)")
 	WebElement cancelBtn;
 
+	@FindBy(xpath = "//div[text()=\'Passwords do not match \']")
+	WebElement passwordUnmatchingMsg;
+
 	@FindBy(css = "#role_id")
 	WebElement rolesSelectContainer;
 	public GenericSelect rolesSelect;
@@ -129,4 +132,9 @@ public class UserPopup extends PageComponent {
 		}
 		return null;
 	}
+
+	public String getPasswordUnmatchingMsg()
+	{
+		return passwordUnmatchingMsg.getText();
+	}
 }
diff --git a/smp-ui-tests/src/main/java/pages/users/UsersPage.java b/smp-ui-tests/src/main/java/pages/users/UsersPage.java
index 885791aea..c42da40ce 100644
--- a/smp-ui-tests/src/main/java/pages/users/UsersPage.java
+++ b/smp-ui-tests/src/main/java/pages/users/UsersPage.java
@@ -41,6 +41,9 @@ public class UsersPage extends SMPPage {
 	
 	@FindBy(id = "deleteButton")
 	private WebElement deleteBtn;
+
+	@FindBy(xpath = "//div[contains(text(),'Unexpected technical error occurred.')]")
+	private WebElement duplicateUserCreationMsg;
 	
 	
 	public boolean isLoaded(){
@@ -113,10 +116,26 @@ public class UsersPage extends SMPPage {
 		popup.clickOK();
 
 	}
+
+	public boolean isNewButtonEnabled()
+
+	{
+		try{
+			return newBtn.isEnabled();
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+			throw e;
+		}
+	}
 	
-	
-	
-	
+	public String getDuplicateUserErrorMsg()
+	{
+		return duplicateUserCreationMsg.getText();
+	}
+
+
 	
 	
 }
diff --git a/smp-ui-tests/src/test/java/ui/DomainPgTest.java b/smp-ui-tests/src/test/java/ui/DomainPgTest.java
index 6f46e8355..c200395b7 100644
--- a/smp-ui-tests/src/test/java/ui/DomainPgTest.java
+++ b/smp-ui-tests/src/test/java/ui/DomainPgTest.java
@@ -20,306 +20,391 @@ import java.util.Arrays;
 import java.util.List;
 
 public class DomainPgTest extends BaseTest {
-	
-	@AfterMethod
-	public void logoutAndReset(){
-		genericLogoutProcedure();
-	}
 
-	
-	@BeforeMethod
-	public void loginAndGoToDomainPage(){
-		
-		SMPPage page = genericLoginProcedure("SYS_ADMIN");
+    @AfterMethod
+    public void logoutAndReset() {
+        genericLogoutProcedure();
+    }
 
-		logger.info("Going to Domain page");
-		page.sidebar.goToPage(DomainPage.class);
-	}
-	
-	@Test(description = "DMN-0")
-	public void openDomainPage(){
-		SoftAssert soft = new SoftAssert();
-		DomainPage page = new DomainPage(driver);
 
-		soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
-		DomainGrid grid = page.grid();
-		DomainRow row0 = grid.getRowsInfo().get(0);
-		grid.doubleClickRow(0);
-		
-		DomainPopup popup = new DomainPopup(driver);
+    @BeforeMethod
+    public void loginAndGoToDomainPage() {
 
-		soft.assertTrue(popup.isLoaded(), "Domain popup is loaded");
+        SMPPage page = genericLoginProcedure("SYS_ADMIN");
 
-		soft.assertTrue(!popup.isDomainCodeInputEnabled(), "On double click Domain Code input is disabled");
-		soft.assertTrue(!popup.isSMLDomainInputEnabled(), "On double click SML Domain input is disabled");
+        logger.info("Going to Domain page");
+        page.sidebar.goToPage(DomainPage.class);
+    }
 
-		popup.clickCancel();
-		
-		soft.assertEquals(row0, page.grid().getRowsInfo().get(0), "Row is unchanged");
-		soft.assertTrue(!page.isSaveButtonEnabled(), "Save button is not enabled");
+    @Test(description = "DMN-0")
+    public void openDomainPage() {
+        SoftAssert soft = new SoftAssert();
+        DomainPage page = new DomainPage(driver);
 
-		soft.assertAll();
-	}
+        soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
+        DomainGrid grid = page.grid();
+        DomainRow row0 = grid.getRowsInfo().get(0);
+        grid.doubleClickRow(0);
 
-	@Test(description = "DMN-10")
-	public void editDomain(){
+        DomainPopup popup = new DomainPopup(driver);
 
-		SoftAssert soft = new SoftAssert();
-		DomainPage page = new DomainPage(driver);
+        soft.assertTrue(popup.isLoaded(), "Domain popup is loaded");
 
-		soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
-		DomainGrid grid = page.grid();
-		DomainRow row0 = grid.getRowsInfo().get(0);
-		grid.doubleClickRow(0);
+        soft.assertTrue(!popup.isDomainCodeInputEnabled(), "On double click Domain Code input is disabled");
+        soft.assertTrue(!popup.isSMLDomainInputEnabled(), "On double click SML Domain input is disabled");
 
-		DomainPopup popup = new DomainPopup(driver);
+        popup.clickCancel();
 
-		soft.assertTrue(popup.isLoaded(), "Domain popup is loaded");
+        soft.assertEquals(row0, page.grid().getRowsInfo().get(0), "Row is unchanged");
+        soft.assertTrue(!page.isSaveButtonEnabled(), "Save button is not enabled");
 
-		soft.assertTrue(!popup.isDomainCodeInputEnabled(), "On double click Domain Code input is disabled");
-		soft.assertTrue(!popup.isSMLDomainInputEnabled(), "On double click SML Domain input is disabled");
+        soft.assertAll();
+    }
 
-		String rndString = Generator.randomAlphaNumeric(10);
-		popup.fillSMLSMPIdInput(rndString);
-		popup.clickCancel();
+    @Test(description = "DMN-10")
+    public void editDomain() {
 
-		soft.assertEquals(row0, page.grid().getRowsInfo().get(0), "Row 0 is not changed");
+        SoftAssert soft = new SoftAssert();
+        DomainPage page = new DomainPage(driver);
 
-		page.grid().doubleClickRow(0);
-		popup = new DomainPopup(driver);
-		popup.fillSMLSMPIdInput(rndString);
-		popup.clickOK();
+        soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
+        DomainGrid grid = page.grid();
+        DomainRow row0 = grid.getRowsInfo().get(0);
+        grid.doubleClickRow(0);
 
-		soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled");
-		soft.assertNotEquals(row0, page.grid().getRowsInfo().get(0), "Row 0 is changed");
+        DomainPopup popup = new DomainPopup(driver);
 
-		page.clickSave().confirm();
+        soft.assertTrue(popup.isLoaded(), "Domain popup is loaded");
 
-		DomainRow newRow0 = page.grid().getRowsInfo().get(0);
-		soft.assertNotEquals(row0, newRow0, "Row 0 is changed after save");
-		soft.assertEquals(newRow0.getSmlSmpID(), rndString, "SML SMP ID is changed to the desired string");
+        soft.assertTrue(!popup.isDomainCodeInputEnabled(), "On double click Domain Code input is disabled");
+        soft.assertTrue(!popup.isSMLDomainInputEnabled(), "On double click SML Domain input is disabled");
 
-		soft.assertEquals(page.alertArea.getAlertMessage().getMessage(), SMPMessages.MSG_18, "Proper message displayed");
+        String rndString = Generator.randomAlphaNumeric(10);
+        popup.fillSMLSMPIdInput(rndString);
+        popup.clickCancel();
 
-		soft.assertAll();
-	}
+        soft.assertEquals(row0, page.grid().getRowsInfo().get(0), "Row 0 is not changed");
 
+        page.grid().doubleClickRow(0);
+        popup = new DomainPopup(driver);
+        popup.fillSMLSMPIdInput(rndString);
+        popup.clickOK();
 
-	@Test(description = "DMN-20")
-	public void newDomain(){
-		SoftAssert soft = new SoftAssert();
-		DomainPage page = new DomainPage(driver);
+        soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled");
+        soft.assertNotEquals(row0, page.grid().getRowsInfo().get(0), "Row 0 is changed");
 
-		soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
+        page.clickSave().confirm();
 
-		DomainPopup popup = page.clickNew();
-		soft.assertTrue(popup.isLoaded(), "Domain popup is loaded");
+        DomainRow newRow0 = page.grid().getRowsInfo().get(0);
+        soft.assertNotEquals(row0, newRow0, "Row 0 is changed after save");
+        soft.assertEquals(newRow0.getSmlSmpID(), rndString, "SML SMP ID is changed to the desired string");
 
-		soft.assertTrue(popup.isDomainCodeInputEnabled(), "When defining new domain - Domain Code input is disabled");
-		soft.assertTrue(popup.isSMLDomainInputEnabled(), "When defining new domain -SML Domain input is disabled");
+        soft.assertEquals(page.alertArea.getAlertMessage().getMessage(), SMPMessages.MSG_18, "Proper message displayed");
 
-		String rndString = Generator.randomAlphaNumeric(10);
+        soft.assertAll();
+    }
 
 
-		popup.fillDataForNewDomain(rndString, rndString, rndString, rndString);
-		popup.clickCancel();
+    @Test(description = "DMN-20")
+    public void newDomain() {
+        SoftAssert soft = new SoftAssert();
+        DomainPage page = new DomainPage(driver);
 
-		soft.assertTrue(!page.isSaveButtonEnabled(), "Save button is NOT enabled");
+        soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
 
-		popup = page.clickNew();
-		popup.fillDataForNewDomain(rndString, rndString, rndString, rndString);
-		popup.clickOK();
+        DomainPopup popup = page.clickNew();
+        soft.assertTrue(popup.isLoaded(), "Domain popup is loaded");
 
-		soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled");
+        soft.assertTrue(popup.isDomainCodeInputEnabled(), "When defining new domain - Domain Code input is disabled");
+        soft.assertTrue(popup.isSMLDomainInputEnabled(), "When defining new domain -SML Domain input is disabled");
 
-		page.clickSave().confirm();
+        String rndString = Generator.randomAlphaNumeric(10);
 
-		soft.assertTrue(page.alertArea.getAlertMessage().getMessage().equalsIgnoreCase(SMPMessages.MSG_18),
-				"Success message is as expected");
 
-		List<DomainRow> rows = page.grid().getRowsInfo();
-		while (page.pagination.hasNextPage()){
-			page.pagination.goToNextPage();
-			rows.addAll(page.grid().getRowsInfo());
-		}
+        popup.fillDataForNewDomain(rndString, rndString, rndString, rndString);
+        popup.clickCancel();
 
-		boolean found = false;
-		for (DomainRow row : rows) {
-			if(row.getDomainCode().equalsIgnoreCase(rndString)){
-				found = true;
-				break;
-			}
-		}
+        soft.assertTrue(!page.isSaveButtonEnabled(), "Save button is NOT enabled");
 
-		soft.assertTrue(found, "Found new domain in the list of domains");
+        popup = page.clickNew();
+        popup.fillDataForNewDomain(rndString, rndString, rndString, rndString);
+        popup.clickOK();
 
-		soft.assertAll();
-	}
+        soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled");
 
-	@Test(description = "DMN-30")
-	public void cancelNewDomainCreation(){
-		SoftAssert soft = new SoftAssert();
-		DomainPage page = new DomainPage(driver);
+        page.clickSave().confirm();
 
-		soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
+        soft.assertTrue(page.alertArea.getAlertMessage().getMessage().equalsIgnoreCase(SMPMessages.MSG_18),
+                "Success message is as expected");
 
-		DomainPopup popup = page.clickNew();
-		soft.assertTrue(popup.isLoaded(), "Domain popup is loaded");
+        List<DomainRow> rows = page.grid().getRowsInfo();
+        while (page.pagination.hasNextPage()) {
+            page.pagination.goToNextPage();
+            rows.addAll(page.grid().getRowsInfo());
+        }
 
-		soft.assertTrue(popup.isDomainCodeInputEnabled(), "When defining new domain - Domain Code input is disabled");
-		soft.assertTrue(popup.isSMLDomainInputEnabled(), "When defining new domain -SML Domain input is disabled");
+        boolean found = false;
+        for (DomainRow row : rows) {
+            if (row.getDomainCode().equalsIgnoreCase(rndString)) {
+                found = true;
+                break;
+            }
+        }
 
-		String rndString = Generator.randomAlphaNumeric(10);
+        soft.assertTrue(found, "Found new domain in the list of domains");
 
+        soft.assertAll();
+    }
 
-		popup.fillDataForNewDomain(rndString, rndString, rndString, rndString);
-		popup.clickOK();
+    @Test(description = "DMN-30")
+    public void cancelNewDomainCreation() {
+        SoftAssert soft = new SoftAssert();
+        DomainPage page = new DomainPage(driver);
 
-		soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled");
+        soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
 
-		page.clickCancel().confirm();
-		new ConfirmationDialog(driver).confirm();
+        DomainPopup popup = page.clickNew();
+        soft.assertTrue(popup.isLoaded(), "Domain popup is loaded");
 
-		List<DomainRow> rows = page.grid().getRowsInfo();
-		while (page.pagination.hasNextPage()){
-			page.pagination.goToNextPage();
-			rows.addAll(page.grid().getRowsInfo());
-		}
+        soft.assertTrue(popup.isDomainCodeInputEnabled(), "When defining new domain - Domain Code input is disabled");
+        soft.assertTrue(popup.isSMLDomainInputEnabled(), "When defining new domain -SML Domain input is disabled");
 
-		boolean found = false;
-		for (DomainRow row : rows) {
-			if(row.getDomainCode().equalsIgnoreCase(rndString)){
-				found = true;
-				break;
-			}
-		}
+        String rndString = Generator.randomAlphaNumeric(10);
 
-		soft.assertTrue(!found, "New domain NOT in the list of domains");
 
-		soft.assertAll();
-	}
+        popup.fillDataForNewDomain(rndString, rndString, rndString, rndString);
+        popup.clickOK();
 
-	@Test(description = "DMN-40")
-	public void deleteDomain(){
-		String rndStr = Generator.randomAlphaNumeric(10);
-		SMPRestClient.createDomain(rndStr);
+        soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled");
 
-		SoftAssert soft = new SoftAssert();
-		DomainPage page = new DomainPage(driver);
+        page.clickCancel().confirm();
+        new ConfirmationDialog(driver).confirm();
 
-		page.refreshPage();
+        List<DomainRow> rows = page.grid().getRowsInfo();
+        while (page.pagination.hasNextPage()) {
+            page.pagination.goToNextPage();
+            rows.addAll(page.grid().getRowsInfo());
+        }
 
-		soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled");
+        boolean found = false;
+        for (DomainRow row : rows) {
+            if (row.getDomainCode().equalsIgnoreCase(rndString)) {
+                found = true;
+                break;
+            }
+        }
 
-		int index = scrollToDomain(rndStr);
+        soft.assertTrue(!found, "New domain NOT in the list of domains");
 
-		page.grid().selectRow(index);
+        soft.assertAll();
+    }
 
-		soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row selected");
+    @Test(description = "DMN-40")
+    public void deleteDomain() {
+        String rndStr = Generator.randomAlphaNumeric(10);
+        SMPRestClient.createDomain(rndStr);
 
-		page.clickDelete();
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled (2)");
-		soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled");
-		soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled");
+        SoftAssert soft = new SoftAssert();
+        DomainPage page = new DomainPage(driver);
 
-		page.clickCancel().confirm();
-		new ConfirmationDialog(driver).confirm();
+        page.refreshPage();
 
-		soft.assertTrue(isDomainStillPresent(rndStr), "Row is still present");
+        soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled");
 
-		index = scrollToDomain(rndStr);
-		page.grid().selectRow(index);
-		page.clickDelete();
-		page.clickSave().confirm();
-
-		soft.assertTrue(!isDomainStillPresent(rndStr), "Row is still NOT present after delete");
-
-
-		soft.assertAll();
-	}
-
-	@Test(description = "DMN-50")
-	public void deleteDomainWithSG(){
-
-		String domainName = Generator.randomAlphaNumeric(10);
-		String pi = Generator.randomAlphaNumeric(10);
-		String ps = Generator.randomAlphaNumeric(10);
-
-		String expectedErrorMess = String.format("Delete validation error Could not delete domains used by Service groups! Domain: %s (%s ) uses by:1 SG.", domainName, domainName);
-
-		SMPRestClient.createDomain(domainName);
-		SMPRestClient.createServiceGroup(pi, ps, new ArrayList<>(Arrays.asList("smp")),new ArrayList<>(Arrays.asList(domainName)));
-
-		SoftAssert soft = new SoftAssert();
-
-		DomainPage page = new DomainPage(driver);
-		page.refreshPage();
-
-		int index = scrollToDomain(domainName);
-		page.grid().selectRow(index);
-		soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
-
-		page.clickDelete();
-		AlertMessage message = page.alertArea.getAlertMessage();
-		soft.assertTrue(message.isError(), "Page shows error message when deleting domain with SG");
-		soft.assertTrue(message.getMessage().equalsIgnoreCase(expectedErrorMess), "Desired message appears");
-
-		SMPRestClient.deleteSG(pi);
-		SMPRestClient.deleteDomain(domainName);
-
-		soft.assertAll();
-	}
-
-
-
-
-	private boolean isDomainStillPresent(String domainCode){
-		boolean end = false;
-		List<DomainRow> rows = new ArrayList<>();
-		DomainPage page = new DomainPage(driver);
-		page.pagination.skipToFirstPage();
-
-		while (!end) {
-			page = new DomainPage(driver);
-			rows.addAll(page.grid().getRowsInfo());
-			if(page.pagination.hasNextPage()){
-				page.pagination.goToNextPage();
-			}else{end = true;}
-		}
-
-		boolean found = false;
-		for (DomainRow row : rows) {
-			if(row.getDomainCode().equalsIgnoreCase(domainCode)){
-				found = true;
-			}
-		}
-		return found;
-	}
-
-	private int scrollToDomain(String domainCode){
-		DomainPage page = new DomainPage(driver);
-		page.pagination.skipToFirstPage();
-
-		boolean end = false;
-		while (!end) {
-			page = new DomainPage(driver);
-
-			List<DomainRow> rows = page.grid().getRowsInfo();
-			for (int i = 0; i < rows.size(); i++) {
-				if(rows.get(i).getDomainCode().equalsIgnoreCase(domainCode)){
-					return i;
-				}
-			}
-
-			if(page.pagination.hasNextPage()){
-				page.pagination.goToNextPage();
-			}else{end = true;}
-		}
-
-		return -1;
-	}
+        int index = scrollToDomain(rndStr);
 
+        page.grid().selectRow(index);
 
+        soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row selected");
 
+        page.clickDelete();
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled (2)");
+        soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled");
+        soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled");
+
+        page.clickCancel().confirm();
+        new ConfirmationDialog(driver).confirm();
+
+        soft.assertTrue(isDomainStillPresent(rndStr), "Row is still present");
+
+        index = scrollToDomain(rndStr);
+        page.grid().selectRow(index);
+        page.clickDelete();
+        page.clickSave().confirm();
+
+        soft.assertTrue(!isDomainStillPresent(rndStr), "Row is still NOT present after delete");
+
+
+        soft.assertAll();
+    }
+
+    @Test(description = "DMN-50")
+    public void deleteDomainWithSG() {
+
+        String domainName = Generator.randomAlphaNumeric(10);
+        String pi = Generator.randomAlphaNumeric(10);
+        String ps = Generator.randomAlphaNumeric(10);
+
+        String expectedErrorMess = String.format("Delete validation error Could not delete domains used by Service groups! Domain: %s (%s ) uses by:1 SG.", domainName, domainName);
+
+        SMPRestClient.createDomain(domainName);
+        SMPRestClient.createServiceGroup(pi, ps, new ArrayList<>(Arrays.asList("smp")), new ArrayList<>(Arrays.asList(domainName)));
+
+        SoftAssert soft = new SoftAssert();
+
+        DomainPage page = new DomainPage(driver);
+        page.refreshPage();
+
+        int index = scrollToDomain(domainName);
+        page.grid().selectRow(index);
+        soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
+
+        page.clickDelete();
+        AlertMessage message = page.alertArea.getAlertMessage();
+        soft.assertTrue(message.isError(), "Page shows error message when deleting domain with SG");
+        soft.assertTrue(message.getMessage().equalsIgnoreCase(expectedErrorMess), "Desired message appears");
+
+        SMPRestClient.deleteSG(pi);
+        SMPRestClient.deleteDomain(domainName);
+
+        soft.assertAll();
+    }
+
+    @Test(description = "DMN-60")
+    public void duplicateDomainCreation() {
+        SoftAssert soft = new SoftAssert();
+        DomainPage page = new DomainPage(driver);
+        String errorMsg = "The Domain code already exists!";
+        soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
+        DomainGrid grid = page.grid();
+        DomainRow row0 = grid.getRowsInfo().get(0);
+        DomainPopup popup = page.clickNew();
+        soft.assertTrue(popup.isLoaded(), "Domain popup is loaded");
+        soft.assertTrue(popup.isDomainCodeInputEnabled(), "When defining new domain - Domain Code input is disabled");
+        soft.assertTrue(popup.isSMLDomainInputEnabled(), "When defining new domain -SML Domain input is disabled");
+        String rndString = Generator.randomAlphaNumeric(10);
+        popup.fillDataForNewDomain(row0.getDomainCode(), rndString, rndString, rndString);
+        soft.assertEquals(popup.getDuplicateDomainErrorMsgText(), errorMsg, "The message is not matching with our expected error message");
+        soft.assertFalse(popup.isEnableOkButton(), "Ok button is enable");
+        soft.assertTrue(popup.isEnableCancelButton(), "Cancel button is disable");
+        popup.clickCancel();
+        soft.assertFalse(page.isSaveButtonEnabled(), "Save button is enabled");
+        soft.assertAll();
+    }
+
+    @Test(description = "DMN-70")
+    public void onlyDomainCodeSavingMsgVerify() {
+        SoftAssert soft = new SoftAssert();
+        DomainPage page = new DomainPage(driver);
+//        String errorMsg = "The domain should have a defined signature CertAlias.";
+        soft.assertTrue(page.isLoaded(), "Check that the page is loaded");
+        int index = scrollToSmlDomain("");
+        if (index >= 0) {
+            try {
+                page.grid().selectRow(index);
+                page.clickDelete();
+                page.clickSave().confirm();
+            } catch (Exception e) {
+                e.printStackTrace();
+                throw e;
+            }
+        }
+        String rndString = Generator.randomAlphaNumeric(10);
+        DomainPopup popup = page.clickNew();
+        soft.assertTrue(popup.isLoaded(), "Domain popup is loaded");
+        soft.assertTrue(popup.isDomainCodeInputEnabled(), "When defining new domain - Domain Code input is disabled");
+        popup.clearAndFillDomainCodeInput(rndString);
+        soft.assertTrue(popup.isEnableOkButton(), "Ok button is disable");
+        popup.clickOK();
+        soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled");
+        page.clickSave().confirm();
+        soft.assertTrue(page.alertArea.getAlertMessage().getMessage().equalsIgnoreCase(SMPMessages.MSG_18),
+                "Success message is as expected");
+        index = scrollToSmlDomain("");
+        if (index >= 0) {
+            page.grid().scrollRow(index);
+        }
+        int rowNumber = index + 1;
+        page.grid().mouseHoverOnDomainCode(rowNumber);
+//        WebElement text = driver.findElement(By.xpath("//*[text()='The domain should have a defined signature CertAlias.']"));
+//        soft.assertEquals(text.getText(),errorMsg, "the message 'The domain should have a defined signature CertAlias.' is not displayed");
+        soft.assertAll();
+    }
+
+    private boolean isDomainStillPresent(String domainCode) {
+        boolean end = false;
+        List<DomainRow> rows = new ArrayList<>();
+        DomainPage page = new DomainPage(driver);
+        page.pagination.skipToFirstPage();
+
+        while (!end) {
+            page = new DomainPage(driver);
+            rows.addAll(page.grid().getRowsInfo());
+            if (page.pagination.hasNextPage()) {
+                page.pagination.goToNextPage();
+            } else {
+                end = true;
+            }
+        }
+
+        boolean found = false;
+        for (DomainRow row : rows) {
+            if (row.getDomainCode().equalsIgnoreCase(domainCode)) {
+                found = true;
+            }
+        }
+        return found;
+    }
+
+    private int scrollToDomain(String domainCode) {
+        DomainPage page = new DomainPage(driver);
+        page.pagination.skipToFirstPage();
+
+        boolean end = false;
+        while (!end) {
+            page = new DomainPage(driver);
+
+            List<DomainRow> rows = page.grid().getRowsInfo();
+            for (int i = 0; i < rows.size(); i++) {
+                if (rows.get(i).getDomainCode().equalsIgnoreCase(domainCode)) {
+                    return i;
+                }
+            }
+
+            if (page.pagination.hasNextPage()) {
+                page.pagination.goToNextPage();
+            } else {
+                end = true;
+            }
+        }
+
+        return -1;
+    }
+
+    private int scrollToSmlDomain(String smlDomain) {
+        try {
+            DomainPage page = new DomainPage(driver);
+            page.pagination.skipToFirstPage();
+            boolean end = false;
+            while (!end) {
+                page = new DomainPage(driver);
+                List<DomainRow> rows = page.grid().getRowsInfo();
+                for (int i = 0; i < rows.size(); i++) {
+                    if (rows.get(i).getSmlDomain().equalsIgnoreCase(smlDomain)) {
+                        return i;
+                    }
+                }
+                if (page.pagination.hasNextPage()) {
+                    page.pagination.goToNextPage();
+                } else {
+                    end = true;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw e;
+        }
+        return -1;
+    }
 }
diff --git a/smp-ui-tests/src/test/java/ui/UsersPgTest.java b/smp-ui-tests/src/test/java/ui/UsersPgTest.java
index e196b1a2c..a23996f72 100644
--- a/smp-ui-tests/src/test/java/ui/UsersPgTest.java
+++ b/smp-ui-tests/src/test/java/ui/UsersPgTest.java
@@ -22,496 +22,557 @@ import java.util.List;
 public class UsersPgTest extends BaseTest {
 
 
-	@AfterMethod
-	public void logoutAndReset() {
-		genericLogoutProcedure();
-	}
+    @AfterMethod
+    public void logoutAndReset() {
+        genericLogoutProcedure();
+    }
 
 
-	@BeforeMethod
-	public void loginAndGoToUsersPage() {
+    @BeforeMethod
+    public void loginAndGoToUsersPage() {
 
-		SMPPage page = genericLoginProcedure("SYS_ADMIN");
+        SMPPage page = genericLoginProcedure("SYS_ADMIN");
 
-		logger.info("Going to Users page");
-		page.sidebar.goToPage(UsersPage.class);
-	}
+        logger.info("Going to Users page");
+        page.sidebar.goToPage(UsersPage.class);
+    }
 
-	@Test(description = "USR-10")
-	public void newUser() {
-		String username = Generator.randomAlphaNumeric(10);
-		String validPass = "QW!@qw12";
+    @Test(description = "USR-10")
+    public void newUser() {
+        String username = Generator.randomAlphaNumeric(10);
+        String validPass = "QW!@qw12";
 
-		SoftAssert soft = new SoftAssert();
+        SoftAssert soft = new SoftAssert();
 
-		UsersPage usersPage = new UsersPage(driver);
+        UsersPage usersPage = new UsersPage(driver);
 
-//		soft.assertTrue(usersPage.isNewButtonEnabled(), "New button should be enabled");
+        soft.assertTrue(usersPage.isNewButtonEnabled(), "New button should be enabled");
 
-		UserPopup popup = usersPage.clickNew();
-		soft.assertTrue(!popup.isOKButtonActive(), "OK button should be disabled until valid data is filled in the popup");
+        UserPopup popup = usersPage.clickNew();
+        soft.assertTrue(!popup.isOKButtonActive(), "OK button should be disabled until valid data is filled in the popup");
 
-		popup.rolesSelect.selectOptionWithText("SYSTEM_ADMIN");
+        popup.rolesSelect.selectOptionWithText("SYSTEM_ADMIN");
 
-		popup.clickUserDetailsToggle();
+        popup.clickUserDetailsToggle();
 
-		popup.fillDetailsForm(username, validPass, validPass);
-		popup.clickOK();
+        popup.fillDetailsForm(username, validPass, validPass);
+        popup.clickOK();
 
-		soft.assertTrue(usersPage.isSaveButtonEnabled(), "Save button is enabled");
-		soft.assertTrue(usersPage.isCancelButtonEnabled(), "Cancel button is enabled");
+        soft.assertTrue(usersPage.isSaveButtonEnabled(), "Save button is enabled");
+        soft.assertTrue(usersPage.isCancelButtonEnabled(), "Cancel button is enabled");
 
-		usersPage.clickSave().confirm();
+        usersPage.clickSave().confirm();
 
-		soft.assertTrue(!usersPage.alertArea.getAlertMessage().isError(), "Message listed is success");
-		soft.assertTrue(usersPage.alertArea.getAlertMessage().getMessage().equalsIgnoreCase(SMPMessages.MSG_18), "Message listed is as expected");
+        soft.assertTrue(!usersPage.alertArea.getAlertMessage().isError(), "Message listed is success");
+        soft.assertTrue(usersPage.alertArea.getAlertMessage().getMessage().equalsIgnoreCase(SMPMessages.MSG_18), "Message listed is as expected");
 
-		soft.assertTrue(isUserListed(username), "User present in the page");
+        soft.assertTrue(isUserListed(username), "User present in the page");
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
 
-	@Test(description = "USR-20")
-	public void usernameValidation() {
-		String username = Generator.randomAlphaNumeric(10);
-		String validPass = "QW!@qw12";
+    @Test(description = "USR-20")
+    public void usernameValidation() {
+        String username = Generator.randomAlphaNumeric(10);
+        String validPass = "QW!@qw12";
 
-		SoftAssert soft = new SoftAssert();
+        SoftAssert soft = new SoftAssert();
 
-		UsersPage usersPage = new UsersPage(driver);
-		UserPopup popup = usersPage.clickNew();
-		soft.assertTrue(!popup.isOKButtonActive(), "OK button should be disabled until valid data is filled in the popup");
+        UsersPage usersPage = new UsersPage(driver);
+        UserPopup popup = usersPage.clickNew();
+        soft.assertTrue(!popup.isOKButtonActive(), "OK button should be disabled until valid data is filled in the popup");
 
-		popup.rolesSelect.selectOptionWithText("SMP_ADMIN");
+        popup.rolesSelect.selectOptionWithText("SMP_ADMIN");
 
-		popup.clickUserDetailsToggle();
+        popup.clickUserDetailsToggle();
 
-		popup.fillDetailsForm("tst", validPass, validPass);
-		soft.assertTrue(!popup.isOKButtonActive(), "OK button should be disabled until valid data is filled in the popup(2)");
-		soft.assertEquals(popup.getUsernameValidationError(), SMPMessages.USERNAME_VALIDATION_MESSAGE, "Validation error message is displayed(2)");
-		popup.fillDetailsForm("#$^&*^%&$#@%@$#%$", validPass, validPass);
-		soft.assertTrue(!popup.isOKButtonActive(), "OK button should be disabled until valid data is filled in the popup(3)");
-		soft.assertEquals(popup.getUsernameValidationError(), SMPMessages.USERNAME_VALIDATION_MESSAGE, "Validation error message is displayed(3)");
-		//noinspection SpellCheckingInspection
-		popup.fillDetailsForm("QWERQWERQWERQWERQWERQWERQWERQWE33", validPass, validPass);
-		soft.assertTrue(!popup.isOKButtonActive(), "OK button should be disabled until valid data is filled in the popup(4)");
-		soft.assertEquals(popup.getUsernameValidationError(), SMPMessages.USERNAME_VALIDATION_MESSAGE, "Validation error message is displayed(4)");
+        popup.fillDetailsForm("tst", validPass, validPass);
+        soft.assertTrue(!popup.isOKButtonActive(), "OK button should be disabled until valid data is filled in the popup(2)");
+        soft.assertEquals(popup.getUsernameValidationError(), SMPMessages.USERNAME_VALIDATION_MESSAGE, "Validation error message is displayed(2)");
+        popup.fillDetailsForm("#$^&*^%&$#@%@$#%$", validPass, validPass);
+        soft.assertTrue(!popup.isOKButtonActive(), "OK button should be disabled until valid data is filled in the popup(3)");
+        soft.assertEquals(popup.getUsernameValidationError(), SMPMessages.USERNAME_VALIDATION_MESSAGE, "Validation error message is displayed(3)");
+        //noinspection SpellCheckingInspection
+        popup.fillDetailsForm("QWERQWERQWERQWERQWERQWERQWERQWE33", validPass, validPass);
+        soft.assertTrue(!popup.isOKButtonActive(), "OK button should be disabled until valid data is filled in the popup(4)");
+        soft.assertEquals(popup.getUsernameValidationError(), SMPMessages.USERNAME_VALIDATION_MESSAGE, "Validation error message is displayed(4)");
 
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
-	@SuppressWarnings("SpellCheckingInspection")
-	@Test(description = "USR-30")
-	public void passwordValidation() {
+    @SuppressWarnings("SpellCheckingInspection")
+    @Test(description = "USR-30")
+    public void passwordValidation() {
 
-		ArrayList<String> passToValidate = new ArrayList<>(Arrays.asList("qwqw",
-				"QWERQWERQWERQWERQWERQWERQWERQWE33",
+        ArrayList<String> passToValidate = new ArrayList<>(Arrays.asList("qwqw",
+                "QWERQWERQWERQWERQWERQWERQWERQWE33",
 //				"QWERTYUIOP",
 //				"qwertyuiop",
 //				"321654987",
 //				"~!@#$%^&*()_",
 //				"~1Aa#",
-				"~1a#2d2dds"));
+                "~1a#2d2dds"));
 
-		SoftAssert soft = new SoftAssert();
+        SoftAssert soft = new SoftAssert();
 
-		UsersPage usersPage = new UsersPage(driver);
+        UsersPage usersPage = new UsersPage(driver);
 
-		for (String pass : passToValidate) {
+        for (String pass : passToValidate) {
 //			usersPage.refreshPage();
-			usersPage.clickVoidSpace();
+            usersPage.clickVoidSpace();
 
-			UserPopup popup = usersPage.clickNew();
-			popup.rolesSelect.selectOptionWithText("SMP_ADMIN");
-			popup.clickUserDetailsToggle();
+            UserPopup popup = usersPage.clickNew();
+            popup.rolesSelect.selectOptionWithText("SMP_ADMIN");
+            popup.clickUserDetailsToggle();
 
-			popup.fillDetailsForm("test11", pass, pass);
-			soft.assertTrue(!popup.isOKButtonActive(), String.format("OK button should be disabled until valid data is filled in the popup - %s ", pass));
-			soft.assertEquals(popup.getPassValidationError(), SMPMessages.PASS_POLICY_MESSAGE, String.format("Pass policy message is displayed - %s", pass));
-		}
+            popup.fillDetailsForm("test11", pass, pass);
+            soft.assertTrue(!popup.isOKButtonActive(), String.format("OK button should be disabled until valid data is filled in the popup - %s ", pass));
+            soft.assertEquals(popup.getPassValidationError(), SMPMessages.PASS_POLICY_MESSAGE, String.format("Pass policy message is displayed - %s", pass));
+        }
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
-	@Test(description = "USR-40")
-	public void listedRoles() {
+    @Test(description = "USR-40")
+    public void listedRoles() {
 
-		ArrayList<String> expectedRoleValues = new ArrayList<>(Arrays.asList("SYSTEM_ADMIN", "SMP_ADMIN", "SERVICE_GROUP_ADMIN"));
+        ArrayList<String> expectedRoleValues = new ArrayList<>(Arrays.asList("SYSTEM_ADMIN", "SMP_ADMIN", "SERVICE_GROUP_ADMIN"));
 
-		SoftAssert soft = new SoftAssert();
+        SoftAssert soft = new SoftAssert();
 
-		UsersPage usersPage = new UsersPage(driver);
-		UserPopup popup = usersPage.clickNew();
-		List<String> listedRoles = popup.rolesSelect.getOptionTexts();
+        UsersPage usersPage = new UsersPage(driver);
+        UserPopup popup = usersPage.clickNew();
+        List<String> listedRoles = popup.rolesSelect.getOptionTexts();
 
-		soft.assertTrue(expectedRoleValues.size() == listedRoles.size(), "Number of roles is the same as expected");
+        soft.assertTrue(expectedRoleValues.size() == listedRoles.size(), "Number of roles is the same as expected");
 
-		for (String expected : expectedRoleValues) {
-			boolean found = false;
-			for (String listedRole : listedRoles) {
-				if (listedRole.equalsIgnoreCase(expected)) {
-					found = true;
-				}
-			}
-			soft.assertTrue(found, "Role found in page " + expected);
-		}
+        for (String expected : expectedRoleValues) {
+            boolean found = false;
+            for (String listedRole : listedRoles) {
+                if (listedRole.equalsIgnoreCase(expected)) {
+                    found = true;
+                }
+            }
+            soft.assertTrue(found, "Role found in page " + expected);
+        }
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
-	@Test(description = "USR-50")
-	public void deleteSYS_ADMIN() {
+    @Test(description = "USR-50")
+    public void deleteSYS_ADMIN() {
 
-		String username = Generator.randomAlphaNumeric(10);
-		SMPRestClient.createUser(username, "SYSTEM_ADMIN");
-		SoftAssert soft = new SoftAssert();
+        String username = Generator.randomAlphaNumeric(10);
+        SMPRestClient.createUser(username, "SYSTEM_ADMIN");
+        SoftAssert soft = new SoftAssert();
 
-		log.info("created user " + username);
-		UsersPage page = new UsersPage(driver);
-		page.refreshPage();
+        log.info("created user " + username);
+        UsersPage page = new UsersPage(driver);
+        page.refreshPage();
 
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled");
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled");
 
-		int index = scrollToUser(username);
-		page.grid().selectRow(index);
-		soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
+        int index = scrollToUser(username);
+        page.grid().selectRow(index);
+        soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
 
-		page.clickDelete();
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted");
-		soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted");
-		soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted");
+        page.clickDelete();
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted");
+        soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted");
+        soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted");
 
-		page.clickCancel().confirm();
-		new ConfirmationDialog(driver).confirm();
-		soft.assertTrue(isUserListed(username), "After canceling delete user is still listed");
+        page.clickCancel().confirm();
+        new ConfirmationDialog(driver).confirm();
+        soft.assertTrue(isUserListed(username), "After canceling delete user is still listed");
 
 
-		index = scrollToUser(username);
-		page.grid().selectRow(index);
-		soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select(2)");
+        index = scrollToUser(username);
+        page.grid().selectRow(index);
+        soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select(2)");
 
-		page.clickDelete();
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted(2)");
-		soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted(2)");
-		soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted(2)");
+        page.clickDelete();
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted(2)");
+        soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted(2)");
+        soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted(2)");
 
-		page.clickSave().confirm();
+        page.clickSave().confirm();
 
-		soft.assertTrue(page.alertArea.getAlertMessage().getMessage().equalsIgnoreCase(SMPMessages.MSG_18), "Message listed is as expected");
-		soft.assertTrue(!isUserListed(username), "After saving deleted user is not listed");
+        soft.assertTrue(page.alertArea.getAlertMessage().getMessage().equalsIgnoreCase(SMPMessages.MSG_18), "Message listed is as expected");
+        soft.assertTrue(!isUserListed(username), "After saving deleted user is not listed");
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
-	@Test(description = "USR-60")
-	public void changeRoleSYS_ADMIN() {
+    @Test(description = "USR-60")
+    public void changeRoleSYS_ADMIN() {
 
-		SoftAssert soft = new SoftAssert();
+        SoftAssert soft = new SoftAssert();
 
-		UsersPage page = new UsersPage(driver);
-		int index = scrollToUserWithRole("SYSTEM_ADMIN");
+        UsersPage page = new UsersPage(driver);
+        int index = scrollToUserWithRole("SYSTEM_ADMIN");
 
-		page.grid().selectRow(index);
-		UserPopup popup = page.clickEdit();
-		List<String> options = popup.rolesSelect.getOptionTexts();
-		soft.assertTrue(options.size() == 1, "Role dropdown has only one value");
-		soft.assertTrue(options.get(0).equalsIgnoreCase("SYSTEM_ADMIN"), "Role dropdown has only one value and that is \"SYSTEM_ADMIN\"");
+        page.grid().selectRow(index);
+        UserPopup popup = page.clickEdit();
+        List<String> options = popup.rolesSelect.getOptionTexts();
+        soft.assertTrue(options.size() == 1, "Role dropdown has only one value");
+        soft.assertTrue(options.get(0).equalsIgnoreCase("SYSTEM_ADMIN"), "Role dropdown has only one value and that is \"SYSTEM_ADMIN\"");
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
-	@Test(description = "USR-70")
-	public void changeRoleNON_SYS_ADMIN() {
+    @Test(description = "USR-70")
+    public void changeRoleNON_SYS_ADMIN() {
 
-		SoftAssert soft = new SoftAssert();
+        SoftAssert soft = new SoftAssert();
 
-		UsersPage page = new UsersPage(driver);
-		int index = scrollToUserWithRole("SMP_ADMIN");
+        UsersPage page = new UsersPage(driver);
+        int index = scrollToUserWithRole("SMP_ADMIN");
 
-		page.grid().selectRow(index);
-		UserPopup popup = page.clickEdit();
+        page.grid().selectRow(index);
+        UserPopup popup = page.clickEdit();
 
-		List<String> options = popup.rolesSelect.getOptionTexts();
-		soft.assertTrue(options.size() == 2, "Role dropdown has only two values");
-		soft.assertTrue(options.get(0).equalsIgnoreCase("SMP_ADMIN"), "Role dropdown has value \"SMP_ADMIN\"");
-		soft.assertTrue(options.get(1).equalsIgnoreCase("SERVICE_GROUP_ADMIN"), "Role dropdown has value \"SERVICE_GROUP_ADMIN\"");
+        List<String> options = popup.rolesSelect.getOptionTexts();
+        soft.assertTrue(options.size() == 2, "Role dropdown has only two values");
+        soft.assertTrue(options.get(0).equalsIgnoreCase("SMP_ADMIN"), "Role dropdown has value \"SMP_ADMIN\"");
+        soft.assertTrue(options.get(1).equalsIgnoreCase("SERVICE_GROUP_ADMIN"), "Role dropdown has value \"SERVICE_GROUP_ADMIN\"");
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
-	@Test(description = "USR-80")
-	public void deleteOWNUserRecord() {
+    @Test(description = "USR-80")
+    public void deleteOWNUserRecord() {
 
-		String username = new TestDataProvider().getUserWithRole("SYS_ADMIN").get("username");
+        String username = new TestDataProvider().getUserWithRole("SYS_ADMIN").get("username");
 
-		SoftAssert soft = new SoftAssert();
+        SoftAssert soft = new SoftAssert();
 
-		UsersPage page = new UsersPage(driver);
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled");
+        UsersPage page = new UsersPage(driver);
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled");
 
-		int index = scrollToUser(username);
-		page.grid().selectRow(index);
-		soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
+        int index = scrollToUser(username);
+        page.grid().selectRow(index);
+        soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
 
-		page.clickDelete();
-		AlertMessage message = page.alertArea.getAlertMessage();
-		soft.assertTrue(message.isError(), "Listed message is error");
-		soft.assertTrue(message.getMessage().equalsIgnoreCase(SMPMessages.USER_OWN_DELETE_ERR), "Listed message has appropriate text");
+        page.clickDelete();
+        AlertMessage message = page.alertArea.getAlertMessage();
+        soft.assertTrue(message.isError(), "Listed message is error");
+        soft.assertTrue(message.getMessage().equalsIgnoreCase(SMPMessages.USER_OWN_DELETE_ERR), "Listed message has appropriate text");
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
-	@Test(description = "USR-90")
-	public void deleteSMP_ADMIN() {
+    @Test(description = "USR-90")
+    public void deleteSMP_ADMIN() {
 
-		String username = Generator.randomAlphaNumeric(10);
-		SMPRestClient.createUser(username, "SMP_ADMIN");
-		SoftAssert soft = new SoftAssert();
+        String username = Generator.randomAlphaNumeric(10);
+        SMPRestClient.createUser(username, "SMP_ADMIN");
+        SoftAssert soft = new SoftAssert();
 
-		log.info("Created username " + username);
+        log.info("Created username " + username);
 
 
-		UsersPage page = new UsersPage(driver);
-		page.refreshPage();
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled");
+        UsersPage page = new UsersPage(driver);
+        page.refreshPage();
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled");
 
-		int index = scrollToUser(username);
-		page.grid().selectRow(index);
-		soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
+        int index = scrollToUser(username);
+        page.grid().selectRow(index);
+        soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
 
-		page.clickDelete();
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted");
-		soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted");
-		soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted");
+        page.clickDelete();
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted");
+        soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted");
+        soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted");
 
-		page.clickCancel().confirm();
-		new ConfirmationDialog(driver).confirm();
-		soft.assertTrue(isUserListed(username), "After canceling delete user is still listed");
+        page.clickCancel().confirm();
+        new ConfirmationDialog(driver).confirm();
+        soft.assertTrue(isUserListed(username), "After canceling delete user is still listed");
 
 
-		index = scrollToUser(username);
-		page.grid().selectRow(index);
-		soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select(2)");
+        index = scrollToUser(username);
+        page.grid().selectRow(index);
+        soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select(2)");
 
-		page.clickDelete();
-		page.waitForXMillis(200);
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted(2)");
-		soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted(2)");
-		soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted(2)");
+        page.clickDelete();
+        page.waitForXMillis(200);
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted(2)");
+        soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted(2)");
+        soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted(2)");
 
-		page.clickSave().confirm();
+        page.clickSave().confirm();
 
-		soft.assertTrue(page.alertArea.getAlertMessage().getMessage().equalsIgnoreCase(SMPMessages.MSG_18), "Message is as expected");
-		soft.assertTrue(!isUserListed(username), "After saving deleted user is not listed");
+        soft.assertTrue(page.alertArea.getAlertMessage().getMessage().equalsIgnoreCase(SMPMessages.MSG_18), "Message is as expected");
+        soft.assertTrue(!isUserListed(username), "After saving deleted user is not listed");
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
-	@Test(description = "USR-100")
-	public void deleteSERVICE_GROUP_ADMIN() {
+    @Test(description = "USR-100")
+    public void deleteSERVICE_GROUP_ADMIN() {
 
-		String username = Generator.randomAlphaNumeric(10);
-		SMPRestClient.createUser(username, "SERVICE_GROUP_ADMIN");
-		log.info("Created username" + username);
-		SoftAssert soft = new SoftAssert();
+        String username = Generator.randomAlphaNumeric(10);
+        SMPRestClient.createUser(username, "SERVICE_GROUP_ADMIN");
+        log.info("Created username" + username);
+        SoftAssert soft = new SoftAssert();
 
-		UsersPage page = new UsersPage(driver);
-		page.refreshPage();
-		page.waitForRowsToLoad();
+        UsersPage page = new UsersPage(driver);
+        page.refreshPage();
+        page.waitForRowsToLoad();
 
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled");
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled");
 
-		int index = scrollToUser(username);
-		page.grid().selectRow(index);
-		soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
+        int index = scrollToUser(username);
+        page.grid().selectRow(index);
+        soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
 
-		page.clickDelete();
-		page.waitForRowsToLoad();
+        page.clickDelete();
+        page.waitForRowsToLoad();
 
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted");
-		soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted");
-		soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted");
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted");
+        soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted");
+        soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted");
 
-		page.clickCancel().confirm();
-		new ConfirmationDialog(driver).confirm();
-		page.waitForRowsToLoad();
-		soft.assertTrue(isUserListed(username), "After canceling delete user is still listed");
+        page.clickCancel().confirm();
+        new ConfirmationDialog(driver).confirm();
+        page.waitForRowsToLoad();
+        soft.assertTrue(isUserListed(username), "After canceling delete user is still listed");
 
 
-		index = scrollToUser(username);
-		page.grid().selectRow(index);
+        index = scrollToUser(username);
+        page.grid().selectRow(index);
 
-		soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select(2)");
+        soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select(2)");
 
-		page.clickDelete();
-		page.waitForRowsToLoad();
-		soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted(2)");
-		soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted(2)");
-		soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted(2)");
+        page.clickDelete();
+        page.waitForRowsToLoad();
+        soft.assertTrue(!page.isDeleteButtonEnabled(), "Delete button is not enabled after user is deleted(2)");
+        soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled after user is deleted(2)");
+        soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled after user is deleted(2)");
 
-		page.clickSave().confirm();
+        page.clickSave().confirm();
 
-		soft.assertTrue(page.alertArea.getAlertMessage().getMessage().equalsIgnoreCase(SMPMessages.MSG_18), "Message is as expected");
-		soft.assertTrue(!isUserListed(username), "After saving deleted user is not listed");
+        soft.assertTrue(page.alertArea.getAlertMessage().getMessage().equalsIgnoreCase(SMPMessages.MSG_18), "Message is as expected");
+        soft.assertTrue(!isUserListed(username), "After saving deleted user is not listed");
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
-	@Test(description = "USR-110")
-	public void deleteSG_ADMINWithSG() {
+    @Test(description = "USR-110")
+    public void deleteSG_ADMINWithSG() {
 
-		String username = Generator.randomAlphaNumeric(10);
-		String pi = Generator.randomAlphaNumeric(10);
-		String ps = Generator.randomAlphaNumeric(10);
+        String username = Generator.randomAlphaNumeric(10);
+        String pi = Generator.randomAlphaNumeric(10);
+        String ps = Generator.randomAlphaNumeric(10);
 
-		String expectedErrorMess = String.format("Delete validation error Could not delete user with ownerships! User: %s owns SG count: 1.", username);
+        String expectedErrorMess = String.format("Delete validation error Could not delete user with ownerships! User: %s owns SG count: 1.", username);
 
-		SMPRestClient.createUser(username, "SERVICE_GROUP_ADMIN");
-		SMPRestClient.createServiceGroup(pi, ps,
-				new ArrayList<>(Arrays.asList(username)),
-				new ArrayList<>(Arrays.asList(createdDomains.get(0)))
-		);
+        SMPRestClient.createUser(username, "SERVICE_GROUP_ADMIN");
+        SMPRestClient.createServiceGroup(pi, ps,
+                new ArrayList<>(Arrays.asList(username)),
+                new ArrayList<>(Arrays.asList(createdDomains.get(0)))
+        );
 
-		log.info("Created username " + username);
-		log.info("Created service group " + pi);
+        log.info("Created username " + username);
+        log.info("Created service group " + pi);
 
-		SoftAssert soft = new SoftAssert();
+        SoftAssert soft = new SoftAssert();
 
-		UsersPage page = new UsersPage(driver);
-		page.refreshPage();
+        UsersPage page = new UsersPage(driver);
+        page.refreshPage();
 
-		int index = scrollToUser(username);
-		page.grid().selectRow(index);
-		soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
+        int index = scrollToUser(username);
+        page.grid().selectRow(index);
+        soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
 
-		page.clickDelete();
-		AlertMessage message = page.alertArea.getAlertMessage();
-		soft.assertTrue(message.isError(), "Page shows error message when deleting user with SG");
-		soft.assertTrue(message.getMessage().equalsIgnoreCase(expectedErrorMess), "Desired message appears");
+        page.clickDelete();
+        AlertMessage message = page.alertArea.getAlertMessage();
+        soft.assertTrue(message.isError(), "Page shows error message when deleting user with SG");
+        soft.assertTrue(message.getMessage().equalsIgnoreCase(expectedErrorMess), "Desired message appears");
 
-		SMPRestClient.deleteSG(pi);
-		SMPRestClient.deleteUser(username);
+        SMPRestClient.deleteSG(pi);
+        SMPRestClient.deleteUser(username);
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
-	@Test(description = "USR-120")
-	public void deleteSMP_ADMINWithSG() {
+    @Test(description = "USR-120")
+    public void deleteSMP_ADMINWithSG() {
 
-		String username = Generator.randomAlphaNumeric(10);
-		String pi = Generator.randomAlphaNumeric(10);
-		String ps = Generator.randomAlphaNumeric(10);
+        String username = Generator.randomAlphaNumeric(10);
+        String pi = Generator.randomAlphaNumeric(10);
+        String ps = Generator.randomAlphaNumeric(10);
 
-		String expectedErrorMess = String.format("Delete validation error Could not delete user with ownerships! User: %s owns SG count: 1.", username);
+        String expectedErrorMess = String.format("Delete validation error Could not delete user with ownerships! User: %s owns SG count: 1.", username);
 
-		SMPRestClient.createUser(username, "SMP_ADMIN");
-		SMPRestClient.createServiceGroup(pi, ps,
-				new ArrayList<>(Arrays.asList(username)),
-				new ArrayList<>(Arrays.asList(createdDomains.get(0)))
-		);
+        SMPRestClient.createUser(username, "SMP_ADMIN");
+        SMPRestClient.createServiceGroup(pi, ps,
+                new ArrayList<>(Arrays.asList(username)),
+                new ArrayList<>(Arrays.asList(createdDomains.get(0)))
+        );
 
-		log.info("Created username "+ username);
+        log.info("Created username " + username);
 
-		SoftAssert soft = new SoftAssert();
+        SoftAssert soft = new SoftAssert();
 
-		UsersPage page = new UsersPage(driver);
-		page.refreshPage();
+        UsersPage page = new UsersPage(driver);
+        page.refreshPage();
 
-		int index = scrollToUser(username);
-		page.grid().selectRow(index);
-		soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
+        int index = scrollToUser(username);
+        page.grid().selectRow(index);
+        soft.assertTrue(page.isDeleteButtonEnabled(), "Delete button is enabled after row select");
 
-		page.clickDelete();
-		page.waitForXMillis(500);
-		AlertMessage message = page.alertArea.getAlertMessage();
-		soft.assertTrue(message.isError(), "Page shows error message when deleting user with SG");
-		soft.assertTrue(message.getMessage().equalsIgnoreCase(expectedErrorMess), "Desired message appears");
+        page.clickDelete();
+        page.waitForXMillis(500);
+        AlertMessage message = page.alertArea.getAlertMessage();
+        soft.assertTrue(message.isError(), "Page shows error message when deleting user with SG");
+        soft.assertTrue(message.getMessage().equalsIgnoreCase(expectedErrorMess), "Desired message appears");
 
-		SMPRestClient.deleteSG(pi);
-		SMPRestClient.deleteUser(username);
+        SMPRestClient.deleteSG(pi);
+        SMPRestClient.deleteUser(username);
 
-		soft.assertAll();
-	}
+        soft.assertAll();
+    }
 
+    @Test(description = "USR-121")
+    public void duplicateUserCreation() {
+        SoftAssert soft = new SoftAssert();
+        String validPass = "QW!@qw12";
+        String errorMsg = "×\n" + "The operation 'update' not completed successfully. Unexpected technical error occurred.";
+        UsersPage page = new UsersPage(driver);
+        List<UserRowInfo> rows = page.grid().getRows();
+        UserRowInfo userRowInfo = null;
+        for (UserRowInfo row : rows) {
+            if (!row.getUsername().equalsIgnoreCase("smp")) {
+                userRowInfo = row;
+                break;
+            }
+        }
+        if (null != userRowInfo) {
+            String userName = userRowInfo.getUsername();
+            soft.assertTrue(page.isNewButtonEnabled(), "New button should be enabled");
 
-	private boolean isUserListed(String username) {
-		boolean end = false;
-
-		UsersPage page = new UsersPage(driver);
-		page.pagination.skipToFirstPage();
-
-		while (!end) {
-			page = new UsersPage(driver);
-			List<UserRowInfo> rows = page.grid().getRows();
-
-			for (UserRowInfo row : rows) {
-				if (row.getUsername().equalsIgnoreCase(username)) {
-					return true;
-				}
-			}
-
-			if (page.pagination.hasNextPage()) {
-				page.pagination.goToNextPage();
-			} else {
-				end = true;
-			}
-		}
-
-		return false;
-	}
-
-	private int scrollToUser(String username) {
-
-		UsersPage page = new UsersPage(driver);
-		page.pagination.skipToFirstPage();
-
-		boolean end = false;
-		while (!end) {
-			page = new UsersPage(driver);
-
-			List<UserRowInfo> rows = page.grid().getRows();
-			for (int i = 0; i < rows.size(); i++) {
-				if (rows.get(i).getUsername().equalsIgnoreCase(username)) {
-					return i;
-				}
-			}
-
-			if (page.pagination.hasNextPage()) {
-				page.pagination.goToNextPage();
-			} else {
-				end = true;
-			}
-		}
-
-		return -1;
-	}
-
-	private int scrollToUserWithRole(String role) {
-		UsersPage page = new UsersPage(driver);
-		page.pagination.skipToFirstPage();
-
-		boolean end = false;
-		while (!end) {
-			page = new UsersPage(driver);
-
-			List<UserRowInfo> rows = page.grid().getRows();
-			for (int i = 0; i < rows.size(); i++) {
-				if (rows.get(i).getRole().equalsIgnoreCase(role)) {
-					return i;
-				}
-			}
-
-			if (page.pagination.hasNextPage()) {
-				page.pagination.goToNextPage();
-			} else {
-				end = true;
-			}
-		}
-
-		return -1;
-	}
+            UserPopup popup = page.clickNew();
+            soft.assertTrue(!popup.isOKButtonActive(), "OK button is enable before valid data is filled in the popup");
+
+            popup.rolesSelect.selectOptionWithText("SYSTEM_ADMIN");
+
+            popup.clickUserDetailsToggle();
+            popup.fillDetailsForm(userName, validPass, validPass);
+            popup.clickOK();
+
+            soft.assertTrue(page.isSaveButtonEnabled(), "Save button is enabled");
+            soft.assertTrue(page.isCancelButtonEnabled(), "Cancel button is enabled");
+
+            page.clickSave().confirm();
+            soft.assertEquals(page.getDuplicateUserErrorMsg(), errorMsg, "The user page is not containing the expeced error message");
+            soft.assertAll();
+        } else {
+            soft.fail("unable to retrieve existing user details");
+        }
+    }
+
+    @Test(description = "USR-122")
+    public void verifyPasswordDoNotMatch()
+    {
+        String username = Generator.randomAlphaNumeric(10);
+        String validPass = "QW!@qw12";
+        String confirmPass = "AS@!gh12";
+        String errorMsg = "Passwords do not match";
+        SoftAssert soft = new SoftAssert();
+
+        UsersPage usersPage = new UsersPage(driver);
+        UserPopup popup = usersPage.clickNew();
+        soft.assertTrue(!popup.isOKButtonActive(), "OK button is enable before valid data is filled in the popup");
+
+        popup.rolesSelect.selectOptionWithText("SMP_ADMIN");
+
+        popup.clickUserDetailsToggle();
+
+        popup.fillDetailsForm(username, validPass,  confirmPass);
+        soft.assertEquals(popup.getPasswordUnmatchingMsg(),errorMsg,"confirmation input does not contain the message 'Passwords do not match' .");
+        soft.assertTrue(!popup.isOKButtonActive(), "OK button is enabled before valid data is filled in the popup(2)");
+        soft.assertAll();
+    }
+
+
+    private boolean isUserListed(String username) {
+        boolean end = false;
+
+        UsersPage page = new UsersPage(driver);
+        page.pagination.skipToFirstPage();
+
+        while (!end) {
+            page = new UsersPage(driver);
+            List<UserRowInfo> rows = page.grid().getRows();
+
+            for (UserRowInfo row : rows) {
+                if (row.getUsername().equalsIgnoreCase(username)) {
+                    return true;
+                }
+            }
+
+            if (page.pagination.hasNextPage()) {
+                page.pagination.goToNextPage();
+            } else {
+                end = true;
+            }
+        }
+
+        return false;
+    }
+
+    private int scrollToUser(String username) {
+
+        UsersPage page = new UsersPage(driver);
+        page.pagination.skipToFirstPage();
+
+        boolean end = false;
+        while (!end) {
+            page = new UsersPage(driver);
+
+            List<UserRowInfo> rows = page.grid().getRows();
+            for (int i = 0; i < rows.size(); i++) {
+                if (rows.get(i).getUsername().equalsIgnoreCase(username)) {
+                    return i;
+                }
+            }
+
+            if (page.pagination.hasNextPage()) {
+                page.pagination.goToNextPage();
+            } else {
+                end = true;
+            }
+        }
+
+        return -1;
+    }
+
+    private int scrollToUserWithRole(String role) {
+        UsersPage page = new UsersPage(driver);
+        page.pagination.skipToFirstPage();
+
+        boolean end = false;
+        while (!end) {
+            page = new UsersPage(driver);
+
+            List<UserRowInfo> rows = page.grid().getRows();
+            for (int i = 0; i < rows.size(); i++) {
+                if (rows.get(i).getRole().equalsIgnoreCase(role)) {
+                    return i;
+                }
+            }
+
+            if (page.pagination.hasNextPage()) {
+                page.pagination.goToNextPage();
+            } else {
+                end = true;
+            }
+        }
+
+        return -1;
+    }
 
 
 }
-- 
GitLab