re base code
[sdc.git] / ui-ci / src / main / java / org / openecomp / sdc / ci / tests / utilities / GeneralUIUtils.java
index f198ed9..30e6823 100644 (file)
@@ -22,834 +22,696 @@ package org.openecomp.sdc.ci.tests.utilities;
 
 import com.aventstack.extentreports.Status;
 import org.apache.commons.io.FileUtils;
-import org.openecomp.sdc.ci.tests.datatypes.CatalogFilterTitlesEnum;
 import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
-import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.DashboardCardEnum;
 import org.openecomp.sdc.ci.tests.execute.setup.DriverFactory;
 import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utils.Utils;
 import org.openqa.selenium.*;
 import org.openqa.selenium.firefox.FirefoxDriver;
 import org.openqa.selenium.interactions.Actions;
-import org.openqa.selenium.support.ui.*;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.Select;
+import org.openqa.selenium.support.ui.WebDriverWait;
 
 import java.awt.*;
 import java.awt.datatransfer.Clipboard;
 import java.awt.datatransfer.StringSelection;
-import java.awt.event.KeyEvent;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Random;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Supplier;
 
+import static org.testng.AssertJUnit.assertTrue;
+
 
 public final class GeneralUIUtils {
 
-       public static final String FILE_NAME = "Valid_tosca_Mycompute.yml";
-       
-       private static int timeOut=(int) (60*1.5);
-       
-//     public static void setTimeOut(int time) {
-//             if (time>0) {
-//                     timeOut=time;   
-//             }
-//             else {
-//                     timeOut=timeOut;
-//             }
-//     }
-
-       /**************** DRIVER ****************/
-       
-       public static WebDriver getDriver() {
-               try{
-                       return DriverFactory.getDriver();
-               }
-               catch(Exception e){
-                       e.printStackTrace();
-               }
-               return null;
-       }
-       /****************************************/
-       
-       public static List<WebElement> getElemenetsFromTable(By by) {
-               return getDriver().findElements(by);
-       }
+    private static final String DATA_TESTS_ID = "//*[@data-tests-id='";
+    private static final String COLOR_YELLOW_BORDER_4PX_SOLID_YELLOW = "color: yellow; border: 4px solid yellow;";
 
-       public static File takeScreenshot(String screenshotFilename, String dir, String testName) throws IOException {
-               if (screenshotFilename == null) {
-                       if (testName != null){
-                               screenshotFilename = testName;
-                       }
-                       else
-                       {
-                               screenshotFilename = UUID.randomUUID().toString();
-                       }
-               }
-               try {
-                       File scrFile = ((TakesScreenshot) getDriver()).getScreenshotAs(OutputType.FILE);
-                       File filePath = new File(String.format("%s/%s.png", dir, screenshotFilename));
-                       new File(dir).mkdirs();
-                       FileUtils.copyFile(scrFile, filePath);
-                       return filePath;
-               } catch (IOException e1) {
-                       e1.printStackTrace();
-               }
-               return null;
-       }
-       
-       public static File takeScreenshot(String screenshotFilename, String dir) throws IOException{
-               return takeScreenshot(screenshotFilename, dir, null);
-       }
+    private static int timeOut = (int) (60 * 1.5);
 
+    public static int getTimeOut() {
+        return timeOut;
+    }
 
-       public static void scrollDown() {
-               try{
-                       Robot robot = new Robot();
-                       robot.keyPress(KeyEvent.VK_DOWN);
-                       robot.keyRelease(KeyEvent.VK_DOWN);
-                       GeneralUIUtils.waitForLoader();
-               }
-               catch(Exception e){
-                       e.printStackTrace();
-               }
-       }
+    /**************** DRIVER ****************/
 
-       public static void minimizeCatalogFilterByTitle(CatalogFilterTitlesEnum titlesEnum) {
-
-               switch (titlesEnum) {
-               case CATEGORIES:
-                       GeneralUIUtils.getWebElementByTestID(titlesEnum.getValue()).click();
-                       break;
-               case STATUS:
-                       GeneralUIUtils.getWebElementByTestID(titlesEnum.getValue()).click();
-                       break;
-               case TYPE:
-                       GeneralUIUtils.getWebElementByTestID(titlesEnum.getValue()).click();
-                       break;
-               default:
-                       break;
-               }
-       
-       }
+    public static WebDriver getDriver() {
+        try {
+            return DriverFactory.getDriver();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 
-       public static WebElement getWebElementByTestID(String dataTestId) {
-               return getWebElementByTestID(dataTestId, timeOut);
-       }
-       
-       public static WebElement getWebElementByTestID(String dataTestId, int timeout) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeout);
-               return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
-       }
-       
-       public static boolean isWebElementExistByTestId(String dataTestId) {
-               if(getDriver().findElements(By.xpath("//*[@data-tests-id='" + dataTestId + "']")).size() == 0) {
-                       return false;
-               }
-               return true;
-       }
+    /****************************************/
 
-       public static boolean isWebElementExistByClass(String className) {
-               if(getDriver().findElements(By.className(className)).size() == 0) {
-                       return false;
-               }
-               return true;
-       }
+    public static List<WebElement> getElemenetsFromTable(By by) {
+        return getDriver().findElements(by);
+    }
 
-       public static WebElement getInputElement(String dataTestId) {
-               try{
-                       ultimateWait();
-                       return getDriver().findElement(By.xpath("//*[@data-tests-id='" + dataTestId + "']"));
-               }
-               catch(Exception e){
-                       return null;
-               }
-       }
+    public static File takeScreenshot(String screenshotFilename, String dir, String testName) throws IOException {
+        if (screenshotFilename == null) {
+            if (testName != null) {
+                screenshotFilename = testName;
+            } else {
+                screenshotFilename = UUID.randomUUID().toString();
+            }
+        }
+        try {
+            File scrFile = ((TakesScreenshot) getDriver()).getScreenshotAs(OutputType.FILE);
+            File filePath = new File(String.format("%s/%s.png", dir, screenshotFilename));
+            new File(dir).mkdirs();
+            FileUtils.copyFile(scrFile, filePath);
+            return filePath;
+        } catch (IOException e1) {
+            e1.printStackTrace();
+        }
+        return null;
+    }
 
-       public static List<WebElement> getInputElements(String dataTestId) {
-               ultimateWait();
-               return getDriver().findElements(By.xpath("//*[@data-tests-id='" + dataTestId + "']"));
+    public static File takeScreenshot(String screenshotFilename, String dir) throws IOException {
+        return takeScreenshot(screenshotFilename, dir, null);
+    }
 
-       }
-       
-       
-       public static WebElement getWebElementBy(By by) {
-               return getWebElementBy(by, timeOut);
-       }
-       
-       public static WebElement getWebElementBy(By by, int timeOut) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               return wait.until(ExpectedConditions.visibilityOfElementLocated(by));
-       }
-       
-       public static List<String> getWebElementListText(List<WebElement>elements) {
-               List<String>Text=new ArrayList<>();
-               for (WebElement webElement : elements) {
-                       Text.add(webElement.getText());
-               }
-               return Text;
-       }
-       
-       
-       public static List<WebElement> getWebElementsListBy(By by) {
-               return getWebElementsListBy(by, timeOut);
-       }
-       
-       public static List<WebElement> getWebElementsListBy(By by, int timeOut) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               return wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(by));
-       }
-       
-       public static List<WebElement> getWebElementsListByContainTestID(String dataTestId) {
-               try{
-                       WebDriverWait wait = new WebDriverWait(getDriver(), 10);
-                       return wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//*[contains(@data-tests-id, '"+dataTestId+"')]")));
-               }
-               catch(Exception e){
-                       return new ArrayList<WebElement>();
-               }
-       }
-       
-       public static List<WebElement> getWebElementsListByContainsClassName(String containedText) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               return wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//*[contains(@class, '"+containedText+"')]")));
-       }
-       
-       public static WebElement getWebElementByContainsClassName(String containedText) {
-               return getWebElementBy(By.xpath("//*[contains(@class, '"+containedText+"')]"));
-       }
-       
-       public static WebElement getWebElementByClassName(String className) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               return wait.until(ExpectedConditions.visibilityOfElementLocated(By.className(className)));
-       }
-       
-       public static WebElement getWebElementByLinkText(String linkText) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@text='" + linkText + "']")));
-       }
-       
-       
-       public static List<WebElement> getWebElementsListByTestID(String dataTestId) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               return wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
-       }
-       
-       public static List<WebElement> getWebElementsListByClassName(String className) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               return wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.className(className)));
-       }
-       
-       
+    public static WebElement getWebElementByTestID(String dataTestId) {
+        return getWebElementByTestID(dataTestId, timeOut);
+    }
 
