aboutsummaryrefslogtreecommitdiffstats
path: root/services/frontend/fe_dashboard.py
diff options
context:
space:
mode:
Diffstat (limited to 'services/frontend/fe_dashboard.py')
-rw-r--r--services/frontend/fe_dashboard.py289
1 files changed, 289 insertions, 0 deletions
diff --git a/services/frontend/fe_dashboard.py b/services/frontend/fe_dashboard.py
new file mode 100644
index 0000000..0df66d4
--- /dev/null
+++ b/services/frontend/fe_dashboard.py
@@ -0,0 +1,289 @@
+
+# ============LICENSE_START==========================================
+# org.onap.vvp/test-engine
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the “License”);
+# you may not use this software 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.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# 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============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+from selenium.webdriver.support.ui import Select
+
+from services.constants import Constants
+from services.database.db_user import DBUser
+from services.frontend.base_actions.click import Click
+from services.frontend.base_actions.enter import Enter
+from services.frontend.base_actions.get import Get
+from services.frontend.base_actions.wait import Wait
+from services.frontend.fe_general import FEGeneral
+from services.frontend.fe_overview import FEOverview
+from services.frontend.fe_user import FEUser
+from services.helper import Helper
+from services.logging_service import LoggingServiceFactory
+from services.session import session
+
+
+logger = LoggingServiceFactory.get_logger()
+
+
+class FEDashboard:
+
+ @staticmethod
+ def open_announcement():
+ try:
+ Click.id("read-more-button")
+ except Exception as e:
+ errorMsg = "Failed to go to Announcement page."
+ raise Exception(errorMsg, e)
+
+ @staticmethod
+ def open_documentation(title):
+ try:
+ Click.id("documentation", wait_for_page=True)
+ Wait.id("search-doc")
+ Wait.text_by_id(title, title, wait_for_page=True)
+ except Exception as e:
+ errorMsg = "Failed to go to Announcement page."
+ raise Exception(errorMsg, e)
+
+ @staticmethod
+ def validate_filtering_by_stage(user_content, stage):
+ FEGeneral.re_open(Constants.Default.LoginURL.TEXT)
+ # Validate Scrolling #
+ FEUser.login(user_content['el_email'], Constants.Default.Password.TEXT)
+ FEOverview.click_on_vf(user_content)
+ Click.id(Constants.Dashboard.Statuses.ID, wait_for_page=True)
+ Wait.text_by_id("dashboard-title", "Statuses", wait_for_page=True)
+ Wait.id("search-filter-stage")
+ Select(session.ice_driver.find_element_by_id(
+ "search-filter-stage")).select_by_visible_text(stage)
+ Wait.id(
+ Constants.Dashboard.Statuses.ExportExcel.ID, wait_for_page=True)
+ engLeadID = DBUser.select_user_native_id(user_content['el_email'])
+ # Query for fetching count of rows per stage.
+ countOfEngInStagePerUser = DBUser.select_user_engagements_by_stage(
+ stage, engLeadID)
+ # Calculate number of pages #
+ NUM_OF_RESULTS_PER_PAGES = 8
+ number_of_pages = countOfEngInStagePerUser // NUM_OF_RESULTS_PER_PAGES
+ logger.debug("Number of pages: " + str(number_of_pages))
+ if (countOfEngInStagePerUser % NUM_OF_RESULTS_PER_PAGES != 0):
+ number_of_pages += 1
+ logger.debug("number_of_pages " + str(number_of_pages)) # Scroll #
+ Wait.id("engagements-pagination", wait_for_page=True)
+ element = session.ice_driver.find_element_by_id(
+ "engagements-pagination")
+ element.location_once_scrolled_into_view
+ Click.link_text(str(number_of_pages), wait_for_page=True)
+
+ @staticmethod
+ def validate_filtering_by_stage_with_page_ids(user_content, stage):
+ FEOverview.click_on_vf(user_content)
+ Click.id(Constants.Dashboard.Statuses.ID)
+ # Stage Active Validation #
+ Wait.text_by_id("dashboard-title", "Statuses")
+ Wait.id(Constants.Dashboard.Statuses.FilterDropdown.ID)
+ Select(session.ice_driver.find_element_by_id(
+ Constants.Dashboard.Statuses.FilterDropdown.ID)).select_by_visible_text("Intake")
+ Wait.page_has_loaded()
+ Select(session.ice_driver.find_element_by_id(
+ Constants.Dashboard.Statuses.FilterDropdown.ID)).select_by_visible_text(stage)
+ Wait.id(
+ Constants.Dashboard.Statuses.ExportExcel.ID, wait_for_page=True)
+ countIdsActive = 0
+ engLeadID = DBUser.select_user_native_id(user_content['el_email'])
+ countOfEngInStagePerUser = DBUser.select_user_engagements_by_stage(
+ stage, engLeadID) # Calculate number of pages #
+ NUM_OF_RESULTS_PER_PAGES = 8
+ number_of_pages = countOfEngInStagePerUser // NUM_OF_RESULTS_PER_PAGES
+ if countOfEngInStagePerUser <= NUM_OF_RESULTS_PER_PAGES:
+ number_of_pages = 1
+ if number_of_pages == 1:
+ # Count all engagements on current page
+ logger.debug("Number of pages: " + str(number_of_pages))
+ ids = session.ice_driver.find_elements_by_xpath('//*[@id]')
+ for ii in ids:
+ if "starred-" in ii.get_attribute('id'):
+ # Print ii.tag_name (id name as string).
+ logger.debug(ii.get_attribute('id'))
+ countIdsActive += 1
+ Wait.id(Constants.Dashboard.Statuses.ExportExcel.ID)
+ if countIdsActive == countOfEngInStagePerUser:
+ logger.debug("result right")
+ else:
+ if countOfEngInStagePerUser % NUM_OF_RESULTS_PER_PAGES != 0:
+ number_of_pages += 1
+ logger.debug("number_of_pages " + str(number_of_pages))
+ # Scroll #
+ Wait.id("engagements-pagination")
+ element = session.ice_driver.find_element_by_id(
+ "engagements-pagination")
+ element.location_once_scrolled_into_view
+ if number_of_pages > 1:
+ Click.link_text(str(number_of_pages), wait_for_page=True)
+
+ @staticmethod
+ def validate_statistics_by_stages(user_content):
+ # Validate Scrolling #
+ FEOverview.click_on_vf(user_content)
+ Click.id(Constants.Dashboard.Statuses.ID)
+ Wait.text_by_id("dashboard-title", "Statuses")
+ Wait.css(Constants.Dashboard.Statuses.Statistics.FilterDropdown.CSS)
+ Select(session.ice_driver.find_element_by_css_selector(
+ Constants.Dashboard.Statuses.Statistics.FilterDropdown.CSS)).select_by_visible_text("All")
+ engLeadID = DBUser.select_user_native_id(user_content['el_email'])
+ countOfEngInStagePerUser = DBUser.select_all_user_engagements(
+ engLeadID) # Scroll #
+ Wait.text_by_id(
+ Constants.Dashboard.Statuses.Statistics.EngagementsNumber.ID,
+ str(countOfEngInStagePerUser), wait_for_page=True)
+ element = session.ice_driver.find_element_by_id(
+ Constants.Dashboard.Statuses.Statistics.EngagementsNumber.ID)
+ # Stage Active Validation #
+ element.location_once_scrolled_into_view
+ Wait.css(
+ Constants.Dashboard.Statuses.Statistics.FilterDropdown.CSS, wait_for_page=True)
+ Select(session.ice_driver.find_element_by_css_selector(
+ Constants.Dashboard.Statuses.Statistics.FilterDropdown.CSS)).select_by_visible_text("Active")
+ countOfEngInStagePerUser = DBUser.select_user_engagements_by_stage(
+ "Active", engLeadID)
+ Wait.text_by_id(
+ Constants.Dashboard.Statuses.Statistics.EngagementsNumber.ID, str(countOfEngInStagePerUser), wait_for_page=True)
+
+ @staticmethod
+ def search_by_vf(user_content):
+ engName = user_content[
+ 'engagement_manual_id'] + ": " + user_content['vfName']
+ engSearchID = "eng-" + engName
+ FEGeneral.re_open_not_clean_cache(Constants.Default.DashbaordURL.TEXT)
+ logger.debug("Search engagement by engagement_manual_id")
+ Enter.text_by_id(Constants.Dashboard.Statuses.SearchBox.ID,
+ user_content['engagement_manual_id'], wait_for_page=True)
+ eng_manual_id = user_content['engagement_manual_id'] + ":"
+ Wait.text_by_id(engSearchID, eng_manual_id)
+
+ @staticmethod
+ def search_in_left_searchbox_by_param(manual_id, vf_name, param):
+ myVfName = manual_id + ": " + vf_name
+ Enter.text_by_xpath(
+ Constants.Dashboard.LeftPanel.SearchBox.Results.XPATH, param)
+ Wait.text_by_css(
+ Constants.Dashboard.LeftPanel.SearchBox.Results.CSS, myVfName)
+ Click.css(Constants.Dashboard.LeftPanel.SearchBox.Results.CSS)
+
+ @staticmethod
+ def check_vnf_version(user_content):
+ current_vnf_value = Get.by_css(
+ "#progress_bar_" + user_content['engagement_manual_id'] + " ." + Constants.Dashboard.Overview.Progress.VnfVersion.CLASS, wait_for_page=True)
+ Helper.internal_assert(current_vnf_value, user_content['vnf_version'])
+
+ @staticmethod
+ def search_in_dashboard(user_content, vfcName, users):
+ engName = user_content[
+ 'engagement_manual_id'] + ": " + user_content['vfName']
+ engSearchID = "eng-" + engName
+ for user in users:
+ FEGeneral.re_open(Constants.Default.LoginURL.TEXT)
+ logger.debug("Login with user " + user)
+ FEUser.login(user, Constants.Default.Password.TEXT)
+ logger.debug("Search engagement by engagement_manual_id")
+ Enter.text_by_id(
+ Constants.Dashboard.Statuses.SearchBox.ID, user_content['engagement_manual_id'])
+ eng_manual_id = user_content['engagement_manual_id'] + ":"
+ Wait.text_by_id(engSearchID, eng_manual_id)
+ logger.debug("Engagement found (searched by engagement_manual_id)")
+ FEGeneral.refresh()
+ logger.debug("Search engagement by VF name")
+ # Search by VF name.
+ Enter.text_by_id(
+ Constants.Dashboard.Statuses.SearchBox.ID, user_content['vfName'])
+ Wait.text_by_id(engSearchID, eng_manual_id)
+ logger.debug("Engagement found (searched by VF name)")
+ FEGeneral.refresh()
+ logger.debug("Search engagement by VFC")
+ # Search by VFC.
+ Enter.text_by_id(
+ Constants.Dashboard.Statuses.SearchBox.ID, vfcName)
+ Wait.text_by_id(engSearchID, eng_manual_id)
+ logger.debug("Engagement found (searched by VFC)")
+ FEGeneral.refresh()
+ logger.debug("Negative search: search by random string")
+ # Search by VFC.
+ Enter.text_by_id(Constants.Dashboard.Statuses.SearchBox.ID,
+ "RND_STR_" + Helper.rand_string("randomString"))
+ Wait.text_by_id("search-results", "Export to Excel >>")
+
+ @staticmethod
+ def check_if_the_eng_of_NS_is_the_correct_one(user_content):
+ logger.debug(" > Check if the engagement of NS is the correct one")
+ engName = user_content[
+ 'engagement_manual_id'] + ": " + user_content['vfName']
+ Wait.text_by_name(
+ user_content['engagement_manual_id'], "Engagement - " + engName)
+ return engName
+
+ @staticmethod
+ def check_if_creator_of_NS_is_the_EL(user_content):
+ logger.debug(
+ " > Check if creator of NS is the EL " + user_content['el_name'])
+ if (user_content['el_name'] not in Get.by_name("creator-full-name-" + user_content['el_name'])):
+ logger.error("EL is not the creator of the NS according to UI.")
+ raise
+
+ @staticmethod
+ def statuses_search_vf(engagement_manual_id, vf_name):
+ engName = engagement_manual_id + ": " + vf_name
+ # Search by VF name.
+ Enter.text_by_id(
+ Constants.Dashboard.Statuses.SearchBox.ID, vf_name, wait_for_page=True)
+ Wait.id("eng-" + engName, wait_for_page=True)
+ Click.id("eng-" + engName, wait_for_page=True)
+ Wait.text_by_id(
+ Constants.Dashboard.Overview.Title.ID, engName, wait_for_page=True)
+
+ @staticmethod
+ def go_to_main_dashboard():
+ Click.id(Constants.Dashboard.Statuses.ID)
+
+ @staticmethod
+ def click_on_dashboard_and_validate_statistics(is_negative):
+ # Click.id(Constants.Dashboard.Default.DASHBOARD_ID)
+ Wait.page_has_loaded()
+ if is_negative:
+ session.run_negative(lambda: Wait.id(
+ Constants.Dashboard.Default.STATISTICS), "Negative test failed at Statistics appears")
+ else:
+ Wait.id(Constants.Dashboard.Default.STATISTICS)
+
+ @staticmethod
+ def click_on_create_vf():
+ Click.id(Constants.Dashboard.LeftPanel.AddEngagement.ID)