Add ETSI 2.5.1 Network Service design UI Test
[sdc.git] / integration-tests / src / test / java / org / onap / sdc / frontend / ci / tests / flow / AbstractUiTestFlow.java
1 /*
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Nordix Foundation
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  *
16  *  SPDX-License-Identifier: Apache-2.0
17  *  ============LICENSE_END=========================================================
18  */
19
20 package org.onap.sdc.frontend.ci.tests.flow;
21
22 import com.aventstack.extentreports.ExtentTest;
23 import java.util.Optional;
24 import org.onap.sdc.frontend.ci.tests.execute.setup.ExtentTestManager;
25 import org.onap.sdc.frontend.ci.tests.flow.exception.MissingParameterRuntimeException;
26 import org.onap.sdc.frontend.ci.tests.pages.PageObject;
27 import org.openqa.selenium.WebDriver;
28
29 /**
30  * The base class for a UI test flow.
31  */
32 public abstract class AbstractUiTestFlow implements UiTestFlow {
33
34     protected final WebDriver webDriver;
35     protected final ExtentTest extendTest = ExtentTestManager.getInstance().getTest();
36
37     public AbstractUiTestFlow(final WebDriver webDriver) {
38         this.webDriver = webDriver;
39     }
40
41     /**
42      * Find a page object within the the page objects array, based on the given class. If the page object is not found, throws an error.
43      *
44      * @param pageObjects           the page object array
45      * @param expectedParameterType the class of the page object to find
46      * @param <T>                   a child class of the page object
47      * @return the found page object
48      * @throws MissingParameterRuntimeException when the page object is not found
49      */
50     public <T extends PageObject> T findParameter(final PageObject[] pageObjects,
51                                                   final Class<T> expectedParameterType) {
52         final Optional<T> parameter = getParameter(pageObjects, expectedParameterType);
53         if (parameter.isEmpty()) {
54             throw new MissingParameterRuntimeException(expectedParameterType.getName());
55         }
56         return parameter.get();
57     }
58
59     /**
60      * Find a page object within the the page objects array, based on the given class.
61      *
62      * @param pageObjects           the page object array
63      * @param expectedParameterType the class of the page object to find
64      * @param <T>                   a child class of the page object
65      * @return an optional page object
66      */
67     public <T extends PageObject> Optional<T> getParameter(final PageObject[] pageObjects,
68                                                            final Class<T> expectedParameterType) {
69         for (final PageObject uiTestFlow : pageObjects) {
70             if (expectedParameterType.isInstance(uiTestFlow)) {
71                 return Optional.of((T) uiTestFlow);
72             }
73         }
74
75         return Optional.empty();
76     }
77 }