+    public static WebElement getWebElementByTestID(String dataTestId, int timeout) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeout);
+        return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(DATA_TESTS_ID + dataTestId + "']")));
+    }
 
-       public static Boolean isElementInvisibleByTestId(String dataTestId) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               return wait.until(
-                               ExpectedConditions.invisibilityOfElementLocated(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
-       }
-       
-       public static Boolean isElementVisibleByTestId(String dataTestId) {
-               try{
-                       WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-                       if(wait.until(ExpectedConditions.visibilityOfElementLocated((By.xpath("//*[@data-tests-id='" + dataTestId + "']")))).isDisplayed()){
-                               return true;
-                       }else {
-                               return false;
-                       }
-               }
-               catch(Exception e){
-                       return false;
-               }
-       }
-       
-       public static void clickOnElementByTestId(String dataTestId) {
-               clickOnElementByTestIdWithoutWait(dataTestId);
-               ultimateWait();
-       }
+    public static boolean isWebElementExistByTestId(String dataTestId) {
+        return getDriver().findElements(By.xpath(DATA_TESTS_ID + dataTestId + "']")).size() != 0;
+    }
 
-       public static void clickOnElementByClassName(String className) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               wait.until(ExpectedConditions.elementToBeClickable(By.className(className))).click();
-               ultimateWait();
-       }
+    public static boolean isWebElementExistByClass(String className) {
+        return getDriver().findElements(By.className(className)).size() != 0;
+    }
 
-       public static void clickOnElementById(String id) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               wait.until(ExpectedConditions.elementToBeClickable(By.id(id))).click();
-               ultimateWait();
-       }
-       
-       public static void clickOnElementByTestIdWithoutWait(String dataTestId) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@data-tests-id='" + dataTestId + "']"))).click();
-       }
-       
-       public static void clickOnElementByTestId(String dataTestId, int customTimeout) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), customTimeout);
-               wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@data-tests-id='" + dataTestId + "']"))).click();
-       }
+    public static WebElement getInputElement(String dataTestId) {
+        try {
+            ultimateWait();
+            return getDriver().findElement(By.xpath(DATA_TESTS_ID + dataTestId + "']"));
+        } catch (Exception e) {
+            return null;
+        }
+    }
 
