aboutsummaryrefslogtreecommitdiffstats
path: root/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities
diff options
context:
space:
mode:
Diffstat (limited to 'vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities')
-rw-r--r--vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/AdditionalConditions.java133
-rw-r--r--vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/CanvasElement.java54
-rw-r--r--vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/CanvasManager.java179
-rw-r--r--vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/Constants.java128
-rw-r--r--vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/Decoder.java62
-rw-r--r--vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/EcompPortalUtilities.java17
-rw-r--r--vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/FileHandling.java489
-rw-r--r--vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/FindUtils.java52
-rw-r--r--vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/GeneralUIUtils.java803
-rw-r--r--vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/GeneralUtility.java155
-rw-r--r--vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/LoginUtils.java42
11 files changed, 2114 insertions, 0 deletions
diff --git a/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/AdditionalConditions.java b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/AdditionalConditions.java
new file mode 100644
index 000000000..9a070e2b0
--- /dev/null
+++ b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/AdditionalConditions.java
@@ -0,0 +1,133 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdc.ci.tests.utilities;
+
+import com.paulhammant.ngwebdriver.NgWebDriver;
+import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedCondition;
+
+import java.util.List;
+
+public class AdditionalConditions {
+
+ public static ExpectedCondition<WebElement> searchForOneElement(List<By> ByList){
+ return new ExpectedCondition<WebElement>() {
+ @Override
+ public WebElement apply(WebDriver driver) {
+ for (By by : ByList){
+ WebElement findElement = driver.findElement(by);
+ if (findElement != null){
+ return findElement;
+ }
+ }
+ return null;
+ }
+ };
+ }
+
+ public static ExpectedCondition<Boolean> jQueryAJAXCallsHaveCompleted() {
+ return new ExpectedCondition<Boolean>() {
+ @Override
+ public Boolean apply(WebDriver driver) {
+ return (Boolean) ((JavascriptExecutor)driver).
+ executeScript("return (window.jQuery!= null) && (jQuery.active === 0);");
+ }
+ };
+ }
+
+ public static ExpectedCondition <Boolean> angularHasFinishedProcessing() {
+ return new ExpectedCondition<Boolean>() {
+ @Override
+ public Boolean apply(WebDriver driver) {
+// String scriptJS = "return (window.angular !==undefined) &&"
+// + " (angular.element(document).injector() !==undefined) &&"
+// + " (angular.element(document).injector().get('$http').pendingRequests.length === 0)";
+// return Boolean.valueOf(( (JavascriptExecutor) driver).executeScript(scriptJS).toString());
+ new NgWebDriver((JavascriptExecutor) driver).waitForAngularRequestsToFinish();
+ return true;
+ }
+ };
+ }
+
+ public static ExpectedCondition <Boolean> angular2HasFinishedProcessing() {
+ return driver -> {
+ new NgWebDriver((JavascriptExecutor) driver).waitForAngular2RequestsToFinish();
+ return true;
+ };
+ }
+
+ public static ExpectedCondition <Boolean> pageLoadWait() {
+ return new ExpectedCondition<Boolean>() {
+ @Override
+ public Boolean apply(WebDriver driver) {
+ String scriptJS =
+ "try {\r\n" +
+ " if (document.readyState !== 'complete') {\r\n" +
+ " return false; // Page not loaded yet\r\n" +
+ " }\r\n" +
+ " if (window.jQuery) {\r\n" +
+ " if (window.jQuery.active) {\r\n" +
+ " return false;\r\n" +
+ " } else if (window.jQuery.ajax && window.jQuery.ajax.active) {\r\n" +
+ " return false;\r\n" +
+ " }\r\n" +
+ " }\r\n" +
+ " if (window.angular) {\r\n" +
+ " if (!window.qa) {\r\n" +
+ " // Used to track the render cycle finish after loading is complete\r\n" +
+ " window.qa = {\r\n" +
+ " doneRendering: false\r\n" +
+ " };\r\n" +
+ " }\r\n" +
+ " // Get the angular injector for this app (change element if necessary)\r\n" +
+ " var injector = window.angular.element(document).find('body').injector();\r\n" +
+ " // Store providers to use for these checks\r\n" +
+ " var $rootScope = injector.get('$rootScope');\r\n" +
+ " var $http = injector.get('$http');\r\n" +
+ " var $timeout = injector.get('$timeout');\r\n" +
+ " // Check if digest\r\n" +
+ " if ($rootScope.$$phase === '$apply' || $rootScope.$$phase === '$digest' || $http.pendingRequests.length !== 0) {\r\n" +
+ " window.qa.doneRendering = false;\r\n" +
+ " return false; // Angular digesting or loading data\r\n" +
+ " }\r\n" +
+ " if (!window.qa.doneRendering) {\r\n" +
+ " // Set timeout to mark angular rendering as finished\r\n" +
+ " $timeout(function() {\r\n" +
+ " window.qa.doneRendering = true;\r\n" +
+ " }, 0);\r\n" +
+ " return false;\r\n" +
+ " }\r\n" +
+ " }\r\n" +
+ " return true;\r\n" +
+ "} catch (ex) {\r\n" +
+ " return false;\r\n" +
+ "}";
+ return Boolean.valueOf(( (JavascriptExecutor) driver).executeScript(scriptJS).toString());
+ }
+ };
+ }
+
+
+
+}
diff --git a/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/CanvasElement.java b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/CanvasElement.java
new file mode 100644
index 000000000..eb93a619e
--- /dev/null
+++ b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/CanvasElement.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdc.ci.tests.utilities;
+
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.onap.sdc.ci.tests.datatypes.DataTestIdEnum.LeftPanelCanvasItems;
+import org.openqa.selenium.WebElement;
+
+public final class CanvasElement {
+ private final String uniqueId;
+ private ImmutablePair<Integer, Integer> location;
+ private WebElement elementType;
+
+ CanvasElement(String name, ImmutablePair<Integer, Integer> location, WebElement canvasItem) {
+ super();
+ this.uniqueId = name;
+ this.location = location;
+ elementType = canvasItem;
+ }
+
+ public String getUniqueId() {
+ return uniqueId;
+ }
+
+ public ImmutablePair<Integer, Integer> getLocation() {
+ return location;
+ }
+
+ public void setLocation(ImmutablePair<Integer, Integer> location) {
+ this.location = location;
+ }
+
+ public WebElement getElementType() {
+ return elementType;
+ }
+}
diff --git a/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/CanvasManager.java b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/CanvasManager.java
new file mode 100644
index 000000000..91011f333
--- /dev/null
+++ b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/CanvasManager.java
@@ -0,0 +1,179 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdc.ci.tests.utilities;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.onap.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+
+public final class CanvasManager {
+ private Map<String, CanvasElement> canvasElements;
+ private Actions actions;
+ private WebElement canvas;
+ private int reduceCanvasWidthFactor;
+ // Offsets Are used to find upper right corner of canvas element in order to
+ // connect links
+ private static final int CANVAS_ELEMENT_Y_OFFSET = 40;
+ private static final int CANVAS_ELEMENT_X_OFFSET = 21; // 14 - 27
+
+ private CanvasManager() {
+ canvasElements = new HashMap<>();
+ actions = new Actions(GeneralUIUtils.getDriver());
+ canvas = GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.GeneralCanvasItems.CANVAS.getValue());
+ try {
+ WebElement webElement = GeneralUIUtils
+ .getWebElementByTestID(DataTestIdEnum.GeneralCanvasItems.CANVAS_RIGHT_PANEL.getValue());
+ reduceCanvasWidthFactor = webElement.getSize().width;
+ } catch (Exception e) {
+ reduceCanvasWidthFactor = 0;
+ }
+ }
+
+ public static CanvasManager getCanvasManager() {
+ return new CanvasManager();
+ }
+
+ public List<CanvasElement> getCanvasElements() {
+ return canvasElements.values().stream().collect(Collectors.toList());
+ }
+
+ private void addCanvasElement(CanvasElement element) {
+ canvasElements.put(element.getUniqueId(), element);
+ }
+
+ private void moveElementOnCanvas(CanvasElement canvasElement, ImmutablePair<Integer, Integer> newLocation)
+ throws Exception {
+ GeneralUIUtils.waitForLoader();
+ Thread.sleep(500);
+ actions.moveToElement(canvas, canvasElement.getLocation().left, canvasElement.getLocation().right);
+ actions.clickAndHold();
+ actions.moveToElement(canvas, newLocation.left, newLocation.right);
+ actions.release();
+ actions.perform();
+ canvasElement.setLocation(newLocation);
+ GeneralUIUtils.waitForLoader();
+
+ }
+
+ public void moveElementOnCanvas(CanvasElement canvasElement) throws Exception {
+ moveElementOnCanvas(canvasElement, getFreePosition());
+ }
+
+ public void deleteElementFromCanvas(CanvasElement canvasElement) throws Exception {
+ GeneralUIUtils.waitForLoader();
+ actions.moveToElement(canvas, canvasElement.getLocation().left, canvasElement.getLocation().right);
+ actions.click();
+ actions.perform();
+ GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.GeneralCanvasItems.DELETE_INSTANCE_BUTTON.getValue())
+ .click();
+ GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.ModalItems.OK.getValue()).click();
+ canvasElements.remove(canvasElement.getUniqueId());
+ GeneralUIUtils.waitForLoader();
+ }
+
+ private String getItemName(WebElement canvasItem) {
+ String canvasItemName = canvasItem.getAttribute("data-tests-id");
+
+ return canvasItemName.substring(canvasItemName.lastIndexOf("-"));
+ }
+
+ public CanvasElement createElementOnCanvas(WebElement canvasItem) throws Exception {
+ GeneralUIUtils.waitForLoader();
+ ImmutablePair<Integer, Integer> freePosition = getFreePosition();
+ actions.moveToElement(canvasItem, 0, 0);
+ actions.clickAndHold();
+ actions.moveToElement(canvas, freePosition.left, freePosition.right);
+ actions.release();
+ actions.perform();
+
+ String uniqueId = getItemName(canvasItem) + "_" + UUID.randomUUID().toString();
+ CanvasElement canvasElement = new CanvasElement(uniqueId, freePosition, canvasItem);
+ addCanvasElement(canvasElement);
+ GeneralUIUtils.waitForLoader();
+ return canvasElement;
+ }
+
+ private ImmutablePair<Integer, Integer> getFreePosition() {
+ // TODO mshitrit use better method
+ ImmutablePair<Integer, Integer> randomPosition = null;
+ boolean freePosition = false;
+ int minSpace = 150;
+ while (!freePosition) {
+ ImmutablePair<Integer, Integer> tempRandomPosition = getRandomPosition();
+ freePosition = !canvasElements.values().stream().map(e -> e.getLocation())
+ .filter(e -> Math.abs(e.left - tempRandomPosition.left) < minSpace
+ && Math.abs(e.right - tempRandomPosition.right) < minSpace)
+ .findAny().isPresent();
+ randomPosition = tempRandomPosition;
+ }
+ return randomPosition;
+ }
+
+ private ImmutablePair<Integer, Integer> getRandomPosition() {
+ int edgeBuffer = 50;
+ Random random = new Random();
+ int xElement = random.nextInt(canvas.getSize().width - 2 * edgeBuffer - reduceCanvasWidthFactor) + edgeBuffer;
+ int yElement = random.nextInt(canvas.getSize().height - 2 * edgeBuffer) + edgeBuffer;
+ return new ImmutablePair<Integer, Integer>(xElement, yElement);
+ }
+
+ public void linkElements(CanvasElement firstElement, CanvasElement secondElement) throws Exception {
+ GeneralUIUtils.waitForLoader();
+ drawSimpleLink(firstElement, secondElement);
+
+ selectReqAndCapAndConnect();
+
+ GeneralUIUtils.waitForLoader();
+
+ }
+
+ private void selectReqAndCapAndConnect() {
+ // Select First Cap
+ GeneralUIUtils.getWebElementsListByTestID(DataTestIdEnum.LinkMenuItems.LINK_ITEM_CAP.getValue()).get(0).click();
+ // Select First Req
+ GeneralUIUtils.getWebElementsListByTestID(DataTestIdEnum.LinkMenuItems.LINK_ITEM_REQ.getValue()).get(0).click();
+ // Connect
+ GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.LinkMenuItems.CONNECT_BUTTON.getValue()).click();
+ }
+
+ private void drawSimpleLink(CanvasElement firstElement, CanvasElement secondElement) {
+
+ int yOffset = CANVAS_ELEMENT_Y_OFFSET;
+ int xOffset = CANVAS_ELEMENT_X_OFFSET;
+
+ actions.moveToElement(canvas, firstElement.getLocation().left + xOffset,
+ firstElement.getLocation().right - yOffset);
+
+ actions.clickAndHold();
+ actions.moveToElement(canvas, secondElement.getLocation().left + xOffset,
+ secondElement.getLocation().right - yOffset);
+ actions.release();
+ actions.perform();
+ }
+}
diff --git a/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/Constants.java b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/Constants.java
new file mode 100644
index 000000000..4be51fbfd
--- /dev/null
+++ b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/Constants.java
@@ -0,0 +1,128 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdc.ci.tests.utilities;
+
+public interface Constants {
+
+ public static final String APPLICATION_NAME = "application-name";
+ public static final String APPLICATION_VERSION = "application-version";
+ public static final String CONFIG_HOME = "config.home";
+ public static final String LOG_HOME = "log.home";
+ public static final String YAML_SUFFIX = ".yaml";
+ public static final String CONFIGURATION_SOURCE_ATTR = "configuration-source";
+ public static final String MDC_APP_NAME = "APP_NAME";
+ public static final String CONFIGURATION_MANAGER_ATTR = "configuration-manager";
+ public static final String HEALTH_CHECK_SERVICE_ATTR = "healthCheckService";
+ public static final String REST_CLIENT_ATTR = "rest-client";
+ public static final String ARTIFACT_DAO_ATTR = "artifact-dao";
+ public static final String UPLOAD_VALIDATORR_ATTR = "upload-validator";
+ public static final String THREAD_EXECUTOR_ATTR = "thread-executor";
+ public static final String ERROR_LOG_FORMAT = "EVENT = ARTIFACT_UPLOAD USER_ID=%s USER_NAME=%s ACCESS_IP=%s ACCESS_TYPE=%s RURL=%s SC=%d";
+ public static final String FIRST_NAME_HEADER = "HTTP_CSP_FIRSTNAME";
+ public static final String LAST_NAME_HEADER = "HTTP_CSP_LASTNAME";
+ public static final String USER_ID_HEADER = "USER_ID";
+ public static final String MD5_HEADER = "Content-MD5";
+ public static final String CONTENT_DISPOSITION_HEADER = "Content-Disposition";
+ public static final String CONTENT_TYPE_HEADER = "Content-Type";
+ public static final String ORIGIN_HEADER = "HTTP_IV_REMOTE_ADDRESS";
+ public static final String ACCESS_HEADER = "HTTP_CSP_WSTYPE";
+ public static final String X_ECOMP_REQUEST_ID_HEADER = "X-ECOMP-RequestID";
+ public static final String X_ECOMP_INSTANCE_ID_HEADER = "X-ECOMP-InstanceID";
+ public static final String X_ECOMP_SERVICE_ID_HEADER = "X-ECOMP-ServiceID";
+ public static final String HTTP = "http";
+ public static final String HTTPS = "https";
+ public static final String HTTP_IV_USER = "HTTP_IV_USER";
+ public static final String A4C_CSAR_CONTEXT = "/rest/csars/";
+ public static final String WEB_APPLICATION_CONTEXT_WRAPPER_ATTR = "web-application-context-wrapper";
+ public static final String CATALOG_BE = "catalog-be";
+ public static final String HTTP_CSP_FIRSTNAME = "HTTP_CSP_FIRSTNAME";
+ public static final String HTTP_CSP_LASTNAME = "HTTP_CSP_LASTNAME";
+ public static final String HTTP_IV_REMOTE_ADDRESS = "HTTP_IV_REMOTE_ADDRESS";
+ public static final String HTTP_CSP_TYPE = "HTTP_CSP_WSTYPE";
+ public static final String RESOURCE_SUPPORTED_VERSION = "0.0.1";
+ public static final String ARTIFACT_ID_FORMAT = "%s:%s:%s"; // resourceName:resourceVersion:artifactName
+ public static final String SERVICE_ARTIFACT_ID_FORMAT = "%s:%s:%s:%s"; // serviceName:serviceVersion:nodeTemplateName:artifactName
+ public static final String CONTENT_DISPOSITION = "content-disposition";
+ public static final String DOWNLOAD_ARTIFACT_LOGIC_ATTR = "downloadArtifactLogic";
+ public static final String ASDC_RELEASE_VERSION_ATTR = "ASDC-Version";
+ // public static final String AUDITING_MANAGER = "auditingManager";
+ // public static final String USER_ADMIN_MANAGER = "userAdminManager";
+ public static final String YEAR = "year";
+ public static final String MONTH = "month";
+ public static final String DAY = "day";
+ public static final String HOUR = "hour";
+ public static final String MINUTE = "minute";
+ public static final String NONE = "none";
+ public static final String RESOURCE_OPERATION_MANAGER = "resourceOperationManager";
+ public static final String PROPERTY_OPERATION_MANAGER = "propertyOperationManager";
+ public static final String SERVICE_OPERATION_MANAGER = "serviceOperationManager";
+ public static final String EMPTY_STRING = "";
+ public static final String NULL_STRING = "null";
+ public static final String DOUBLE_NULL_STRING = "null null";
+ public static final String ECOMP_ERROR_MNGR_ATTR = "ecompErrorMngrAttr";
+ public static final String AUTHORIZATION_HEADER = "Authorization";
+ public static final String ACCEPT_HEADER = "Accept";
+ public static final String STANDARD_INTERFACE_TYPE = "standard";
+ public static final String MURANO_PKG_ARTIFACT_TYPE = "MURANO-PKG";
+ public static final String ARTIFACT_GROUP_TYPE_FIELD = "artifactGroupType";
+
+ // TOSCA
+ public static final String TOSCA_META_PATH = "TOSCA-Metadata/TOSCA.meta";
+ public static final String TOSCA_META_ENTRY_DEFINITIONS = "Entry-Definitions";
+ public static final String USER_DEFINED_RESOURCE_NAMESPACE_PREFIX = "org.openecomp.resource.";
+
+ public static final String IS_BASE = "isBase";
+ public static final String HEAT_FILE_PROPS = "heat_file";
+ public static final String MODULE_NAME_FORMAT = "%s..%s..module-%s";
+ public static final String MODULE_DESC_PATTERN = "[\\_\\-\\.a-zA-Z0-9]+";
+ public static final String MODULE_OLD_NAME_PATTERN = "([\\w\\_\\-\\.\\s]+)(::module-)(\\d+)";
+ public static final String MODULE_NEW_NAME_PATTERN = "([\\w\\_\\-\\.\\s]+\\.\\.)([\\_\\-\\.a-zA-Z0-9]+)(..module-)(\\d+)";
+ public static final String MODULE_NAME_DELIMITER = "module-";
+ public static final String IMPORT_STRUCTURE = "importStructure";
+ public static final String DEFAULT_GROUP_VF_MODULE = "org.openecomp.groups.VfModule";
+
+ public static final String ARTIFACT_GROUP_TYPE = "artifactGroupType";
+ public static final String ARTIFACT_LABEL = "artifactLabel";
+ public static final String ARTIFACT_PAYLOAD_DATA = "payloadData";
+ public static final String ARTIFACT_DISPLAY_NAME = "artifactDisplayName";
+ public static final String ARTIFACT_DESCRIPTION = "description";
+ public static final String ARTIFACT_TYPE = "artifactType";
+ public static final String ARTIFACT_NAME = "artifactName";
+ public static final String ARTIFACT_ID = "uniqueId";
+ public static final String REQUIRED_ARTIFACTS = "requiredArtifacts";
+
+ public static final String ABSTRACT = "abstract";
+ public static final String GLOBAL_SUBSTITUTION_TYPES_SERVICE_TEMPLATE = "Definitions/GlobalSubstitutionTypesServiceTemplate.yaml";
+ public static final String ABSTRACT_SUBSTITUTE_GLOBAL_TYPES_SERVICE_TEMPLATE = "Definitions/AbstractSubstituteGlobalTypesServiceTemplate.yaml";
+
+ public static final String VENDOR_LICENSE_MODEL = "vendor-license-model.xml";
+ public static final String VENDOR_LICENSE_LABEL = "vendorlicense";
+ public static final String VENDOR_LICENSE_DISPLAY_NAME = "Vendor License";
+ public static final String VENDOR_LICENSE_DESCRIPTION = " Vendor license file";
+
+ public static final String VF_LICENSE_MODEL = "vf-license-model.xml";
+ public static final String VF_LICENSE_LABEL = "vflicense";
+ public static final String VF_LICENSE_DISPLAY_NAME = "VF License";
+ public static final String VF_LICENSE_DESCRIPTION = "VF license file";
+ public static final String GET_INPUT = "get_input";
+ public static final String SERVICE_TEMPLATE_FILE_POSTFIX = "ServiceTemplate.yaml";
+ public static final String UNBOUNDED = "unbounded";
+}
diff --git a/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/Decoder.java b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/Decoder.java
new file mode 100644
index 000000000..049302e54
--- /dev/null
+++ b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/Decoder.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdc.ci.tests.utilities;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+
+import org.apache.commons.codec.binary.Base64;
+
+public class Decoder {
+
+ public static String encode(byte[] byteArrayToEncode) {
+
+ byte[] bytesEncoded = Base64.encodeBase64(byteArrayToEncode);
+ String strEncoded = new String(bytesEncoded);
+ return strEncoded;
+ }
+
+ public static String decode(String strEncoded) throws IOException {
+
+ byte[] byteDecoded = Base64.decodeBase64(strEncoded);
+ String decoded = new String(byteDecoded);
+
+ return decoded;
+
+ }
+
+ public static String readFileToString(String file) throws IOException {
+
+ BufferedReader reader = new BufferedReader(new FileReader(file));
+ String line = null;
+ StringBuilder stringBuilder = new StringBuilder();
+ String ls = System.getProperty("line.separator");
+
+ while ((line = reader.readLine()) != null) {
+ stringBuilder.append(line);
+ stringBuilder.append(ls);
+ }
+ reader.close();
+ return stringBuilder.toString();
+ }
+
+}
diff --git a/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/EcompPortalUtilities.java b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/EcompPortalUtilities.java
new file mode 100644
index 000000000..bded65be8
--- /dev/null
+++ b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/EcompPortalUtilities.java
@@ -0,0 +1,17 @@
+package org.onap.sdc.ci.tests.utilities;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+public class EcompPortalUtilities {
+
+ public static void swichFrames(By by){
+ WebElement appImage = GeneralUIUtils.getClickableButtonBy(by, 3 * 60);
+ appImage.click();
+ GeneralUIUtils.getDriver().switchTo().frame(1);
+ GeneralUIUtils.waitForBackLoader();
+ GeneralUIUtils.waitForAngular();
+ GeneralUIUtils.getWebElementByClassName("applicationWindow");
+ }
+
+}
diff --git a/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/FileHandling.java b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/FileHandling.java
new file mode 100644
index 000000000..d5d5540a9
--- /dev/null
+++ b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/FileHandling.java
@@ -0,0 +1,489 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdc.ci.tests.utilities;
+
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.io.BufferedOutputStream;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
+
+import org.apache.commons.io.FileUtils;
+import org.onap.sdc.ci.tests.datatypes.UserCredentials;
+import org.onap.sdc.ci.tests.execute.setup.ExtentTestActions;
+import org.onap.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.yaml.snakeyaml.Yaml;
+
+import com.aventstack.extentreports.Status;
+
+public class FileHandling {
+
+// ------------------yaml parser methods----------------------------
+ public static Map<?, ?> parseYamlFile(String filePath) throws Exception {
+ Yaml yaml = new Yaml();
+ File file = new File(filePath);
+ InputStream inputStream = new FileInputStream(file);
+ Map<?, ?> map = (Map<?, ?>) yaml.load(inputStream);
+ return map;
+ }
+
+ /**
+ * The method return map fetched objects by pattern from yaml file
+ * @param yamlFile
+ * @param pattern
+ * @return
+ * @throws Exception
+ */
+ public static Map<String, Object> parseYamlFileToMapByPattern(File yamlFile, String pattern) throws Exception {
+ Map<?, ?> yamlFileToMap = FileHandling.parseYamlFile(yamlFile.toString());
+ Map<String, Object> objectMap = getObjectMapByPattern(yamlFileToMap, pattern);
+ return objectMap;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static Map<String, Object> getObjectMapByPattern(Map<?, ?> parseUpdetedEnvFile, String pattern) {
+ Map<String, Object> objectMap = null;
+
+ Object objectUpdetedEnvFile = parseUpdetedEnvFile.get(pattern);
+ if(objectUpdetedEnvFile instanceof HashMap){
+ objectMap = (Map<String, Object>) objectUpdetedEnvFile;
+ }
+ return objectMap;
+ }
+
+// -------------------------------------------------------------------------------------------------
+
+ public static String getFilePath(String folder) {
+ String filepath = System.getProperty("filepath");
+ if (filepath == null && System.getProperty("os.name").contains("Windows")) {
+ filepath = FileHandling.getResourcesFilesPath() + folder + File.separator;
+ }
+
+ else if(filepath.isEmpty() && !System.getProperty("os.name").contains("Windows")){
+ filepath = FileHandling.getBasePath() + "Files" + File.separator + folder + File.separator;
+ }
+
+ System.out.println(filepath);
+
+ return filepath;
+ }
+
+ public static String getBasePath() {
+ return System.getProperty("user.dir") + File.separator;
+ }
+
+ public static String getDriversPath() {
+ return getBasePath() + "src" + File.separator + "main" + File.separator + "resources"
+ + File.separator + "ci" + File.separator + "drivers" + File.separator;
+ }
+
+ public static String getResourcesFilesPath() {
+ return getBasePath() + "src" + File.separator + "main" + File.separator + "resources"
+ + File.separator + "Files" + File.separator;
+ }
+
+ public static String getResourcesEnvFilesPath() {
+ return getBasePath() + File.separator + "src" + File.separator + "main" + File.separator + "resources"
+ + File.separator + "Files" + File.separator + "ResourcesEnvFiles" +File.separator;
+ }
+
+ public static String getCiFilesPath() {
+ return getBasePath() + "src" + File.separator + "main" + File.separator + "resources"
+ + File.separator + "ci";
+ }
+
+ public static String getConfFilesPath() {
+ return getCiFilesPath() + File.separator + "conf" + File.separator;
+ }
+
+ public static String getTestSuitesFilesPath() {
+ return getCiFilesPath() + File.separator + "testSuites" + File.separator;
+ }
+
+ public static File getConfigFile(String configFileName) throws Exception {
+ File configFile = new File(FileHandling.getBasePath() + File.separator + "conf" + File.separator + configFileName);
+ if (!configFile.exists()) {
+ configFile = new File(FileHandling.getConfFilesPath() + configFileName);
+ }
+ return configFile;
+ }
+
+ public static Object[] filterFileNamesFromFolder(String filepath, String extension) {
+ try {
+ File dir = new File(filepath);
+ List<String> filenames = new ArrayList<String>();
+
+ FilenameFilter extensionFilter = new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return name.endsWith(extension);
+ }
+ };
+
+ if (dir.isDirectory()) {
+ for (File file : dir.listFiles(extensionFilter)) {
+ filenames.add(file.getName());
+ }
+ return filenames.toArray();
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static String[] getArtifactsFromZip(String filepath, String zipFilename){
+ try{
+ ZipFile zipFile = new ZipFile(filepath + File.separator + zipFilename);
+ Enumeration<? extends ZipEntry> entries = zipFile.entries();
+
+ String[] artifactNames = new String[zipFile.size() - 1];
+
+ int i = 0;
+ while(entries.hasMoreElements()){
+ ZipEntry nextElement = entries.nextElement();
+ if (!nextElement.isDirectory()){
+ if (!nextElement.getName().equals("MANIFEST.json")){
+ String name = nextElement.getName();
+ artifactNames[i++] = name;
+ }
+ }
+ }
+ zipFile.close();
+ return artifactNames;
+ }
+ catch(ZipException zipEx){
+ System.err.println("Error in zip file named : " + zipFilename);
+ zipEx.printStackTrace();
+ } catch (IOException e) {
+ System.err.println("Unhandled exception : ");
+ e.printStackTrace();
+ }
+
+ return null;
+
+ }
+
+ public static Object[] getZipFileNamesFromFolder(String filepath) {
+ return filterFileNamesFromFolder(filepath, ".zip");
+ }
+
+ public static int countFilesInZipFile(String[] artifactsArr, String reqExtension){
+ int fileCounter = 0;
+ for (String artifact : artifactsArr){
+ String extensionFile = artifact.substring(artifact.lastIndexOf(".") + 1 , artifact.length());
+ if (extensionFile.equals(reqExtension)){
+ fileCounter++;
+ }
+ }
+ return fileCounter;
+ }
+
+
+ public static synchronized File getLastModifiedFileFromDir() throws Exception{
+ return getLastModifiedFileFromDir(SetupCDTest.getWindowTest().getDownloadDirectory());
+ }
+
+ public static synchronized File getLastModifiedFileFromDir(String dirPath){
+ File dir = new File(dirPath);
+ File[] files = dir.listFiles();
+ if (files == null) {
+ assertTrue("File not found under directory " + dirPath, false);
+ return null;
+ }
+
+ File lastModifiedFile = files[0];
+ for (int i = 1; i < files.length; i++) {
+ if(files[i].isDirectory()) {
+ continue;
+ }
+ if (lastModifiedFile.lastModified() < files[i].lastModified()) {
+ lastModifiedFile = files[i];
+ }
+ }
+ return lastModifiedFile;
+ }
+
+ public static void deleteDirectory(String directoryPath) {
+ File dir = new File(directoryPath);
+ try {
+ FileUtils.deleteDirectory(dir);
+ } catch (IOException e) {
+ System.out.println("Failed to delete " + dir);
+ SetupCDTest.getExtendTest().log(Status.INFO, "Failed to delete " + dir);
+ }
+ }
+
+ public static void createDirectory(String directoryPath) {
+ File directory = new File(String.valueOf(directoryPath));
+ if (! directory.exists()){
+ directory.mkdir();
+ }
+ }
+
+
+ /**
+ * The method append data to existing file, if file not exists - create it
+ * @param pathToFile
+ * @param text
+ * @param leftSpaceCount
+ * @throws IOException
+ */
+ public static synchronized void writeToFile(File pathToFile, Object text, Integer leftSpaceCount) throws IOException{
+
+ BufferedWriter bw = null;
+ FileWriter fw = null;
+ if(!pathToFile.exists()){
+ createEmptyFile(pathToFile);
+ }
+ try {
+ fw = new FileWriter(pathToFile, true);
+ bw = new BufferedWriter(fw);
+ StringBuilder sb = new StringBuilder();
+ if(leftSpaceCount > 0 ){
+ for(int i = 0; i < leftSpaceCount; i++){
+ sb.append(" ");
+ }
+ }
+ bw.write(sb.toString() + text);
+ bw.newLine();
+ bw.close();
+ fw.close();
+ } catch (Exception e) {
+ SetupCDTest.getExtendTest().log(Status.INFO, "Unable to write to flie " + pathToFile);
+ }
+ }
+
+
+ public static void cleanCurrentDownloadDir() throws IOException {
+ try{
+ ExtentTestActions.log(Status.INFO, "Cleaning directory " + SetupCDTest.getWindowTest().getDownloadDirectory());
+ System.gc();
+ FileUtils.cleanDirectory(new File(SetupCDTest.getWindowTest().getDownloadDirectory()));
+ }
+ catch(Exception e){
+
+ }
+ }
+
+ public static boolean isFileDownloaded(String downloadPath, String fileName) {
+ boolean flag = false;
+ File dir = new File(downloadPath);
+ File[] dir_contents = dir.listFiles();
+ for (int i = 0; i < dir_contents.length; i++) {
+ if (dir_contents[i].getName().equals(fileName))
+ return flag = true;
+ }
+ return flag;
+ }
+
+ public static String getMD5OfFile(File file) throws IOException {
+ String content = FileUtils.readFileToString(file);
+ String md5 = GeneralUtility.calculateMD5ByString(content);
+ return md5;
+ }
+
+ public static File createEmptyFile(String fileToCreate) {
+ File file= new File(fileToCreate);
+ try {
+ if(file.exists()){
+ deleteFile(file);
+ }
+ file.createNewFile();
+ SetupCDTest.getExtendTest().log(Status.INFO, "Create file " + fileToCreate);
+ } catch (IOException e) {
+ SetupCDTest.getExtendTest().log(Status.INFO, "Failed to create file " + fileToCreate);
+ e.printStackTrace();
+ }
+ return file;
+ }
+
+ public static File createEmptyFile(File fileToCreate) {
+ try {
+ if(fileToCreate.exists()){
+ deleteFile(fileToCreate);
+ }
+ fileToCreate.createNewFile();
+ SetupCDTest.getExtendTest().log(Status.INFO, "Create file " + fileToCreate);
+ } catch (IOException e) {
+ SetupCDTest.getExtendTest().log(Status.INFO, "Failed to create file " + fileToCreate);
+ e.printStackTrace();
+ }
+ return fileToCreate;
+ }
+
+ public static void deleteFile(File file){
+
+ try{
+ if(file.exists()){
+ file.deleteOnExit();
+ SetupCDTest.getExtendTest().log(Status.INFO, "File " + file.getName() + "has been deleted");
+ }else{
+ SetupCDTest.getExtendTest().log(Status.INFO, "Failed to delete file " + file.getName());
+ }
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+
+ }
+
+
+ /**
+ * get file list from directory by extension array
+ * @param directory
+ * @param okFileExtensions
+ * @return
+ */
+ public static List<File> getHeatAndHeatEnvArtifactsFromZip(File directory, String[] okFileExtensions){
+
+ List<File> fileList = new ArrayList<>();
+ File[] files = directory.listFiles();
+
+ for (String extension : okFileExtensions){
+ for(File file : files){
+ if (file.getName().toLowerCase().endsWith(extension)){
+ fileList.add(file);
+ }
+ }
+ }
+ return fileList;
+ }
+
+ private static final int BUFFER_SIZE = 4096;
+ public static void unzip(String zipFilePath, String destDirectory) throws IOException {
+ File destDir = new File(destDirectory);
+ if (!destDir.exists()) {
+ destDir.mkdir();
+ }
+ ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
+ ZipEntry entry = zipIn.getNextEntry();
+// iterates over entries in the zip file
+ while (entry != null) {
+ String entryName;
+ if(System.getProperty("os.name").contains("Windows")){
+ entryName = entry.getName().replaceAll("/", "\\"+File.separator);
+ }else{
+ entryName = entry.getName();
+ }
+ String filePath = destDirectory + entryName;
+ String currPath = destDirectory;
+ String[] dirs = entryName.split("\\"+File.separator);
+ String currToken;
+ for(int i = 0; i<dirs.length;++i){
+ currToken = dirs[i];
+ if(!entry.isDirectory() && i==dirs.length-1){
+ extractFile(zipIn, filePath);
+ } else {
+ if(currPath.endsWith(File.separator)){
+ currPath = currPath + currToken;
+ }else{
+ currPath = currPath + File.separator + currToken;
+ }
+// if the entry is a directory, make the directory
+ File dir = new File(currPath);
+ dir.mkdir();
+ }
+ }
+ zipIn.closeEntry();
+ entry = zipIn.getNextEntry();
+ }
+ zipIn.close();
+ }
+
+ private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
+ BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
+ byte[] bytesIn = new byte[BUFFER_SIZE];
+ int read = 0;
+ while ((read = zipIn.read(bytesIn)) != -1) {
+ bos.write(bytesIn, 0, read);
+ }
+ bos.close();
+ }
+
+ public static int getFileCountFromDefaulDownloadDirectory(){
+ return new File(SetupCDTest.getWindowTest().getDownloadDirectory()).listFiles().length;
+ }
+
+
+ public static String getKeyByValueFromPropertyFormatFile(String fullPath, String key) {
+ Properties prop = new Properties();
+ InputStream input = null;
+ String value = null;
+ try {
+ input = new FileInputStream(fullPath);
+ prop.load(input);
+ value = (prop.getProperty(key));
+
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ } finally {
+ if (input != null) {
+ try {
+ input.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ return value.replaceAll("\"","");
+ }
+
+ public static String getExecutionHostAddress() {
+
+ String computerName = null;
+ try {
+ computerName = InetAddress.getLocalHost().getHostAddress().replaceAll("\\.", "&middot;");
+ System.out.println(computerName);
+ if (computerName.indexOf(".") > -1)
+ computerName = computerName.substring(0,
+ computerName.indexOf(".")).toUpperCase();
+ } catch (UnknownHostException e) {
+ System.out.println("Uknown hostAddress");
+ }
+ return computerName != null ? computerName : "Uknown hostAddress";
+ }
+
+ public static Map<?, ?> loadCredentialsFile(String path, String filename) throws Exception {
+ File credentialsFileRemote = new File(path + filename);
+ Map<?, ?> yamlFile = FileHandling.parseYamlFile(credentialsFileRemote.getAbsolutePath());
+ return yamlFile;
+ }
+
+}
diff --git a/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/FindUtils.java b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/FindUtils.java
new file mode 100644
index 000000000..2b0ca66da
--- /dev/null
+++ b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/FindUtils.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdc.ci.tests.utilities;
+
+import org.onap.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.onap.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openqa.selenium.WebElement;
+import org.testng.Assert;
+
+import com.aventstack.extentreports.Status;
+
+public final class FindUtils {
+
+
+ public static void findComponentAndClick(String componentName) throws Exception {
+ SetupCDTest.getExtendTest().log(Status.INFO, "finding component " + componentName);
+ GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtons.SEARCH_BOX.getValue()).sendKeys(componentName);
+ WebElement foundComp = null;
+ try {
+ foundComp = GeneralUIUtils.getWebElementByTestID(componentName);
+ foundComp.click();
+ GeneralUIUtils.waitForLoader();
+ GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.GeneralElementsEnum.LIFECYCLE_STATE.getValue());
+ } catch (Exception e) {
+ String msg = String.format("DID NOT FIND A COMPONENT NAMED %s", componentName);
+ SetupCDTest.getExtendTest().log(Status.FAIL, msg);
+ System.out.println(msg);
+ Assert.fail(msg);
+ }
+ }
+
+
+
+}
diff --git a/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/GeneralUIUtils.java b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/GeneralUIUtils.java
new file mode 100644
index 000000000..8885e1c3f
--- /dev/null
+++ b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/GeneralUIUtils.java
@@ -0,0 +1,803 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdc.ci.tests.utilities;
+
+import com.aventstack.extentreports.Status;
+import org.apache.commons.io.FileUtils;
+import org.junit.Assert;
+import org.onap.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.onap.sdc.ci.tests.datatypes.DataTestIdEnum.DashboardCardEnum;
+import org.onap.sdc.ci.tests.execute.setup.DriverFactory;
+import org.onap.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openqa.selenium.*;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.ui.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.awt.*;
+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.hamcrest.Matchers.is;
+
+
+public final class GeneralUIUtils {
+
+ public static final String FILE_NAME = "Valid_tosca_Mycompute.yml";
+ static final Logger logger = LoggerFactory.getLogger(GeneralUIUtils.class);
+
+ private static int timeOut=90;
+
+// 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);
+ }
+
+ 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);
+ }
+
+
+ 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();
+ }
+ }
+
+
+ public static WebElement getWebElementByTestID(String dataTestId) {
+ return getWebElementByTestID(dataTestId, timeOut);
+ }
+
+ public static WebElement getWebElementByTestID(String dataTestId, int timeout) {
+ WebDriverWait wait = newWait(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 WebElement getInputElement(String dataTestId) {
+ try{
+ ultimateWait();
+ return getDriver().findElement(By.xpath("//*[@data-tests-id='" + dataTestId + "']"));
+ }
+ catch(Exception e){
+ return null;
+ }
+ }
+
+ 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 timeoutInSeconds) {
+ WebDriverWait wait = newWait(timeoutInSeconds);
+ 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 = newWait(timeOut);
+ return wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(by));
+ }
+
+ public static List<WebElement> getWebElementsListByContainTestID(String dataTestId) {
+ try{
+ WebDriverWait wait = newWait(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) {
+ return getWebElementsListByContainsClassName(containedText, timeOut);
+ }
+
+ public static List<WebElement> getWebElementsListByContainsClassName(String containedText, int timeoutInSeconds) {
+ WebDriverWait wait = newWait(timeoutInSeconds);
+ return wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//*[contains(@class, '"+containedText+"')]")));
+ }
+
+ public static WebElement getWebElementByContainsClassName(String containedText) {
+ return getWebElementByContainsClassName(containedText, timeOut);
+ }
+
+ public static WebElement getWebElementByContainsClassName(String containedText, int timeoutInSeconds) {
+ return getWebElementBy(By.xpath("//*[contains(@class, '"+containedText+"')]"), timeoutInSeconds);
+ }
+
+ public static WebElement getWebElementByClassName(String className) {
+ return getWebElementByClassName(className, timeOut);
+ }
+
+ public static WebElement getWebElementByClassName(String className, int timeoutInSeconds) {
+ WebDriverWait wait = newWait(timeoutInSeconds);
+ return wait.until(ExpectedConditions.visibilityOfElementLocated(By.className(className)));
+ }
+
+ public static List<WebElement> getWebElementsListByContainsClassNameAndText(String cssName, String text, int timeoutInSeconds) {
+ WebDriverWait wait = newWait(timeoutInSeconds);
+ String xpath = String.format("//*[contains(@class, '%s') and contains(text(),'%s')]", cssName, text);
+ return wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(
+ By.xpath(xpath)));
+ }
+
+ public static WebElement getWebElementByLinkText(String linkText) {
+ WebDriverWait wait = newWait(timeOut);
+ return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@text='" + linkText + "']")));
+ }
+
+
+ public static List<WebElement> getWebElementsListByTestID(String dataTestId) {
+ WebDriverWait wait = newWait(timeOut);
+ return wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
+ }
+
+ public static List<WebElement> getWebElementsListByClassName(String className) {
+ WebDriverWait wait = newWait(timeOut);
+ return wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.className(className)));
+ }
+
+
+
+
+ public static Boolean isElementInvisibleByTestId(String dataTestId) {
+ WebDriverWait wait = newWait(timeOut);
+ return wait.until(
+ ExpectedConditions.invisibilityOfElementLocated(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
+ }
+
+ public static Boolean isElementVisibleByTestId(String dataTestId) {
+ try{
+ WebDriverWait wait = newWait(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 void clickOnElementByTestIdWithoutWait(String dataTestId) {
+ WebDriverWait wait = newWait(timeOut);
+ wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@data-tests-id='" + dataTestId + "']"))).click();
+ }
+
+ public static void clickOnElementByTestId(String dataTestId, int customTimeout) {
+ WebDriverWait wait = newWait(customTimeout);
+ wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@data-tests-id='" + dataTestId + "']"))).click();
+ }
+
+ public static WebElement waitForElementVisibilityByTestId(String dataTestId) {
+ WebDriverWait wait = newWait(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 = newWait(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 = newWait(timeOut);
+ boolean displayed = getDriver().findElements(by).isEmpty();
+ if (!displayed){
+ Boolean until = wait.until(ExpectedConditions.invisibilityOfElementLocated(by));
+ sleep(1);
+ return until;
+ }
+ return false;
+ }
+
+
+ public static void setWebElementByTestId(String elementID, String value) {
+ WebElement resourceDescriptionTextbox = GeneralUIUtils.getWebElementByTestID(elementID);
+ 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(1);
+ 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 = newWait(15);
+ wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("ASDC")));
+ WebElement ClickASDCLogo = getDriver().findElement(By.linkText("ASDC"));
+ ClickASDCLogo.click();
+ GeneralUIUtils.waitForLoader();
+ }
+
+ public static void sleep(int millis) {
+ try {
+ Thread.sleep(millis);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static void moveToStep(DataTestIdEnum.StepsEnum Stepname) {
+ moveToStep(Stepname.getValue());
+ SetupCDTest.getExtendTest().log(Status.INFO, String.format("Going to %s page ", Stepname.toString()));
+ }
+
+ 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);
+ Assert.assertThat(selectlist.getFirstSelectedOption().getText(), is(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 = newWait(timeOut);
+ GeneralUIUtils.waitForLoader();
+ return parentElement.findElement(By.cssSelector(cssString));
+ }
+
+ public static WebElement getElementfromElementByXPATH(WebElement parentElement, DashboardCardEnum dataTestId){
+ WebDriverWait wait = newWait(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() {
+ newWait(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(isKeepWaiting ? napPeriodMS : 0);
+ 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);
+ }
+
+
+ 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;
+ }
+
+
+
+ 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;");
+ 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) {
+ logger.info("clickOnElementByText: {}", textInElement);
+ WebDriverWait wait = newWait(timeOut);
+ HighlightMyElement(wait.until(
+ ExpectedConditions.elementToBeClickable(findByText(textInElement)))).click();
+ }
+
+ public static void clickOnElementByText(String textInElement, int customTimeout) {
+ logger.info("clickOnElementByText: {}", textInElement);
+ WebDriverWait wait = newWait(customTimeout);
+ HighlightMyElement(wait.until(ExpectedConditions.elementToBeClickable(searchByTextContaining(textInElement)))).click();
+ }
+
+ private static WebDriverWait newWait(int timeoutInSeconds) {
+ final WebDriver driver = getDriver();
+ driver.manage().timeouts().setScriptTimeout(timeoutInSeconds, TimeUnit.SECONDS);
+ return new WebDriverWait(driver, timeoutInSeconds, 120);
+ }
+
+ public static void clickJSOnElementByText(String textInElement) throws Exception {
+ WebDriverWait wait = newWait(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 = newWait(timeOut);
+
+ wait.until(ExpectedConditions.textToBePresentInElementValue(element, text));
+ }
+
+ public static void waitForAngular(){
+ WebDriverWait wait = newWait(90);
+ wait.until(AdditionalConditions.pageLoadWait());
+ wait.until(AdditionalConditions.angularHasFinishedProcessing());
+ }
+
+ public static void waitForAngular2(){
+ WebDriverWait wait = newWait(90);
+ wait.until(AdditionalConditions.pageLoadWait());
+ try {
+ WebDriverWait briefWait = newWait(2);
+ briefWait.until(AdditionalConditions.angular2HasFinishedProcessing());
+ } catch (TimeoutException | org.openqa.selenium.ScriptTimeoutException e) {
+ logger.info("Ignoring TimeoutException while waiting for angular2: {}", e, e);
+ }
+ }
+
+ 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(){
+ logger.info("ultimateWait: starting");
+ long startTime = System.nanoTime();
+
+ GeneralUIUtils.waitForAngular();
+ logger.info("ultimateWait: waited for angular: {} ms", TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime));
+
+ GeneralUIUtils.waitForAngular2();
+ logger.info("ultimateWait: waited for angular2: {} ms", TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime));
+
+ 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));
+ }
+
+ logger.info("ultimateWait: done");
+ }
+
+ 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));
+ }
+
+ public static List<WebElement> findElementsByText(String textInElement){
+ return getDriver().findElements(searchByTextContaining(textInElement));
+ }
+
+ public static By searchByTextContaining(String textInElement) {
+ return By.xpath("//*[contains(text(),'" + textInElement + "')]");
+ }
+
+
+ public static boolean findAndWaitByText(String textInElement, int timeout){
+ logger.info("findAndWaitByText: {}", textInElement);
+ try{
+ WebDriverWait wait = newWait(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 = newWait(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();
+ }
+ }
+
+ public static WebElement getElementByCSS(String cssString) throws InterruptedException {
+ ultimateWait();
+ return getDriver().findElement(By.cssSelector(cssString));
+ }
+
+ public static String getDataTestIdAttributeValue(WebElement element) {
+ 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;
+ }
+ }
+
+ public static void clickOnElementByCSS(String cssString) throws Exception {
+ WebDriverWait wait = newWait(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(1);
+ waitForElementInVisibilityBy(By.className("tlv-loader-back"), timeOut);
+ }
+
+}
diff --git a/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/GeneralUtility.java b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/GeneralUtility.java
new file mode 100644
index 000000000..f2e834e03
--- /dev/null
+++ b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/GeneralUtility.java
@@ -0,0 +1,155 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdc.ci.tests.utilities;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.io.FileUtils;
+
+public class GeneralUtility {
+
+ public static boolean generateTextFile(String fileName, String fileData) {
+ boolean isSuccessfull = true;
+ try {
+ FileUtils.writeStringToFile(new File(fileName), fileData);
+ } catch (IOException e) {
+ isSuccessfull = false;
+ }
+ return isSuccessfull;
+ }
+
+ /**
+ * Use with care, usage is not advised!!!
+ * The method only checks if String does not contain special characters + length divided by 4 with no remainder.
+ * The methods contained in other common libraries do the same.
+ */
+ public static boolean isBase64Encoded(byte[] data) {
+ return Base64.isBase64(data);
+ }
+
+ /**
+ *Use with care, usage is not advised!!!
+ * The method only checks if String does not contain special characters + length divided by 4 with no remainder.
+ * The methods contained in other common libraries do the same.
+ */
+ public static boolean isBase64Encoded(String str) {
+ boolean isEncoded = false;
+ try {
+ // checks if the string was properly padded to the
+ isEncoded = ((str.length() % 4 == 0) && (Pattern.matches("\\A[a-zA-Z0-9/+]+={0,2}\\z", str)));
+ if (isEncoded) {
+ // If no exception is caught, then it is possibly a base64
+ // encoded string
+ byte[] data = Base64.decodeBase64(str);
+ }
+
+ } catch (Exception e) {
+ // If exception is caught, then it is not a base64 encoded string
+ isEncoded = false;
+ }
+ return isEncoded;
+ }
+
+ /**
+ * Checks whether the passed string exceeds a limit of number of characters.
+ *
+ * @param str
+ * @param limit
+ * @return the result of comparison, or false if str is null.
+ */
+ public static boolean isExceedingLimit(String str, int limit) {
+ if (str == null) {
+ return false;
+ }
+ return str.length() > limit;
+ }
+
+ /**
+ * Checks the passed string list whether the cumulative length of strings and delimiters between them exceeds a limit of number of characters. For example for list ("one","two","three") with delimiter "," the length of list is calculated
+ * 3+1+3+1+5=13
+ *
+ * @param strList
+ * @param limit
+ * @param delimiterLength
+ * - 0 if there is no delimeter.
+ * @return the result of comparison, or false if strList is null.
+ */
+ public static boolean isExceedingLimit(List<String> strList, int limit, int delimiterLength) {
+ if (strList == null || strList.isEmpty()) {
+ return false;
+ }
+ int sum = 0;
+ int size = strList.size();
+ for (int i = 0; i < size - 1; i++) {
+ String str = strList.get(i);
+ if (str != null) {
+ sum += str.length();
+ }
+ sum += delimiterLength;
+ }
+ String str = strList.get(size - 1);
+ if (str != null) {
+ sum += str.length();
+ }
+ return sum > limit;
+ }
+
+ /**
+ * Return the extension as the substring from the last dot. For input "kuku.txt", "txt" will be returned. If no dot is found or input is null, empty string is returned.
+ *
+ * @param fileName
+ * @return extension
+ */
+ public static String getFilenameExtension(String fileName) {
+ String res = Constants.EMPTY_STRING;
+ if (fileName != null) {
+ int indexOf = fileName.lastIndexOf('.');
+ if (indexOf != -1 && indexOf < (fileName.length() - 1)) {
+ res = fileName.substring(indexOf + 1);
+ }
+ }
+ return res;
+ }
+
+ public static String calculateMD5ByByteArray(byte[] payload) {
+ String decodedMd5 = org.apache.commons.codec.digest.DigestUtils.md5Hex(payload);
+ byte[] encodeMd5 = Base64.encodeBase64(decodedMd5.getBytes());
+ return new String(encodeMd5);
+
+ }
+
+ /**
+ *
+ * @param data
+ * @return
+ */
+ public static String calculateMD5ByString(String data) {
+ String calculatedMd5 = org.apache.commons.codec.digest.DigestUtils.md5Hex(data);
+
+ // encode base-64 result
+ byte[] encodeBase64 = Base64.encodeBase64(calculatedMd5.getBytes());
+ return new String(encodeBase64);
+ }
+}
diff --git a/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/LoginUtils.java b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/LoginUtils.java
new file mode 100644
index 000000000..eca3599c6
--- /dev/null
+++ b/vid-automation/src/main/java/org/onap/sdc/ci/tests/utilities/LoginUtils.java
@@ -0,0 +1,42 @@
+package org.onap.sdc.ci.tests.utilities;
+
+import org.onap.sdc.ci.tests.datatypes.UserCredentials;
+import org.onap.sdc.ci.tests.datatypes.UserRoleEnum;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+public class LoginUtils {
+
+ private static final String WEB_SEAL_PASSWORD = "123123a";
+
+ public static void loginToLocalWebsealSimulator(UserRoleEnum role) {
+ WebDriver driver = GeneralUIUtils.getDriver();
+ WebDriverWait wait = new WebDriverWait(driver, 30);
+
+ wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@method='" + "post" + "']"))));
+
+ WebElement userIdTextbox = GeneralUIUtils.getWebElementBy(By.name("userId"));
+ userIdTextbox.sendKeys(role.getUserId());
+ WebElement passwordTextbox = GeneralUIUtils.getWebElementBy(By.name("password"));
+ passwordTextbox.sendKeys(WEB_SEAL_PASSWORD);
+
+ wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//*[@value='" + "Login" + "']")))).click();
+ }
+
+ public static void loginToLocalWebsealSimulator(UserCredentials user) {
+ WebDriver driver = GeneralUIUtils.getDriver();
+ WebDriverWait wait = new WebDriverWait(driver, 30);
+
+ wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@method='" + "post" + "']"))));
+
+ WebElement userIdTextbox = GeneralUIUtils.getWebElementBy(By.name("userId"));
+ userIdTextbox.sendKeys(user.getUserId());
+ WebElement passwordTextbox = GeneralUIUtils.getWebElementBy(By.name("password"));
+ passwordTextbox.sendKeys(user.getPassword());
+
+ wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//*[@value='" + "Login" + "']")))).click();
+ }
+}