-       public static WebElement waitForElementVisibilityByTestId(String dataTestId) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
-       }
-       
-       public static Boolean waitForElementInVisibilityByTestId(String dataTestId) {
-               return waitForElementInVisibilityByTestId(dataTestId, timeOut);
-       }
-       
-       public static Boolean waitForElementInVisibilityByTestId(String dataTestId, int timeOut) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               boolean displayed = getDriver().findElements(By.xpath("//*[@data-tests-id='" + dataTestId + "']")).isEmpty();
-               if (!displayed){
-                       Boolean until = wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//*[@data-tests-id='" + dataTestId + "'])")));
-                       ultimateWait();
-                       return until;
-               }
-               return false;
-       }
-       
-       public static Boolean waitForElementInVisibilityByTestId(By by) {
-               return waitForElementInVisibilityBy(by, timeOut);
-       }
-       
-       
-       public static Boolean waitForElementInVisibilityBy(By by, int timeOut) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               boolean displayed = getDriver().findElements(by).isEmpty();
-               if (!displayed){
-                       Boolean until = wait.until(ExpectedConditions.invisibilityOfElementLocated(by));
-                       sleep(1000);
-                       return until;
-               }
-               return false;
-       }
-       
-       
-       public static void setWebElementByTestId(String elemetID, String value) {
-               WebElement resourceDescriptionTextbox = GeneralUIUtils.getWebElementByTestID(elemetID);
-               resourceDescriptionTextbox.clear();
-               resourceDescriptionTextbox.sendKeys(value);
-               
-       }
-       
-       public static WebElement hoverOnAreaByTestId(String areaId) {
-               Actions actions = new Actions(getDriver());
-               WebElement area = getWebElementByTestID(areaId);
-               actions.moveToElement(area).perform();
-               ultimateWait();
-               return area;
-       }
-       
-       public static WebElement hoverOnAreaByClassName(String className) {
-               Actions actions = new Actions(getDriver());
-               WebElement area = getWebElementByClassName(className);
-               actions.moveToElement(area).perform();
-               GeneralUIUtils.ultimateWait();
-               return area;
-       }
-       
-       public static void clickElementUsingActions(WebElement element){
-               Actions actions = new Actions(getDriver());
-               
-               actions.moveToElement(element);
-               actions.perform();
-               
-               actions.click();
-               actions.perform();
-               
-               ultimateWait();
-       }
-       
-       public static void waitForLoader() {
-               waitForLoader(timeOut);
-       }
-       
-       public static void waitForLoader(int timeOut) {
-               sleep(500);
-               waitForElementInVisibilityBy(By.className("tlv-loader"), timeOut);
-       }
-       
-       public static void findComponentAndClick(String resourceName) throws Exception {
-               SetupCDTest.getExtendTest().log(Status.INFO, "Searching for " + resourceName + " in homepage");
-               WebElement searchTextbox = GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtons.SEARCH_BOX.getValue());
-               try{
-                       searchTextbox.clear();
-                       searchTextbox.sendKeys(resourceName);
-                       ultimateWait();
-               }
-               catch(Exception e){
-                       SetupCDTest.getExtendTest().log(Status.INFO, "Can't interact with search bar");
-                       e.printStackTrace();
-               }
-               
-               
-               try{
-                       SetupCDTest.getExtendTest().log(Status.INFO, String.format("Clicking on the %s component from home screen", resourceName));
-                       clickOnElementByTestId(resourceName);
-                       GeneralUIUtils.ultimateWait();
-                       getWebElementByTestID(DataTestIdEnum.GeneralElementsEnum.LIFECYCLE_STATE.getValue());
-               }
-               catch(Exception e){
-                       SetupCDTest.getExtendTest().log(Status.INFO, "Can't click on component named " + resourceName);
-                       e.printStackTrace();
-               }
-       }
-       
-       
-       public static String getComponentVersion(String componentName) {
-               return GeneralUIUtils.getWebElementByTestID(componentName + "Version").getText();
-       }
-       
-       public static void windowZoomOut() {
-                       final int zoomOutFactor = 3;
-                       for (int i = 0; i < zoomOutFactor; i++) {
-                               if(getDriver() instanceof FirefoxDriver) {
-                                       getDriver().findElement(By.tagName("html")).sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT));
-                               }
-               }
-       }
-       
-       public static void resetZoom(){
-               getDriver().findElement(By.tagName("html")).sendKeys(Keys.chord(Keys.CONTROL, "0"));
-       }
-       
-       public static void windowZoomOutUltimate(){
-               resetZoom();
-               windowZoomOut();
-//             JavascriptExecutor js = (JavascriptExecutor) driver;
-//             js.executeScript("document.body.style.zoom='90%'");
-       }
-       
-       public static void clickASDCLogo() {
-               WebDriverWait wait = new WebDriverWait(getDriver(), 15);
-               wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("ASDC")));
-               WebElement ClickASDCLogo = getDriver().findElement(By.linkText("ASDC"));
-               ClickASDCLogo.click();
-               GeneralUIUtils.waitForLoader();
-       }
-       
-       public static void sleep(int duration) {
-               try {
-                       Thread.sleep(duration);
-               } catch (InterruptedException e) {
-                       throw new RuntimeException(e);
-               }
-       }
-       
-       public static void moveToStep(DataTestIdEnum.StepsEnum stepName) {
-               SetupCDTest.getExtendTest().log(Status.INFO, String.format("Going to %s page ", stepName.toString()));
-               moveToStep(stepName.getValue());
-       }
+    public static List<WebElement> getInputElements(String dataTestId) {
+        ultimateWait();
+        return getDriver().findElements(By.xpath(DATA_TESTS_ID + dataTestId + "']"));
+
+    }
+
+    public static WebElement getWebElementBy(By by) {
+        return getWebElementBy(by, timeOut);
+    }
+
+    public static WebElement getWebElementBy(By by, int timeOut) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        return wait.until(ExpectedConditions.visibilityOfElementLocated(by));
+    }
+
+    public static WebElement getWebElementByPresence(By by, int timeOut) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        return wait.until(ExpectedConditions.presenceOfElementLocated(by));
+    }
+
+    public static List<String> getWebElementListText(List<WebElement> elements) {
+        List<String> Text = new ArrayList<>();
+        for (WebElement webElement : elements) {
+            Text.add(webElement.getText());
+        }
+        return Text;
+    }
+
+    public static List<WebElement> getWebElementsListBy(By by) {
+        return getWebElementsListBy(by, timeOut);
+    }
+
+    public static List<WebElement> getWebElementsListBy(By by, int timeOut) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        return wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(by));
+    }
+
+    public static List<WebElement> getWebElementsListByContainTestID(String dataTestId) {
+        try {
+            WebDriverWait wait = new WebDriverWait(getDriver(), 10);
+            return wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//*[contains(@data-tests-id, '" + dataTestId + "')]")));
+        } catch (Exception e) {
+            return new ArrayList<WebElement>();
+        }
+    }
+
+    public static List<WebElement> getWebElementsListByContainsClassName(String containedText) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        return wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//*[contains(@class, '" + containedText + "')]")));
+    }
+
+    public static WebElement getWebElementByContainsClassName(String containedText) {
+        return getWebElementBy(By.xpath("//*[contains(@class, '" + containedText + "')]"));
+    }
+
+    public static WebElement getWebElementByClassName(String className) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        return wait.until(ExpectedConditions.visibilityOfElementLocated(By.className(className)));
+    }
+
+    public static List<WebElement> getWebElementsListByTestID(String dataTestId) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        return wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath(DATA_TESTS_ID + dataTestId + "']")));
+    }
+
+    public static List<WebElement> getWebElementsListByClassName(String className) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        return wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.className(className)));
+    }
+
+
+    public static Boolean isElementInvisibleByTestId(String dataTestId) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        return wait.until(
+                ExpectedConditions.invisibilityOfElementLocated(By.xpath(DATA_TESTS_ID + dataTestId + "']")));
+    }
+
+    public static Boolean isElementVisibleByTestId(String dataTestId) {
+        try {
+            WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+            return wait.until(ExpectedConditions.visibilityOfElementLocated((By.xpath(DATA_TESTS_ID + dataTestId + "']")))).isDisplayed();
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    public static void clickOnElementByTestId(String dataTestId) {
+        clickOnElementByTestIdWithoutWait(dataTestId);
+        ultimateWait();
+    }
+
+    public static void clickOnElementByTestIdWithoutWait(String dataTestId) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        wait.until(ExpectedConditions.elementToBeClickable(By.xpath(DATA_TESTS_ID + dataTestId + "']"))).click();
+    }
+
+    public static void clickOnElementByInputTestIdWithoutWait(String dataTestId) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        wait.until(ExpectedConditions.elementToBeClickable(By.xpath(DATA_TESTS_ID + dataTestId + "']//*"))).click();
+    }
+
+    public static void clickOnElementByTestId(String dataTestId, int customTimeout) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), customTimeout);
+        wait.until(ExpectedConditions.elementToBeClickable(By.xpath(DATA_TESTS_ID + dataTestId + "']"))).click();
+    }
+
+    public static WebElement waitForElementVisibilityByTestId(String dataTestId) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(DATA_TESTS_ID + dataTestId + "']")));
+    }
+
+    public static Boolean waitForElementInVisibilityByTestId(String dataTestId) {
+        return waitForElementInVisibilityByTestId(dataTestId, timeOut);
+    }
+
+    public static Boolean waitForElementInVisibilityByTestId(String dataTestId, int timeOut) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        boolean displayed = getDriver().findElements(By.xpath(DATA_TESTS_ID + dataTestId + "']")).isEmpty();
+        if (!displayed) {
+            Boolean until = wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(DATA_TESTS_ID + dataTestId + "'])")));
+            ultimateWait();
+            return until;
+        }
+        return false;
+    }
+
+    public static Boolean waitForElementInVisibilityByTestId(By by) {
+        return waitForElementInVisibilityBy(by, timeOut);
+    }
+
+
+    public static Boolean waitForElementInVisibilityBy(By by, int timeOut) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        boolean displayed = getDriver().findElements(by).isEmpty();
+        if (!displayed) {
+            Boolean until = wait.until(ExpectedConditions.invisibilityOfElementLocated(by));
+            sleep(1000);
+            return until;
+        }
+        return false;
+    }
+
+
+    public static void setWebElementByTestId(String elemetID, String value) {
+        WebElement resourceDescriptionTextbox = GeneralUIUtils.getWebElementByTestID(elemetID);
+        resourceDescriptionTextbox.clear();
+        resourceDescriptionTextbox.sendKeys(value);
+
+    }
+
+    public static WebElement hoverOnAreaByTestId(String areaId) {
+        Actions actions = new Actions(getDriver());
+        WebElement area = getWebElementByTestID(areaId);
+        actions.moveToElement(area).perform();
+        ultimateWait();
+        return area;
+    }
+
+    public static WebElement hoverOnAreaByClassName(String className) {
+        Actions actions = new Actions(getDriver());
+        WebElement area = getWebElementByClassName(className);
+        actions.moveToElement(area).perform();
+        GeneralUIUtils.ultimateWait();
+        return area;
+    }
+
+    public static void waitForLoader() {
+        waitForLoader(timeOut);
+    }
+
+    public static void waitForLoader(int timeOut) {
+        sleep(500);
+        waitForElementInVisibilityBy(By.className("tlv-loader"), timeOut);
+    }
+
+    public static void findComponentAndClick(String resourceName) throws Exception {
+        SetupCDTest.getExtendTest().log(Status.INFO, "Searching for " + resourceName + " in homepage");
+        WebElement searchTextbox = GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtons.SEARCH_BOX.getValue());
+        try {
+            searchTextbox.clear();
+            searchTextbox.sendKeys(resourceName);
+            ultimateWait();
+        } catch (Exception e) {
+            SetupCDTest.getExtendTest().log(Status.INFO, "Can't interact with search bar");
+            e.printStackTrace();
+        }
+
+        try {
+            SetupCDTest.getExtendTest().log(Status.INFO, String.format("Clicking on the %s component from home screen", resourceName));
+            clickOnElementByTestId(resourceName);
+            getWebElementByTestID(DataTestIdEnum.GeneralElementsEnum.LIFECYCLE_STATE.getValue());
+        } catch (Exception e) {
+            SetupCDTest.getExtendTest().log(Status.INFO, "Can't click on component named " + resourceName);
+            e.printStackTrace();
+        }
+    }
+
+    public static void windowZoomOut() {
+        final int zoomOutFactor = 3;
+        for (int i = 0; i < zoomOutFactor; i++) {
+            if (getDriver() instanceof FirefoxDriver) {
+                getDriver().findElement(By.tagName("html")).sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT));
+            }
+        }
+    }
+
+    public static void resetZoom() {
+        getDriver().findElement(By.tagName("html")).sendKeys(Keys.chord(Keys.CONTROL, "0"));
+    }
+
+    public static void windowZoomOutUltimate() {
+        resetZoom();
+        windowZoomOut();
+    }
+
+    public static void sleep(int duration) {
+        try {
+            Thread.sleep(duration);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public static void moveToStep(DataTestIdEnum.StepsEnum stepName) {
+        SetupCDTest.getExtendTest().log(Status.INFO, String.format("Going to %s page ", stepName.toString()));
+        moveToStep(stepName.getValue());
+    }
+
+    public static void moveToStep(String dataTestId) {
+        clickOnElementByTestId(dataTestId);
+    }
+
+
+    public static Select getSelectList(String item, String datatestsid) {
+        Select selectList = new Select(getWebElementByTestID(datatestsid));
+        if (item != null) {
+            selectList.selectByVisibleText(item);
+        }
+        return selectList;
+    }
+
+    public static List<WebElement> getElementsByCSS(String cssString) /*throws InterruptedException*/ {
+        GeneralUIUtils.waitForLoader();
+        return getDriver().findElements(By.cssSelector(cssString));
+    }
+
+    public static WebElement getElementfromElementByCSS(WebElement parentElement, String cssString) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        GeneralUIUtils.waitForLoader();
+        return parentElement.findElement(By.cssSelector(cssString));
+    }
+
+    public static WebElement HighlightMyElement(WebElement element) {
+        JavascriptExecutor javascript = (JavascriptExecutor) getDriver();
+        javascript.executeScript("arguments[0].setAttribute('style', arguments[1]);", element, COLOR_YELLOW_BORDER_4PX_SOLID_YELLOW);
+        return element;
+    }
+
+    public static WebElement getSelectedElementFromDropDown(String dataTestId) {
+        GeneralUIUtils.ultimateWait();
+        return new Select(getDriver().findElement(By.xpath(DATA_TESTS_ID + dataTestId + "']"))).getFirstSelectedOption();
+    }
+
+    public static boolean checkElementsCountInTable(int expectedElementsCount, Supplier<List<WebElement>> func) {
+        int maxWaitingPeriodMS = 10 * 1000;
+        int napPeriodMS = 100;
+        int sumOfWaiting = 0;
+        List<WebElement> elements = null;
+        boolean isKeepWaiting = false;
+        while (!isKeepWaiting) {
+            elements = func.get();
+            isKeepWaiting = (expectedElementsCount == elements.size());
+            sleep(napPeriodMS);
+            sumOfWaiting += napPeriodMS;
+            if (sumOfWaiting > maxWaitingPeriodMS)
+                return false;
+        }
+        return true;
+    }
+
+    public static String getActionDuration(Runnable func) throws Exception {
+        long startTime = System.nanoTime();
+        func.run();
+        long estimateTime = System.nanoTime();
+        long duration = TimeUnit.NANOSECONDS.toSeconds(estimateTime - startTime);
+        String durationString = String.format("%02d:%02d", duration / 60, duration % 60);
+        return durationString;
+    }
 
-       public static void moveToStep(String dataTestId) {
-               clickOnElementByTestId(dataTestId);
-               ultimateWait();
-       }
-       
-       
-       public static Select getSelectList(String item, String datatestsid) {
-               Select selectlist = new Select(getWebElementByTestID(datatestsid));
-               if (item != null) {
-                       selectlist.selectByVisibleText(item);
-               }
-               return selectlist;
-       }       
-       
-       public static List<WebElement> waitForElementsListVisibilityTestMethod(DashboardCardEnum dataTestId) {
-               GeneralUIUtils.waitForLoader();
-               return getDriver().findElements(By.xpath("//*[@data-tests-id='" + dataTestId.getValue() + "']"));
-       }
-       
-    public static List<WebElement> getElementsByCSS(String cssString) throws InterruptedException {
-               GeneralUIUtils.waitForLoader();
-               List<WebElement> assets = getDriver().findElements(By.cssSelector(cssString));
-               return assets;
-       }
-   
-    public static WebElement getElementfromElementByCSS(WebElement parentElement, String cssString){
-       WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-       GeneralUIUtils.waitForLoader();
-       return parentElement.findElement(By.cssSelector(cssString));
-    }
-    
-    public static WebElement getElementfromElementByXPATH(WebElement parentElement, DashboardCardEnum dataTestId){
-       WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-       GeneralUIUtils.waitForLoader();
-       return HighlightMyElement( parentElement.findElement(By.xpath("//*[@data-tests-id='" + dataTestId.getValue() + "']")));
-    }
-    
-    public static WebElement HighlightMyElement(WebElement element) { 
-          JavascriptExecutor javascript = (JavascriptExecutor) getDriver();
-          javascript.executeScript("arguments[0].setAttribute('style', arguments[1]);", element, "color: yellow; border: 4px solid yellow;");
-          return element;
-    } 
-    
-    public static WebElement getSelectedElementFromDropDown(String dataTestId){
-       GeneralUIUtils.ultimateWait();;
-       WebElement selectedElement = new Select (getDriver().findElement(By.xpath("//*[@data-tests-id='" + dataTestId + "']"))).getFirstSelectedOption();
-       return selectedElement;
-    }
-    
-    
-    public static void waitForPageLoadByReadyState() {
-        new WebDriverWait(getDriver(), 30).until((ExpectedCondition<Boolean>) wd ->    
-               ((JavascriptExecutor) wd).executeScript("return document.readyState").equals("complete"));
-    }
-    
-
-       public static boolean checkElementsCountInTable(int expectedElementsCount, Supplier<List<WebElement>> func) {
-               int maxWaitingPeriodMS = 10 * 1000;
-               int napPeriodMS = 100;
-               int sumOfWaiting = 0;
-               List<WebElement> elements = null;
-               boolean isKeepWaiting = false;
-               while (!isKeepWaiting) {
-                       elements = func.get();
-                       isKeepWaiting = (expectedElementsCount == elements.size());
-                       sleep(napPeriodMS);
-                       sumOfWaiting += napPeriodMS;
-                       if (sumOfWaiting > maxWaitingPeriodMS)
-                               return false;
-               }
-               return true;
-       }
-       
-       public static String getActionDuration(Runnable func) throws Exception{
-               long startTime = System.nanoTime();
-               func.run();
-               long estimateTime = System.nanoTime();
-           long duration = TimeUnit.NANOSECONDS.toSeconds(estimateTime - startTime);
-           String durationString = String.format("%02d:%02d", duration / 60, duration % 60);
-           return durationString;
-       }
-       
     public static WebElement clickOnAreaJS(String areaId) {
-       return clickOnAreaJS(areaId, timeOut);
+        return clickOnAreaJS(areaId, timeOut);
     }
-    
-    
+
+
     public static WebElement clickOnAreaJS(String areaId, int timeout) {
-       try{
-               ultimateWait();
-               WebElement area = getWebElementByTestID(areaId);
-               JavascriptExecutor javascript = (JavascriptExecutor) getDriver();
-               //HighlightMyElement(area);
-               Object executeScript = javascript.executeScript("arguments[0].click();", area, "color: yellow; border: 4px solid yellow;");
-               waitForLoader(timeout);      
-               return area;
-       }
-       catch (Exception e){
-               e.printStackTrace();
-       }
-               return null;
-    }
-
-    
-    
+        try {
+            ultimateWait();
+            WebElement area = getWebElementByTestID(areaId);
+            JavascriptExecutor javascript = (JavascriptExecutor) getDriver();
+            //HighlightMyElement(area);
+            Object executeScript = javascript.executeScript("arguments[0].click();", area, COLOR_YELLOW_BORDER_4PX_SOLID_YELLOW);
+            waitForLoader(timeout);
+            ultimateWait();
+            return area;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
     public static WebElement clickOnAreaJS(WebElement areaId) throws InterruptedException {
         JavascriptExecutor javascript = (JavascriptExecutor) getDriver();
         //HighlightMyElement(area);
-        javascript.executeScript("arguments[0].click();", areaId, "color: yellow; border: 4px solid yellow;");
+        javascript.executeScript("arguments[0].click();", areaId, COLOR_YELLOW_BORDER_4PX_SOLID_YELLOW);
         return areaId;
     }
-    
-    
-    
+
+
     public static void clickSomewhereOnPage() {
-       getDriver().findElement(By.cssSelector(".asdc-app-title")).click();
-       }
-    
-    public static void findComponentAndClickInCatalog(String resourceName) throws Exception {
-       // This method will find element by element name, don't use data-tests-id argument
-               WebElement searchTextbox = GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtons.SEARCH_BOX.getValue());
-               searchTextbox.clear();
-               searchTextbox.sendKeys(resourceName);
-               ultimateWait();
-               clickOnElementByText(resourceName);
-               ultimateWait();
-       }
-    
-       public static void clickOnElementByText(String textInElement) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               HighlightMyElement(wait.until(
-                               ExpectedConditions.elementToBeClickable(findByText(textInElement)))).click();
-       }
-       
-       public static void clickOnElementByText(String textInElement, int customTimeout) {
-               WebDriverWait wait = new WebDriverWait(getDriver(), customTimeout);
-               HighlightMyElement(wait.until(
-                               ExpectedConditions.elementToBeClickable(findByText(textInElement)))).click();
-       }
-    
-       public static void clickJSOnElementByText(String textInElement) throws Exception {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               clickOnAreaJS(wait.until(
-                               ExpectedConditions.elementToBeClickable(findByText(textInElement))));
-       }
-       
-    public static void fluentWaitTestID(String dataTestId, String text) {
-       FluentWait<WebDriver> fluentWait = new FluentWait<WebDriver>(getDriver())
-                               .withTimeout(30, TimeUnit.SECONDS)
-                               .pollingEvery(50, TimeUnit.MILLISECONDS)
-                               .ignoring(NoSuchElementException.class);
-
-               fluentWait.until(ExpectedConditions.refreshed(
-                               ExpectedConditions.textToBePresentInElementValue(By.xpath("//*[@data-tests-id='" + dataTestId + "']"), text)));
-    }    
-    
-    public static void regularWait(WebElement element, String text){
-       WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-
-               wait.until(ExpectedConditions.textToBePresentInElementValue(element, text));
-    }
-    
-    public static void waitForAngular(){
-       WebDriverWait wait = new WebDriverWait(getDriver(), 90, 100);
-       wait.until(AdditionalConditions.pageLoadWait());
-       wait.until(AdditionalConditions.angularHasFinishedProcessing());
-    }
-    
-       public static Object getAllElementAttributes(WebElement element) {
-               return ((JavascriptExecutor)getDriver()).executeScript("var s = []; var attrs = arguments[0].attributes; for (var l = 0; l < attrs.length; ++l) { var a = attrs[l]; s.push(a.name + ':' + a.value); } ; return s;", element);
-       }
-    
-    public static boolean isElementReadOnly(WebElement element){
-       try {
-               HighlightMyElement(element).clear();
-                       return false;
-               } catch (Exception e) {
-                       return true;
-               }       
-    }
-    
-    public static boolean isElementReadOnly(String dataTestId){
-       return isElementReadOnly(
-                       waitForElementVisibilityByTestId(dataTestId));
-    }
-    
-    public static boolean isElementDisabled(WebElement element){
-       return HighlightMyElement(element).getAttribute("class").contains("view-mode") || 
-                       element.getAttribute("class").contains("disabled");
-    }
-    
-    public static boolean isElementDisabled(String dataTestId){
-       return isElementDisabled(
-                       waitForElementVisibilityByTestId(dataTestId));
-    }
-    
-    public static void ultimateWait(){
-       long startTime = System.nanoTime();                    
-
-       GeneralUIUtils.waitForLoader();
-       GeneralUIUtils.waitForBackLoader();
-               GeneralUIUtils.waitForAngular();
-               
-               long estimateTime = System.nanoTime();
-               long duration = TimeUnit.NANOSECONDS.toSeconds(estimateTime - startTime);
-//             System.out.println("UltimateWait took: "+ duration);
-               if(duration > timeOut){
-                       SetupCDTest.getExtendTest().log(Status.WARNING, String.format("Delays on page, %d seconds", duration));
-               }
-//             waitForUINotification();
-    }
-    
-    public static WebElement makeElementVisibleWithJS(WebElement element){
-       String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";
-       ((JavascriptExecutor) getDriver()).executeScript(js, element);
-       return element;         
-    }
-    
-    public static WebElement unhideElement(WebElement element, String attributeValue){
-       String js = "arguments[0].setAttribute('class','" + attributeValue + "');";
-       ((JavascriptExecutor) getDriver()).executeScript(js, element);
-       return element;         
-    }   
-         
-    public static WebElement findByText(String textInElement){
-       return getDriver().findElement(searchByTextContaining(textInElement));
+        getDriver().findElement(By.cssSelector(".asdc-app-title")).click();
+    }
+
+    public static void clickOnElementByText(String textInElement) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        HighlightMyElement(wait.until(
+                ExpectedConditions.elementToBeClickable(findByText(textInElement)))).click();
+    }
+
+    public static void clickOnElementByText(String textInElement, int customTimeout) {
+        WebDriverWait wait = new WebDriverWait(getDriver(), customTimeout);
+        HighlightMyElement(wait.until(
+                ExpectedConditions.elementToBeClickable(findByText(textInElement)))).click();
+    }
+
+    public static void clickJSOnElementByText(String textInElement) throws Exception {
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        clickOnAreaJS(wait.until(
+                ExpectedConditions.elementToBeClickable(findByText(textInElement))));
+    }
+
+    public static void waitForAngular() {
+        WebDriverWait wait = new WebDriverWait(getDriver(), 90, 100);
+        wait.until(AdditionalConditions.pageLoadWait());
+        wait.until(AdditionalConditions.angularHasFinishedProcessing());
+    }
+
+    public static Object getAllElementAttributes(WebElement element) {
+        return ((JavascriptExecutor) getDriver()).executeScript("var s = []; var attrs = arguments[0].attributes; for (var l = 0; l < attrs.length; ++l) { var a = attrs[l]; s.push(a.name + ':' + a.value); } ; return s;", element);
+    }
+
+    public static boolean isElementReadOnly(WebElement element) {
+        try {
+            HighlightMyElement(element).clear();
+            return false;
+        } catch (Exception e) {
+            return true;
+        }
+    }
+
+    public static boolean isElementReadOnly(String dataTestId) {
+        return isElementReadOnly(
+                waitForElementVisibilityByTestId(dataTestId));
+    }
+
+    public static boolean isElementDisabled(WebElement element) {
+        return HighlightMyElement(element).getAttribute("class").contains("view-mode") ||
+                element.getAttribute("class").contains("disabled");
+    }
+
+    public static boolean isElementDisabled(String dataTestId) {
+        return isElementDisabled(
+                waitForElementVisibilityByTestId(dataTestId));
+    }
+
+    public static void ultimateWait() {
+        long startTime = System.nanoTime();
+
+        GeneralUIUtils.waitForLoader();
+        GeneralUIUtils.waitForBackLoader();
+        GeneralUIUtils.waitForAngular();
+
+        long estimateTime = System.nanoTime();
+        long duration = TimeUnit.NANOSECONDS.toSeconds(estimateTime - startTime);
+        if (duration > timeOut) {
+            SetupCDTest.getExtendTest().log(Status.WARNING, String.format("Delays on page, %d seconds", duration));
+        }
+    }
+
+    public static WebElement unhideElement(WebElement element, String attributeValue) {
+        String js = "arguments[0].setAttribute('class','" + attributeValue + "');";
+        ((JavascriptExecutor) getDriver()).executeScript(js, element);
+        return element;
+    }
+
+    public static WebElement findByText(String textInElement) {
+        return getDriver().findElement(searchByTextContaining(textInElement));
     }
+
     public static By searchByTextContaining(String textInElement) {
-               return By.xpath("//*[contains(text(),'" + textInElement + "')]");
-       }
-    
-    
-    public static boolean findAndWaitByText(String textInElement, int timeout){
-       try{
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeout);
-               wait.until(ExpectedConditions.presenceOfElementLocated(searchByTextContaining(textInElement)));
-               return true;
-       }
-       catch(Exception e){
-               return false;
-       }
-    }
-    
-    public static WebElement getClickableButtonBy(By by, int timout){
-       try{
-               WebDriverWait wait = new WebDriverWait(getDriver(), timout);
-               WebElement element = wait.until(ExpectedConditions.elementToBeClickable(by));
-               return element;
-       }
-       catch(Exception e){
-               return null;
-       }
-    }
-    
-    
-    
-    public static WebElement getButtonWithText(String textInButton){
-       try{
-               return getDriver().findElement(By.xpath("//button[contains(text(),'" + textInButton + "')]"));
-       }
-       catch(Exception e)
-       {
-               return null;
-       }
-    }
-    
-    
-    public static List<WebElement> getElementsByDataTestsIdStartWith(String startWithString){
-       ultimateWait();
-       return getDriver().findElements(By.xpath("//*[starts-with(@data-tests-id,'" + startWithString + "')]"));
-    }
-    
-       public static void closeErrorMessage() {
-               WebElement okWebElement = getButtonWithText("OK");
-               if (okWebElement != null){
-                       okWebElement.click();
-                       ultimateWait();
-               }
-       }
-    
+        return By.xpath("//*[contains(text(),'" + textInElement + "')]");
+    }
+
+    public static WebElement getClickableButtonBy(By by, int timout) {
+        try {
+            WebDriverWait wait = new WebDriverWait(getDriver(), timout);
+            return wait.until(ExpectedConditions.elementToBeClickable(by));
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+
+    public static WebElement getButtonWithText(String textInButton) {
+        try {
+            return getDriver().findElement(By.xpath("//button[contains(text(),'" + textInButton + "')]"));
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    public static void closeErrorMessage() {
+        WebElement okWebElement = getButtonWithText("OK");
+        if (okWebElement != null) {
+            okWebElement.click();
+            ultimateWait();
+        }
+    }
+
     public static WebElement getElementByCSS(String cssString) throws InterruptedException {
-               ultimateWait();
-               return getDriver().findElement(By.cssSelector(cssString));
-       }
-    
+        ultimateWait();
+        return getDriver().findElement(By.cssSelector(cssString));
+    }
+
     public static String getDataTestIdAttributeValue(WebElement element) {
-               return element.getAttribute("data-tests-id");
-       }
-    
+        return element.getAttribute("data-tests-id");
+    }
+
     public static String getTextContentAttributeValue(WebElement element) {
-               return element.getAttribute("textContent");
-       }
-    
-    public static WebElement getElementInsideElementByDataTestsId(WebElement element, String dataTestId) {
-       try{
-               return element.findElement(By.xpath("//*[@data-tests-id='" + dataTestId + "']"));
-       }
-       catch(Exception e){
-               return null;
-       }
-       }
-    
+        return element.getAttribute("textContent");
+    }
+
     public static void clickOnElementByCSS(String cssString) throws Exception {
-               WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
-               wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(cssString))).click();
-               ultimateWait();
-       }
-       public static String getRandomComponentName(String prefix) {
-               return prefix + GeneralUIUtils.randomNumber();
-       }
-       public static int randomNumber() {
-               Random r = new Random();
-               return r.nextInt(10000);
-       }
-       
-       public static void waitForUINotification() {
-               List<WebElement> notificationElements = getDriver().findElements(By.className("ui-notification"));
-               if (!notificationElements.isEmpty()){
-                       notificationElements.forEach(WebElement::click);
-               }
-       }
-       
-       public static boolean checkForDisabledAttribute(String  dataTestId){
-               Object elementAttributes = getAllElementAttributes(waitForElementVisibilityByTestId(dataTestId));
-               return elementAttributes.toString().contains("disabled");
-       }
-       
-       public static void dragAndDropElementByY(WebElement area, int yOffset) {
-               Actions actions = new Actions(getDriver());
-               actions.dragAndDropBy(area, 10, yOffset).perform();
-               ultimateWait();
-       }
-       
-       public static void waitForBackLoader() {
-               waitForBackLoader(timeOut);
-       }
-       
-       public static void waitForBackLoader(int timeOut) {
-               sleep(100);
-               waitForElementInVisibilityBy(By.className("tlv-loader-back"), timeOut);
-       }
-       
-       public static void addStringtoClipboard(String text){
-               StringSelection selection = new StringSelection(text);
-           Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
-           clipboard.setContents(selection, selection);
-       }
-       
-       public static boolean checkForDisabledAttributeInHiddenElement(String  cssString){
-               Object elementAttributes = getAllElementAttributes(getDriver().findElement(By.cssSelector(cssString)));
-               return elementAttributes.toString().contains("disabled");
-       }
+        WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
+        wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(cssString))).click();
+        ultimateWait();
+    }
 
-       public static void setTextInElementByDataTestID(String dataTestsID, String text)
-       {
-               WebElement webElement = GeneralUIUtils.getWebElementByTestID(dataTestsID);
-               webElement.clear();
-               webElement.sendKeys(text);
-               ultimateWait();
-       }
+    public static boolean checkForDisabledAttribute(String dataTestId) {
+        Object elementAttributes = getAllElementAttributes(waitForElementVisibilityByTestId(dataTestId));
+        return elementAttributes.toString().contains("disabled");
+    }
 
-       public static void selectByValueTextContained(String dataTestsId, String value) {
+    public static void dragAndDropElementByY(WebElement area, int yOffset) {
+        Actions actions = new Actions(getDriver());
+        actions.dragAndDropBy(area, 10, yOffset).perform();
+        ultimateWait();
+    }
 
-               List<WebElement> options = GeneralUIUtils.getWebElementsListBy(By.xpath(String.format("//select[@data-tests-id='%s']//option[contains(@value,'%s')]",dataTestsId,value)));
+    public static void waitForBackLoader() {
+        waitForBackLoader(timeOut);
+    }
 
-               boolean matched = false;
-               for (WebElement option : options) {
-                       option.click();
-                       matched = true;
-               }
+    public static void waitForBackLoader(int timeOut) {
+        sleep(100);
+        waitForElementInVisibilityBy(By.className("tlv-loader-back"), timeOut);
+    }
 
-               if (!matched) {
-                       throw new NoSuchElementException("Cannot locate option with value: " + value);
-               }
+    public static void addStringtoClipboard(String text) {
+        StringSelection selection = new StringSelection(text);
+        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
+        clipboard.setContents(selection, selection);
+    }
 
-               ultimateWait();
-       }
+    public static boolean checkForDisabledAttributeInHiddenElement(String cssString) {
+        boolean isDisabled = false;
+        for (int i = 0; i < 3; i++) {
+            Object elementAttributes = getAllElementAttributes(getWebElementByPresence(By.cssSelector(cssString), timeOut));
+            isDisabled = elementAttributes.toString().contains("disabled");
+            if (isDisabled)
+                break;
+            ultimateWait();
+        }
+        return isDisabled;
+    }
 
-       public static void setTextInElementByXpath(String xPath, String text)
-       {
-               WebElement webElement = GeneralUIUtils.getWebElementBy(By.xpath(xPath));
-               webElement.clear();
-               webElement.click();
-               webElement.sendKeys(text);
-               ultimateWait();
-       }
+    public static void selectByValueTextContained(String dataTestsId, String value) {
 
-       public static String getTextValueFromInput(WebElement webElement)
-       {
-               return webElement.getAttribute("value");
-       }
+        List<WebElement> options = GeneralUIUtils.getWebElementsListBy(By.xpath(String.format("//select[@data-tests-id='%s']//option[contains(@value,'%s')]", dataTestsId, value)));
 
-       public static String getTextValueFromWebElementByXpath(String Xpath)
-       {
-               WebElement webElement = getWebElementBy(By.xpath(Xpath));
-               return webElement.getAttribute("value");
-       }
-       
-       public static void refreshPage(){
-               Actions actions = new Actions(getDriver());
-               actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();
-       }
+        boolean matched = false;
+        for (WebElement option : options) {
+            option.click();
+            matched = true;
+        }
+
+        if (!matched) {
+            throw new NoSuchElementException("Cannot locate option with value: " + value);
+        }
+
+        ultimateWait();
+    }
+
+    public static void setTextInElementByXpath(String xPath, String text) {
+        WebElement webElement = GeneralUIUtils.getWebElementBy(By.xpath(xPath));
+        webElement.clear();
+        webElement.click();
+        webElement.sendKeys(text);
+        ultimateWait();
+    }
 
 
+    public static void clickOnElementByXpath(String xPath) {
+        WebElement webElement = GeneralUIUtils.getWebElementBy(By.xpath(xPath));
+        webElement.click();
+        ultimateWait();
+    }
+
+    public static String getTextValueFromWebElementByXpath(String Xpath) {
+        WebElement webElement = getWebElementBy(By.xpath(Xpath));
+        return webElement.getAttribute("value");
+    }
+
+    public static List<WebElement> findElementsByXpath(String xPath) {
+        return getDriver().findElements(By.xpath(xPath));
+    }
 
+    public static void clickOnBrowserBackButton() throws Exception {
+        SetupCDTest.getExtendTest().log(Status.INFO, "Going to press on back browser button.");
+        getDriver().navigate().back();
+        ultimateWait();
+    }
+
+    public static String copyCurrentURL() throws Exception {
+        SetupCDTest.getExtendTest().log(Status.INFO, "Copying current URL");
+        return getDriver().getCurrentUrl();
+    }
+
+    public static void navigateToURL(String url) throws Exception {
+        SetupCDTest.getExtendTest().log(Status.INFO, "Navigating to URL " + url);
+        getDriver().navigate().to(url);
+    }
 
-    
+    public static Object getElementPositionOnCanvas(String elementName) {
+        String scriptJS = "var cy = window.jQuery('.sdc-composition-graph-wrapper').cytoscape('get');\n" +
+                "var n = cy.nodes('[name=\"" + elementName + "\"]');\n" +
+                "var nPos = n.renderedPosition();\n" +
+                "return JSON.stringify({\n" +
+                "\tx: nPos.x,\n" +
+                "\ty: nPos.y\n" +
+                "})";
+        return ((JavascriptExecutor) getDriver()).executeScript(scriptJS);
+    }
+
+    public static Object getElementGreenDotPositionOnCanvas(String elementName) {
+        String scriptJS = "var cy = window.jQuery('.sdc-composition-graph-wrapper').cytoscape('get');\n" +
+                "var cyZoom = cy.zoom();\n" +
+                "var n = cy.nodes('[name=\"" + elementName + "\"]');\n" +
+                "var nPos = n.renderedPosition();\n" +
+                "var nData = n.data();\n" +
+                "var nImgSize = nData.imgWidth;\n" +
+                "var shiftSize = (nImgSize-18)*cyZoom/2;\n" +
+                "return JSON.stringify({\n" +
+                "\tx: nPos.x + shiftSize,\n" +
+                "\ty: nPos.y - shiftSize\n" +
+                "});";
+        return ((JavascriptExecutor) getDriver()).executeScript(scriptJS);
+       }
+
+       public static Long getAndValidateActionDuration (Runnable action, int regularTestRunTime){
+               Long actualTestRunTime = null;
+               try {
+                       actualTestRunTime = Utils.getActionDuration(() -> {
+                               try {
+                                       action.run();
+                               } catch (Throwable throwable) {
+                                       throwable.printStackTrace();
+                               }
+                       });
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+               double factor = 1.5;
+
+               assertTrue("Expected test run time should be less than " + regularTestRunTime*factor + ", " +
+                               "actual time is " + actualTestRunTime , regularTestRunTime*factor>actualTestRunTime);
+//             SetupCDTest.getExtendTest().log(Status.INFO, "Actual catalog loading time is  " + actualTestRunTime + " seconds");
+               return actualTestRunTime;
+    }
 }