diff options
Diffstat (limited to 'services/frontend')
-rw-r--r-- | services/frontend/__init__.py | 38 | ||||
-rw-r--r-- | services/frontend/base_actions/__init__.py | 38 | ||||
-rw-r--r-- | services/frontend/base_actions/click.py | 120 | ||||
-rw-r--r-- | services/frontend/base_actions/enter.py | 173 | ||||
-rw-r--r-- | services/frontend/base_actions/get.py | 149 | ||||
-rw-r--r-- | services/frontend/base_actions/wait.py | 334 | ||||
-rw-r--r-- | services/frontend/fe_checklist.py | 854 | ||||
-rw-r--r-- | services/frontend/fe_checklist_template.py | 331 | ||||
-rw-r--r-- | services/frontend/fe_cms.py | 179 | ||||
-rw-r--r-- | services/frontend/fe_dashboard.py | 310 | ||||
-rw-r--r-- | services/frontend/fe_detailed_view.py | 471 | ||||
-rw-r--r-- | services/frontend/fe_general.py | 281 | ||||
-rw-r--r-- | services/frontend/fe_invite.py | 226 | ||||
-rw-r--r-- | services/frontend/fe_next_step.py | 58 | ||||
-rw-r--r-- | services/frontend/fe_overview.py | 528 | ||||
-rw-r--r-- | services/frontend/fe_user.py | 455 | ||||
-rw-r--r-- | services/frontend/fe_wizard.py | 240 |
17 files changed, 0 insertions, 4785 deletions
diff --git a/services/frontend/__init__.py b/services/frontend/__init__.py deleted file mode 100644 index 32b601a..0000000 --- a/services/frontend/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ - -# ============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. diff --git a/services/frontend/base_actions/__init__.py b/services/frontend/base_actions/__init__.py deleted file mode 100644 index 32b601a..0000000 --- a/services/frontend/base_actions/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ - -# ============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. diff --git a/services/frontend/base_actions/click.py b/services/frontend/base_actions/click.py deleted file mode 100644 index 561b2f7..0000000 --- a/services/frontend/base_actions/click.py +++ /dev/null @@ -1,120 +0,0 @@ - -# ============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.common.action_chains import ActionChains - -from services.frontend.base_actions.wait import Wait -from services.session import session - - -class Click: - - @staticmethod - def id(element_id, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.id(element_id) - session.ice_driver.find_element_by_id(element_id).click() - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "Failed to click_on on ID " + element_id - raise Exception(errorMsg, e) - - @staticmethod - def name(element_name, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.name(element_name) - session.ice_driver.find_element_by_name(element_name).click() - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "Failed to click_on on ID " + element_name - raise Exception(errorMsg, e) - - @staticmethod - def link_text(link_inner_text, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.link_text(link_inner_text) - session.ice_driver.find_element_by_link_text( - link_inner_text).click() - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "Failed to click_on on LINK TEXT " + link_inner_text - raise Exception(errorMsg, e) - - @staticmethod - def css(element_css, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.css(element_css) - session.ice_driver.find_element_by_css_selector( - element_css).click() - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "Failed to click_on on CSS Selector " + element_css - raise Exception(errorMsg, e) - - @staticmethod - def xpath(element_xpath, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.xpath(element_xpath) - session.ice_driver.find_element_by_xpath(element_xpath).click() - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "Failed to click_on on XPATH " + element_xpath - raise Exception(errorMsg, e) - - @staticmethod - def drag_and_drop_by_css(source_css, xoffset, yoffset): - ns = session.ice_driver.find_element_by_id("step-description-1") - ActionChains(session.ice_driver).move_to_element(ns).perform() - Wait.css(source_css) - source_element = session.ice_driver.find_element_by_css_selector( - source_css) - ActionChains( - session.ice_driver).drag_and_drop_by_offset( - source_element, - xoffset, - yoffset).perform() diff --git a/services/frontend/base_actions/enter.py b/services/frontend/base_actions/enter.py deleted file mode 100644 index 2a6992d..0000000 --- a/services/frontend/base_actions/enter.py +++ /dev/null @@ -1,173 +0,0 @@ - -# ============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 datetime import datetime -import time - -from services.frontend.base_actions.wait import Wait -from services.logging_service import LoggingServiceFactory -from services.session import session - - -logger = LoggingServiceFactory.get_logger() - - -class Enter: - - @staticmethod - def text_by_name(attr_name_value, typed_text, wait_for_page=False): - # Send keys to element in UI, by name locator (e.g. type something in - # text box). - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.name(attr_name_value) - session.ice_driver.find_element_by_name(attr_name_value).clear() - session.ice_driver.find_element_by_name( - attr_name_value).send_keys(typed_text[:-1]) - time.sleep(session.wait_until_time_pause) - session.ice_driver.find_element_by_name( - attr_name_value).send_keys(typed_text[-1:]) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "Failed to type " + typed_text + " in text box" - raise Exception(errorMsg, e) - - @staticmethod - def text_by_xpath(attr_xpath_value, typed_text, wait_for_page=False): - # Send keys to element in UI, by name locator (e.g. type something in - # text box). - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.xpath(attr_xpath_value) - session.ice_driver.find_element_by_xpath(attr_xpath_value).clear() - session.ice_driver.find_element_by_xpath( - attr_xpath_value).send_keys(typed_text[:-1]) - time.sleep(session.wait_until_time_pause) - session.ice_driver.find_element_by_xpath( - attr_xpath_value).send_keys(typed_text[-1:]) - # If failed - count the failure and add the error to list of errors. - except Exception: - errorMsg = "Failed to type " + typed_text + " in text box" - raise Exception(errorMsg, attr_xpath_value) - - @staticmethod - def text_by_id(attr_id_value, typed_text, wait_for_page=False): - # Send keys to element in UI, by ID locator (e.g. type something in - # text box). - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.id(attr_id_value) - session.ice_driver.find_element_by_id(attr_id_value).clear() - session.ice_driver.find_element_by_id( - attr_id_value).send_keys(typed_text[:-1]) - time.sleep(session.wait_until_time_pause) - session.ice_driver.find_element_by_id( - attr_id_value).send_keys(typed_text[-1:]) - # If failed - count the failure and add the error to list of errors. - except Exception: - errorMsg = "Failed to type " + typed_text + " in text box" - raise Exception(errorMsg, attr_id_value) - - @staticmethod - def clear(attr_id_value): - try: - Wait.id(attr_id_value) - session.ice_driver.find_element_by_id(attr_id_value).clear() - except Exception: - errorMsg = "Failed to clear text box" - raise Exception(errorMsg, attr_id_value) - - @staticmethod - def text_by_css(attr_css_value, typed_text, wait_for_page=False): - # Send keys to element in UI, by CSS locator (e.g. type something in - # text box). - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.css(attr_css_value) - session.ice_driver.find_element_by_css_selector( - attr_css_value).clear() - session.ice_driver.find_element_by_css_selector( - attr_css_value).send_keys(typed_text[:-1]) - time.sleep(session.wait_until_time_pause) - session.ice_driver.find_element_by_css_selector( - attr_css_value).send_keys(typed_text[-1:]) - # If failed - count the failure and add the error to list of errors. - except Exception: - errorMsg = "Failed to type " + typed_text + " in text box" - raise Exception(errorMsg, attr_css_value) - - @staticmethod - def text_by_link_text( - attr_link_text_value, - typed_text, - wait_for_page=False): - # Send keys to element in UI, by name locator (e.g. type something in - # text box). - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.link_text(attr_link_text_value) - session.ice_driver.find_element_by_link_text( - attr_link_text_value).clear() - session.ice_driver.find_element_by_link_text( - attr_link_text_value).send_keys(typed_text[:-1]) - time.sleep(session.wait_until_time_pause) - session.ice_driver.find_element_by_link_text( - attr_link_text_value).send_keys(typed_text[-1:]) - # If failed - count the failure and add the error to list of errors. - except Exception: - errorMsg = "Failed to type " + typed_text + " in text box" - raise Exception(errorMsg, attr_link_text_value) - - @staticmethod - def date_picker(selector, property_name, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - session.ice_driver.execute_script( - "var element = angular.element(document." + - "querySelector('" + selector + "')); element.scope()." + - property_name + " = new Date('" + - str(datetime.today().isoformat()) + "')") - except Exception as e: - errorMsg = "Failed to select date with datePicker." - raise Exception(errorMsg, str(e)) diff --git a/services/frontend/base_actions/get.py b/services/frontend/base_actions/get.py deleted file mode 100644 index 0eb7959..0000000 --- a/services/frontend/base_actions/get.py +++ /dev/null @@ -1,149 +0,0 @@ - -# ============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 services.frontend.base_actions.wait import Wait -from services.helper import Helper -from services.session import session - - -class Get: - - @staticmethod - def by_id(attr_id_value, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.id(attr_id_value) - return session.ice_driver.find_element_by_id(attr_id_value).text - # If failed - count the failure and add the error to list of errors. - except Exception: - errorMsg = "Failed to get text of element " + attr_id_value - raise Exception(errorMsg, attr_id_value) - - @staticmethod - def by_css(attr_css_value, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.css(attr_css_value) - return session.ice_driver.find_element_by_css_selector( - attr_css_value).text - # If failed - count the failure and add the error to list of errors. - except Exception: - errorMsg = "Failed to get text of element " + attr_css_value - raise Exception(errorMsg, attr_css_value) - - @staticmethod - def wysiwyg_element_by_id(attr_id_value): - try: - Wait.id(attr_id_value) - return session.ice_driver.find_element_by_css_selector( - "#" + attr_id_value + ".wysiwyg-textarea") - # If failed - count the failure and add the error to list of errors. - except Exception: - errorMsg = "Failed to get element by id " + attr_id_value - raise Exception(errorMsg, attr_id_value) - - @staticmethod - def by_name(attr_name_value): - try: - Wait.name(attr_name_value) - return session.ice_driver.find_element_by_name( - attr_name_value).text - # If failed - count the failure and add the error to list of errors. - except Exception: - errorMsg = "Failed to get text of element " + attr_name_value - raise Exception(errorMsg, attr_name_value) - - @staticmethod - def by_xpath(attr_name_value): - try: - Wait.xpath(attr_name_value) - return session.ice_driver.find_element_by_xpath( - attr_name_value).text - # If failed - count the failure and add the error to list of errors. - except Exception: - errorMsg = "Failed to get text of element " + attr_name_value - raise Exception(errorMsg, attr_name_value) - - @staticmethod - def value_by_name(attr_name_value, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.name(attr_name_value) - return session.ice_driver.find_element_by_name( - attr_name_value).get_attribute("value") - except Exception: - errorMsg = "Failed to get value by name:" + attr_name_value - raise Exception(errorMsg, attr_name_value) - - @staticmethod - def meta_order_by_id(attr_id_value): - try: - Wait.id(attr_id_value) - return session.ice_driver.find_element_by_id( - attr_id_value).get_attribute("meta-order") - except Exception: - errorMsg = "Failed to get meta order by id:" + attr_id_value - raise Exception(errorMsg, attr_id_value) - - @staticmethod - def is_selected_by_id(attr_id_value, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.id(attr_id_value) - return session.ice_driver.find_element_by_id( - attr_id_value).is_selected() - except Exception: - errorMsg = "Failed to get if it's selected by id:" + attr_id_value - raise Exception(errorMsg, attr_id_value) - - @staticmethod - def is_checkbox_selected_by_id(attr_id_value, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - Wait.id(attr_id_value) - return Helper.internal_assert_boolean_true_false( - session.ice_driver.find_element_by_id( - attr_id_value).get_attribute("value"), "on") - except Exception: - errorMsg = "Failed to get if it's selected by id:" + attr_id_value - raise Exception(errorMsg, attr_id_value) diff --git a/services/frontend/base_actions/wait.py b/services/frontend/base_actions/wait.py deleted file mode 100644 index 642f0ab..0000000 --- a/services/frontend/base_actions/wait.py +++ /dev/null @@ -1,334 +0,0 @@ - -# ============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. -import time - -from selenium.common.exceptions import NoSuchElementException -from selenium.webdriver.common.by import By -from selenium.webdriver.support import expected_conditions -from selenium.webdriver.support.wait import WebDriverWait - -from services.constants import Constants -from services.logging_service import LoggingServiceFactory -from services.session import session - - -logger = LoggingServiceFactory.get_logger() - - -class Wait: - - @staticmethod - def text_by_xpath(xpath, text, wait_for_page=False): - try: # Wait 4 seconds for element and compare to expected result. - if wait_for_page: - Wait.page_has_loaded() - WebDriverWait( - session.ice_driver, session.wait_until_retires).until( - expected_conditions.text_to_be_present_in_element( - (By.XPATH, xpath), text)) - # If failed - count the failure and add the error to list of errors. - except Exception: - error_msg = "Text - " + text + " not found in xPath " + xpath - raise Exception(error_msg, xpath) - - @staticmethod - def text_by_id(element_id, text, wait_for_page=False): - try: # Wait 4 seconds for element and compare to expected result. - if wait_for_page: - Wait.page_has_loaded() - WebDriverWait( - session.ice_driver, session.wait_until_retires).until( - expected_conditions.text_to_be_present_in_element( - (By.ID, element_id), text)) - # If failed - count the failure and add the error to list of errors. - except Exception: - error_msg = "Text - " + text + " not found in ID " + element_id - raise Exception(error_msg, element_id) - - @staticmethod - def text_by_css(css, text, wait_for_page=False): - try: # Wait 4 seconds for element and compare to expected result. - if wait_for_page: - Wait.page_has_loaded() - WebDriverWait( - session.ice_driver, session.wait_until_retires).until( - expected_conditions.text_to_be_present_in_element( - (By.CSS_SELECTOR, css), text)) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - error_msg = "Text - " + text + " not found in CSS - " + css - raise Exception(error_msg, e) - - @staticmethod - def text_by_name(name, text, wait_for_page=False): - try: # Wait 4 seconds for element and compare to expected result. - if wait_for_page: - Wait.page_has_loaded() - WebDriverWait( - session.ice_driver, session.wait_until_retires).until( - expected_conditions.text_to_be_present_in_element( - (By.NAME, name), text)) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - error_msg = "Text - " + text + " not found by NAME - " + name - raise Exception(error_msg, e) - - @staticmethod - def id(element_id, wait_for_page=False): - try: # Wait 4 seconds for element and compare to expected result. - if wait_for_page: - Wait.page_has_loaded() - WebDriverWait(session.ice_driver, - session.wait_until_retires).until( - expected_conditions.visibility_of_element_located( - (By.ID, element_id)) - ) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - error_msg = "Didn't find ID " + element_id - raise Exception(error_msg, e) - - @staticmethod - def css(element_css, wait_for_page=False): - try: # Wait 4 seconds for element and compare to expected result. - if wait_for_page: - Wait.page_has_loaded() - WebDriverWait( - session.ice_driver, session.wait_until_retires).until( - expected_conditions.visibility_of_element_located( - (By.CSS_SELECTOR, element_css))) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - error_msg = "Didn't find CSS Selector " + element_css - raise Exception(error_msg, e) - - @staticmethod - def is_css_exists(element_css, wait_for_page=False): - try: # Wait 4 seconds for element and compare to expected result. - if wait_for_page: - Wait.page_has_loaded() - WebDriverWait(session.ice_driver, - session.wait_until_implicit_time).until( - expected_conditions.visibility_of_element_located( - (By.CSS_SELECTOR, element_css)) - ) - return True - # If failed - count the failure and add the error to list of errors. - except Exception: - # error_msg = "Didn't find CSS Selector " + element_css - return False - - @staticmethod - def link_text(link_inner_text, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - WebDriverWait( - session.ice_driver, session.wait_until_retires).until( - expected_conditions.visibility_of_element_located( - (By.LINK_TEXT, link_inner_text))) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - error_msg = "Didn't find LINK TEXT " + link_inner_text - raise Exception(error_msg, e) - - @staticmethod - def name(element_name, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - WebDriverWait( - session.ice_driver, session.wait_until_retires).until( - expected_conditions.visibility_of_element_located( - (By.NAME, element_name))) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - error_msg = "Didn't find NAME " + element_name - raise Exception(error_msg, e) - - @staticmethod - def xpath(element_xpath, wait_for_page=False): - try: - if wait_for_page: - Wait.page_has_loaded() - WebDriverWait( - session.ice_driver, session.wait_until_retires).until( - expected_conditions.visibility_of_element_located( - (By.XPATH, element_xpath))) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - error_msg = "Didn't find XPath " + element_xpath - raise Exception(error_msg, e) - - @staticmethod - def page_has_loaded(): - for _ in range(Constants.FEConstants.RETRIES_NUMBER): - try: - httpRequests = session.ice_driver.execute_script( - 'return window.angular ? window.angular.element("body").' + - 'injector().get("$http").pendingRequests.length : 1;') - if(str(httpRequests) == "0"): - time.sleep(session.wait_until_time_pause) - return - logger.debug( - "Checking if {} page is loaded. ".format( - session.ice_driver.current_url)) - time.sleep(session.wait_until_time_pause) - except Exception: - time.sleep(session.wait_until_time_pause) - continue - - raise Exception("Page loading took too much time") - - @staticmethod - def modal_to_dissappear(): - session.ice_driver.implicitly_wait(0) - i = 0 - not_found = False - while i < session.wait_until_retires: - try: - session.ice_driver.find_element_by_css_selector( - Constants.Dashboard.Wizard.Open.CSS) - except NoSuchElementException: - not_found = True - try: - session.ice_driver.find_element_by_class_name( - Constants.Dashboard.Wizard.Open.CLASS_NAME) - not_found = False - except NoSuchElementException: - not_found = True - - if not_found: - break - - else: - time.sleep(session.wait_until_time_pause) - i += 1 - - session.ice_driver.implicitly_wait(session.wait_until_implicit_time) - if not_found: - return True - else: - raise Exception("waitForModalToDissapper") - - @staticmethod - def id_to_dissappear(id_element, wait_for_page=False): - if wait_for_page: - Wait.page_has_loaded() - session.ice_driver.implicitly_wait(0) - i = 0 - not_found = False - while i < session.wait_until_retires: - try: - session.ice_driver.find_element_by_id(id_element) - except NoSuchElementException: - not_found = True - - if not_found: - break - else: - time.sleep(session.wait_until_time_pause) - i += 1 - - session.ice_driver.implicitly_wait(session.wait_until_implicit_time) - if not_found: - return True - else: - raise Exception( - "id_to_dissappear " + - id_element + - " num of retries = " + - str(i)) - - @staticmethod - def name_to_dissappear(name_element, wait_for_page=False): - if wait_for_page: - Wait.page_has_loaded() - session.ice_driver.implicitly_wait(0) - i = 0 - not_found = False - while i < session.wait_until_retires: - try: - session.ice_driver.find_element_by_name(name_element) - except NoSuchElementException: - not_found = True - - if not_found: - break - else: - time.sleep(session.wait_until_time_pause) - i += 1 - - session.ice_driver.implicitly_wait(session.wait_until_implicit_time) - if not_found: - return True - else: - raise Exception( - "name_to_dissappear " + - name_element + - " num of retries = " + - str(i)) - - @staticmethod - def css_to_dissappear(css_element): - session.ice_driver.implicitly_wait(0) - i = 0 - not_found = False - while i < session.wait_until_retires: - try: - session.ice_driver.find_element_by_css_selector(css_element) - except NoSuchElementException: - not_found = True - - if not_found: - break - else: - time.sleep(session.wait_until_time_pause) - i += 1 - - session.ice_driver.implicitly_wait(session.wait_until_implicit_time) - if not_found: - return True - else: - raise Exception("css_to_dissappear" + css_element) - - @staticmethod - def bucket_to_create(bucket_id): - logger.debug("Waiting for %s bucket to be created" % bucket_id) - time.sleep(session.positive_timeout) diff --git a/services/frontend/fe_checklist.py b/services/frontend/fe_checklist.py deleted file mode 100644 index 133c6d1..0000000 --- a/services/frontend/fe_checklist.py +++ /dev/null @@ -1,854 +0,0 @@ - -# ============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 django.conf import settings -from selenium.webdriver.support.ui import Select -from wheel.signatures import assertTrue - -from services.database.db_checklist import DBChecklist -from services.database.db_user import DBUser -from services.database.db_virtual_function import DBVirtualFunction -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.frontend.fe_wizard import FEWizard -from services.helper import Helper -from services.logging_service import LoggingServiceFactory -from services.database.db_general import DBGeneral -from services.constants import Constants -from services.session import session - - -logger = LoggingServiceFactory.get_logger() - - -class FEChecklist: - - assocciatedFileName = None - - @staticmethod - def go_to_checklist(engagement_id, cl_uuid): - try: - Click.id(engagement_id) - Click.id("checklist-" + cl_uuid) - Wait.id("line-item-description") - except Exception as e: - errorMsg = "Failed to go to checklist page." - raise Exception(errorMsg, e) - - @staticmethod - def create_new_checklist(newObj): - try: - newObjWithChecklist = None - vfName = newObj[0] - uuid = newObj[1] - inviteEmail = newObj[2] - # Fetch one AT&T user ID. - vfuuid = DBGeneral.select_where( - "uuid", "ice_vf", "name", vfName, 1) - engagement_id = DBVirtualFunction.select_eng_uuid(vfName) - engLeadEmail = DBUser.select_el_email(vfName) - logger.debug("EL email: " + engLeadEmail) - engagement_manual_id = DBGeneral.select_where( - "engagement_manual_id", "ice_engagement", "uuid", - engagement_id, 1) - # Click on all default next steps - myVfName = engagement_manual_id + ": " + vfName - actualVfNameid = "clickable-" + myVfName - actualVfName = Get.by_id(actualVfNameid) - Helper.internal_assert(myVfName, actualVfName) - # NEXT STEP ID - Click.id(actualVfNameid, wait_for_page=True) - FEOverview.complete_defaults_nextsteps(engagement_id) - inviterURL = Constants.Default.InviteURL.Signup.TEXT + \ - vfuuid + "&inviter_uuid=" + uuid + "&email=" + inviteEmail -# time.sleep(2) - FEGeneral.re_open(inviterURL) - FEGeneral.form_validate_email(inviteEmail) - # Login with EL role - FEGeneral.re_open(Constants.Default.LoginURL.TEXT) - FEUser.login(engLeadEmail, Constants.Default.Password.TEXT) - Wait.id(Constants.Dashboard.Statuses.Title.ID) - Wait.id(engagement_manual_id) # cheklist - # VALIDATE SCROLLING - actualVfName = Get.by_id(actualVfNameid) - myVfName = engagement_manual_id + ": " + vfName -# Wait.id(actualVfNameid) - Wait.id(engagement_manual_id, wait_for_page=True) - Click.id(actualVfNameid, wait_for_page=True) - # Create new checklist - checklistName = FEChecklist.create_checklist( - engagement_id, vfName, actualVfName, engagement_manual_id) - checklistUuid = DBGeneral.select_where( - "uuid", "ice_checklist", "name", checklistName, 1) - newObjWithChecklist = [ - checklistUuid, - engLeadEmail, - engagement_manual_id, - actualVfNameid, - myVfName, - checklistName] - return newObjWithChecklist - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "Failed to create checklist." + str(e) - raise Exception(errorMsg, "create_new_checklist") - - @staticmethod - def create_checklist( - engagement_id, - vfName, - actualVfName, - engagement_manual_id): - try: - checklistName = Helper.rand_string("randomString") - Wait.id("checklist-plus-" + engagement_id, wait_for_page=True) - - Click.id("checklist-plus-" + engagement_id, wait_for_page=True) - - Helper.internal_assert( - "Create Checklist", Get.by_id("modal-header-checklist-15")) - # vm.checkListName - Enter.text_by_name( - "checkListName", checklistName, wait_for_page=True) - Wait.xpath("//select") - - Select( - session.ice_driver.find_element_by_id( - Constants.Template.Subtitle.SelectTemplateTitle.TEXT - )).select_by_visible_text( - Constants.Template.Heat.TEXT) - Click.id(Constants.Template.Heat.TEXT, wait_for_page=True) -# Click.css("option.ng-binding.ng-scope") - Helper.internal_assert( - "Associate Files", - Get.by_id( - "associated-files-title", - wait_for_page=True)) - Click.xpath("//multiselect/div/button", wait_for_page=True) - Click.link_text("file0", wait_for_page=True) - Click.link_text("file1") - Wait.text_by_css(Constants.SubmitButton.CSS, "Create Checklist") - Click.id(Constants.Dashboard.LeftPanel.CreateChecklist.ID) - Wait.modal_to_dissappear() - Wait.id(engagement_manual_id) - return checklistName - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "Failed to create checklist." + str(e) - raise Exception(errorMsg, "create_checklist") - - @staticmethod - def update_cl_name_and_associated_files(engagement_manual_id): - Click.id("edit-checklist", True) - Wait.text_by_id("modal-header-checklist-15", "Update Checklist") - newfileName = "file" + Helper.rand_string("randomString") - Enter.text_by_xpath("//div[3]/div/div/input", newfileName) - updatedFileName = "file2" - # Select associated files from multi-select drop-down. - Click.xpath("//multiselect/div/button") - Click.link_text("file2") - Click.css(Constants.SubmitButton.CSS) - Wait.id(engagement_manual_id) - newFileNames = [newfileName, updatedFileName] - return newFileNames - - @staticmethod - def update_cl_associated_files(engagement_manual_id): - Click.id("edit-checklist", True) - Wait.text_by_id("modal-header-checklist-15", "Update Checklist") - # Select associated files from multi-select drop-down. - Click.xpath("//multiselect/div/button") - Click.link_text("file2") - Click.xpath("//multiselect/div/button") - Click.css(Constants.SubmitButton.CSS) - Wait.id(engagement_manual_id, True) - - @staticmethod - def add_next_step(checklistName, newObj): - Click.id(Constants.Dashboard.Checklist.AddNS.ID, wait_for_page=True) - Wait.text_by_css("span.font_header", "Checklist:") - Helper.internal_assert("Checklist:", Get.by_css("span.font_header")) - Helper.internal_assert("Add Next Steps", Get.by_css("h2")) - # First NS - Click.id("description") - Enter.text_by_id("description", "description of NS") - Click.css("div.modal-content") - Click.xpath("(//button[@type='button'])[10]") - FEChecklist.assocciatedFileName = "file0" - Click.link_text(FEChecklist.assocciatedFileName) - Click.css("div.modal-content") - Click.xpath("(//button[@type='button'])[11]") - try: - Click.xpath("//div[3]/multiselect/div/ul/li/a") - except BaseException: - Click.link_text("Homer Simpson") - Click.css("div.modal-content") - count = 0 - FEWizard.date_picker_add_ns(count) - count = +1 - Click.css("span.add-text") - Click.xpath("(//div[@id='description'])[2]") - Enter.text_by_xpath( - "(//div[@id='description'])[2]", "description of NS2") - Click.css("div.modal-content") - Click.xpath("(//button[@type='button'])[14]") - Click.xpath("(//button[@type='button'])[22]") - Click.xpath("//div[3]/div/div[2]/multiselect/div/ul/li[2]/a") - Click.css("div.modal-content") - Click.xpath("(//button[@type='button'])[23]") - Click.css( - "div.btn-group.open > ul.dropdown-menu > " + - "li.ng-scope > a.ng-binding") - Click.link_text("Add Another Next Step") - Click.xpath("(//button[@type='button'])[25]") - FEWizard.date_picker_add_ns(count) - Click.xpath("//div[4]/div/span") - Helper.internal_assert("Submit Next Steps", Get.by_id("btn-submit")) - Click.id("btn-submit", wait_for_page=True) - - @staticmethod - def add_next_step_updated(checklistName, newFileName): - Click.id(Constants.Dashboard.Checklist.AddNS.ID) - Wait.id(Constants.Dashboard.Modal.CLOSE_BUTTON_ID) - Wait.text_by_css("span.font_header.ng-binding", "Checklist:") - Wait.text_by_css("h2.ng-binding", "Add Next Steps") - # First NS - Click.id("description") - Enter.text_by_id("description", "description of NS") - Click.css("div.modal-content") - Click.xpath("(//button[@type='button'])[10]") - Click.link_text(newFileName) - Click.css("div.modal-content") - Click.xpath("(//button[@type='button'])[11]") - try: - Click.xpath("//div[3]/multiselect/div/ul/li/a") - except BaseException: - Wait.link_text("Homer Simpson") - Click.link_text("Homer Simpson") - Wait.css("div.modal-content") - Click.css("div.modal-content") - Wait.xpath("(//button[@type='button'])[12]") - count = 0 - FEWizard.date_picker_add_ns(count) - count = +1 - Click.css("span.add-text") - Click.xpath("(//div[@id='description'])[2]") - Enter.text_by_xpath( - "(//div[@id='description'])[2]", "description of NS2") - Click.css("div.modal-content") - Click.xpath("(//button[@type='button'])[14]") - Click.xpath("(//button[@type='button'])[22]") - Click.xpath("//div[3]/div/div[2]/multiselect/div/ul/li[2]/a") - Click.css("div.modal-content") - Click.xpath("(//button[@type='button'])[23]") - Click.css( - "div.btn-group.open > ul.dropdown-menu > " + - "li.ng-scope > a.ng-binding") - Click.link_text("Add Another Next Step") - Wait.xpath("(//button[@type='button'])[25]") - Click.xpath("(//button[@type='button'])[25]") - Wait.xpath("(//button[@type='button'])[24]") - FEWizard.date_picker_add_ns(count) - Wait.xpath("//div[4]/div/span") - Click.xpath("//div[4]/div/span") - Wait.id("btn-submit") - Wait.text_by_id("btn-submit", "Submit Next Steps") - Click.id("btn-submit") - - @staticmethod - def approval_state_actions_and_validations(checklistName, newObj, state): - # REWVIEW STEPS AND VALIDATIONS - try: - Wait.id("checklist-main-section") - Wait.text_by_id( - Constants.Dashboard.Checklist.Name.ID, checklistName) - try: - if settings.DATABASE_TYPE == 'local': - Wait.text_by_css( - "h2.ng-binding", "Section 1: Parameter Specification") - Helper.internal_assert( - "Parameters", Get.by_css("span.col-md-9.ng-binding")) - Helper.internal_assert( - "String parameters", Get.by_xpath("//li[2]/span[2]")) - Helper.internal_assert( - "Numeric parameters", Get.by_xpath("//li[3]/span[2]")) - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Section 2: External References", - Get.by_xpath("//li[2]/h2")) - Helper.internal_assert( - "Normal references", - Get.by_xpath("//li[2]/ul/li/span[2]")) - Helper.internal_assert( - "VF image", Get.by_xpath("//li[2]/ul/li[2]/span[2]")) - except BaseException: - if settings.DATABASE_TYPE == 'local': - Wait.text_by_css( - "h2.ng-binding", "Section 1: External References") - try: - Helper.internal_assert( - "Normal references", Get.by_css( - "span.col-md-9.ng-binding")) - except BaseException: - if "VF image" in Get.by_xpath("//li[2]/span[2]"): - logger.debug("All Ok") - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Section 2: Parameter Specification", - Get.by_xpath("//li[2]/h2")) - try: - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "1.1 - Parameters", Get.by_xpath("//header/h2")) - except BaseException: - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "1.1 - Normal References", Get.by_xpath("//header/h2")) - if settings.DATABASE_TYPE == 'local': - elementTxt = Get.by_id("line-item-description") - Helper.internal_assert( - "Numeric parameters should include " + - "range and/or allowed values.", elementTxt) - Helper.internal_assert("Audit Logs", Get.by_css("h3.col-md-12")) - localLogText = "local log" - Enter.text_by_id("new-audit-log-text", localLogText) - Helper.internal_assert( - "Add Log Entry", Get.by_id("submit-new-audit-lop-text")) - Click.id("submit-new-audit-lop-text") - vfName = newObj[0] - DBUser.get_el_name(vfName) - Helper.internal_assert(localLogText, Get.by_css( - Constants.Dashboard.Checklist.AuditLog.LastLocalAuditLog.CSS)) - try: - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Parameters", Get.by_xpath("//li[2]/ul/li/span[2]")) - except BaseException: - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Numeric parameters", - Get.by_xpath("//li[2]/ul/li/span[2]")) - - session.run_negative( - lambda: Wait.css( - Constants.Dashboard.Checklist.LineItem.Deny.CSS - ) or Wait.css( - Constants.Dashboard.Checklist.LineItem.Approve.CSS), - "Buttons displayed for Admin it's NOT work") - if state == "APPROVAL": - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Audit Log (6)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - else: - Helper.internal_assert( - "Audit Log (7)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - if state == "HANDOFF": - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Audit Log (8)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - else: - Helper.internal_assert( - "Audit Log (9)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - Click.id(Constants.Dashboard.Checklist.AuditLog.ID) - Wait.text_by_xpath("//span[2]", checklistName) - DBUser.select_el_email(vfName) - Enter.text_by_xpath("//textarea", "zdfgsdyh") - Click.css(Constants.SubmitButton.CSS) - Wait.modal_to_dissappear() - if state == "APPROVAL": - if settings.DATABASE_TYPE == 'local': - Wait.text_by_id( - Constants.Dashboard.Checklist.AuditLog.ID, - "Audit Log (7)") - else: - Wait.text_by_id( - Constants.Dashboard.Checklist.AuditLog.ID, - "Audit Log (8)") - if state == "HANDOFF": - if settings.DATABASE_TYPE == 'local': - Wait.text_by_id( - Constants.Dashboard.Checklist.AuditLog.ID, - "Audit Log (9)") - else: - Wait.text_by_id( - Constants.Dashboard.Checklist.AuditLog.ID, - "Audit Log (10)") - if state == "APPROVAL": - Wait.text_by_xpath("//button[3]", "Add Next Steps") - Wait.text_by_id( - Constants.Dashboard.Checklist.Reject.ID, - Constants.Dashboard.Checklist.Reject.Modal.Button.TEXT) - Wait.text_by_xpath( - "//div[@id='state-actions']/button", "Approve") - if state == "HANDOFF": - Wait.text_by_xpath( - "//div[@id='state-actions']/button", "Handoff complete?") - logger.debug("ALL VALIDATION PASS FOR STATE : " + state) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - logger.error( - state + - " state FAILED CONNECT TO STAGING MANUAL AND VERIFY WHY! ") - errorMsg = "approval_state_actions_and_validations " +\ - "FAILED because : " + str(e) - raise Exception(errorMsg, "approval_state_actions_and_validations") - - @staticmethod - def review_state_actions_and_validations(checklistName, vfName, state): - try: - # REWVIEW STEPS AND VALIDATIONS - Wait.id("checklist-main-section") - Wait.text_by_id( - Constants.Dashboard.Checklist.Name.ID, checklistName) - try: - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Section 1: Parameter Specification", - Get.by_css("h2.ng-binding")) - Helper.internal_assert( - "Parameters", Get.by_css("span.col-md-9.ng-binding")) - Helper.internal_assert( - "String parameters", Get.by_xpath("//li[2]/span[2]")) - Helper.internal_assert( - "Numeric parameters", Get.by_xpath("//li[3]/span[2]")) - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Section 2: External References", - Get.by_xpath("//li[2]/h2")) - Helper.internal_assert( - "Normal references", Get.by_name("Normal references")) - Helper.internal_assert( - "VF image", Get.by_name("Normal references")) - except BaseException: - try: - Helper.internal_assert( - "Section 1: External References", - Get.by_css("h2.ng-binding")) - except BaseException: - Helper.internal_assert( - "Section 1: Scaling Considerations", - Get.by_css("h2.ng-binding")) - try: - Helper.internal_assert( - "Normal references", - Get.by_css("span.col-md-9.ng-binding")) - except BaseException: - if "VF image" in Get.by_xpath("//li[2]/span[2]"): - logger.debug("All Ok") - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Section 2: Parameter Specification", - Get.by_xpath("//li[2]/h2")) - Click.name("VF image") - Click.name("Normal references") - try: - Helper.internal_assert( - "1.1 - Parameters", Get.by_xpath("//header/h2")) - except BaseException: - text = Get.by_name("Normal references") - Helper.internal_assert("Normal references", text) - Helper.internal_assert("Audit Logs", Get.by_css("h3.col-md-12")) - localLogText = "local log" - Enter.text_by_id("new-audit-log-text", localLogText) - Helper.internal_assert( - "Add Log Entry", Get.by_id("submit-new-audit-lop-text")) - Click.id("submit-new-audit-lop-text") - # Validate Local AuditLog - engLeadFullName = DBUser.get_el_name(vfName) - Helper.internal_assert( - engLeadFullName, - Get.by_xpath("//ul[@id='audit-log-list']/li/h4")) - Helper.internal_assert(localLogText, Get.by_css( - Constants.Dashboard.Checklist.AuditLog.LastLocalAuditLog.CSS)) - if settings.DATABASE_TYPE == 'local': - try: - Helper.internal_assert( - "Parameters", Get.by_xpath("//li[2]/ul/li/span[2]")) - except BaseException: - Helper.internal_assert( - "Numeric parameters", - Get.by_xpath("//li[2]/ul/li/span[2]")) - Click.name("Normal references") - Wait.css(Constants.Dashboard.Checklist.LineItem.Deny.CSS) - Wait.css(Constants.Dashboard.Checklist.LineItem.Approve.CSS) - Click.css(Constants.Dashboard.Checklist.LineItem.Approve.CSS) - # NOT LOCAL - if settings.DATABASE_TYPE != 'local': - checklistUuid = DBChecklist.get_recent_checklist_uuid( - checklistName)[0] - DBChecklist.update_all_decisions_to_approve(checklistUuid) - # NOT LOCAL - - Click.css(".line-item-row span.manual") - print("click on V button approve of decision in state = " + state) - try: - Wait.css("li.not-relevant-btn") - except BaseException: - Wait.xpath("//aside/header/ul/li") - if state == "review": - Wait.id("edit-checklist") - if state == "PEER": - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Audit Log (4)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - else: - Helper.internal_assert( - "Audit Log (5)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - if state == "review": - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Audit Log (2)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - else: - Helper.internal_assert( - "Audit Log (3)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - if state == "APPROVAL": - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Audit Log (8)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - else: - Helper.internal_assert( - "Audit Log (9)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - Click.id( - Constants.Dashboard.Checklist.AuditLog.ID, wait_for_page=True) - Wait.text_by_xpath("//span[2]", checklistName) - Enter.text_by_xpath("//textarea", "zdfgsdyh") - Click.css(Constants.SubmitButton.CSS) - Wait.modal_to_dissappear() - if state == "review": - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Audit Log (3)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - else: - Helper.internal_assert( - "Audit Log (4)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - if state == "PEER": - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Audit Log (5)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - else: - Helper.internal_assert( - "Audit Log (6)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - if state == "APPROVAL": - if settings.DATABASE_TYPE == 'local': - Helper.internal_assert( - "Audit Log (9)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - else: - Helper.internal_assert( - "Audit Log (10)", Get.by_id( - Constants.Dashboard.Checklist.AuditLog.ID)) - # Validate Buttons - if settings.DATABASE_TYPE != 'local': - FEGeneral.refresh() - engagement_id = DBVirtualFunction.select_eng_uuid(vfName) - engLeadEmail = DBUser.select_el_email(vfName) - logger.debug("EL email: " + engLeadEmail) - engagement_manual_id = DBGeneral.select_where( - "engagement_manual_id", "ice_engagement", "uuid", - engagement_id, 1) - # Click on all default next steps - myVfName = engagement_manual_id + ": " + vfName - actualVfNameid = "clickable-" + myVfName - Click.id(actualVfNameid) - Click.id("checklist-" + checklistUuid) - Helper.internal_assert( - "Add Next Steps", Get.by_xpath("//button[3]")) - Wait.text_by_id( - Constants.Dashboard.Checklist.Reject.ID, - Constants.Dashboard.Checklist.Reject.Modal.Button.TEXT, - wait_for_page=True) - Helper.internal_assert( - "Approve", Get.by_xpath("//div[@id='state-actions']/button")) - logger.debug("ALL VALIDATION PASS FOR STATE: " + state) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "review_state_actions_and_validations " +\ - "FAILED because: " + str(e) - raise Exception(errorMsg, "review_state_actions_and_validations") - logger.error( - state + - " state FAILED CONNECT TO STAGING MANUAL AND VERIFY WHY!") - raise - - @staticmethod - def reject(rejectMsg=None): - try: - Click.id( - Constants.Dashboard.Checklist.Reject.ID, wait_for_page=True) - if rejectMsg: - Enter.text_by_name( - Constants.Dashboard.Checklist.Reject.Modal.Comment.NAME, - rejectMsg, - wait_for_page=True) - Click.id( - Constants.Dashboard.Checklist.Reject.Modal.Button.ID, - wait_for_page=True) - except Exception as e: - errorMsg = "Failed to reject checklist." - raise Exception(errorMsg, e) - - @staticmethod - def add_line_item_audit_log(): - try: - log_txt = Helper.rand_string("randomString") - Enter.text_by_id("new-audit-log-text", log_txt, wait_for_page=True) - Click.id("submit-new-audit-lop-text") - Wait.text_by_css( - Constants.Dashboard.Checklist.AuditLog.LastLocalAuditLog.CSS, - log_txt, - wait_for_page=True) - return log_txt - except Exception as e: - errorMsg = "Failed to add audit log to line item." - raise Exception(errorMsg, e) - - @staticmethod - def click_on_checklist(user_content, checklistName, checklist_uuid=None): - FEOverview.click_on_vf(user_content) - if checklist_uuid is None: - checklist_uuid = DBGeneral.select_where_not_and_order_by_desc( - 'uuid', - Constants.DBConstants.IceTables.CHECKLIST, - 'name', - checklistName, - 'state', - Constants.ChecklistStates.Archive.TEXT, - 'create_time')[0] - Click.id("checklist-" + checklist_uuid, True) - - @staticmethod - def validate_reject_is_enabled(): - return Wait.id( - Constants.Dashboard.Checklist.Reject.ID, - wait_for_page=True) - - @staticmethod - def cl_to_next_stage(actualVfNameid): - Click.xpath("//div[@id='state-actions']/button", wait_for_page=True) - Wait.id(actualVfNameid, wait_for_page=True) - session.run_negative(lambda: Wait.css( - Constants.Default.BlockUI.CSS), "Error: CL to next stage failed.") - - @staticmethod - def search_by_vfname_for_not_local(user_content): - vfFullName = user_content[ - 'engagement_manual_id'] + ": " + user_content['vfName'] - if settings.DATABASE_TYPE != 'local': - Enter.text_by_id( - Constants.Dashboard.LeftPanel.SearchBox.ID, - user_content['vfName']) - Click.css(Constants.Dashboard.LeftPanel.SearchBox.Results.CSS) - Wait.text_by_id( - Constants.Dashboard.Overview.Title.ID, vfFullName) - - @staticmethod - def search_by_manual_id(manual_id): - Enter.text_by_id( - Constants.Dashboard.LeftPanel.SearchBox.ID, - manual_id, - wait_for_page=True) - Click.css( - Constants.Dashboard.LeftPanel.SearchBox.Results.CSS, - wait_for_page=True) - Wait.id(Constants.Dashboard.Overview.Title.ID) - - @staticmethod - def reject_checklist(newObj, checklistName): - Click.xpath("//button[2]") - vfName = newObj[0] - engLeadFullName = DBUser.get_el_name(vfName) - Enter.text_by_name( - Constants.Dashboard.Checklist.Reject.Modal.Comment.NAME, - "Reject state By :" + engLeadFullName) - Helper.internal_assert( - "Checklist: " + checklistName, - Get.by_css("span.state-title.ng-binding")) - Wait.text_by_id(Constants.Dashboard.Checklist.Reject.Modal.Button.ID, - Constants.Dashboard.Checklist.Reject.Modal.Button.TEXT) - Click.id(Constants.Dashboard.Checklist.Reject.Modal.Button.ID) - Wait.modal_to_dissappear() - - @staticmethod - def add_nsteps( - checklistUuid, - actualVfNameid, - myVfName, - checklistName, - newFileNames): - Click.id(actualVfNameid, wait_for_page=True) - checklistUuid = DBChecklist.select_where_cl_not_archive( - "uuid", "ice_checklist", "name", newFileNames[0], 1) - Click.id("checklist-" + checklistUuid, wait_for_page=True) - Wait.text_by_id(Constants.Dashboard.Checklist.Name.ID, newFileNames[0]) - FEChecklist.add_next_step_updated(checklistName, newFileNames[1]) - # vALIDATE SCROLLING - actualVfNameid = "clickable-" + myVfName - actualVfName = Get.by_id(actualVfNameid, wait_for_page=True) - if actualVfName != '': - Helper.internal_assert(myVfName, actualVfName) - - @staticmethod - def validate_multi_eng( - user_content, - checklist_content, - newEL_content, - actualVfNameid): - query = "UPDATE ice_user_profile SET role_id=2 WHERE email = '" + \ - str(newEL_content['email']) + "';" - DBGeneral.update_by_query(query) - FEWizard.invite_team_members_modal(newEL_content['email']) - # Fetch one AT&T user ID. - enguuid = DBGeneral.select_where( - "uuid", - "ice_engagement", - "engagement_manual_id", - user_content['engagement_manual_id'], - 1) - invitation_token = DBUser.select_invitation_token( - "invitation_token", - "ice_invitation", - "engagement_uuid", - enguuid, - newEL_content['email'], - 1) - URL = Constants.Default.InviteURL.Login.TEXT + invitation_token - FEGeneral.re_open(URL) - FEUser.login( - newEL_content['email'], - Constants.Default.Password.TEXT, - expected_element=actualVfNameid) - Click.id(actualVfNameid, wait_for_page=True) - count = None - try: - session.ice_driver.find_element_by_id( - "checklist-" + checklist_content['uuid']) - count += 1 - except BaseException: - logger.debug( - "check list not visible for EL invited : " + - str(newEL_content['email'])) - assertTrue(count is None) - query = "UPDATE ice_user_profile SET role_id=1 WHERE email = '" + \ - str(newEL_content['email']) + "';" - DBGeneral.update_by_query(query) - - @staticmethod - def create_cl_without_files(user_content): - FEOverview.click_on_vf(user_content) - Click.id("checklist-plus-" + user_content['engagement_uuid']) - Wait.id(Constants.Dashboard.Modal.CLOSE_BUTTON_ID) - checklistName = "NoAssociatedFiles" + \ - Helper.rand_string("randomString") - Enter.text_by_name("checkListName", checklistName) - Wait.xpath("//select") - if settings.DATABASE_TYPE == 'local': - Select(session.ice_driver.find_element_by_xpath("//select") - ).select_by_visible_text(Constants.Template.Heat.TEXT) - else: - Click.xpath("//select") - Click.xpath("//option[2]") - Click.id(Constants.Dashboard.LeftPanel.CreateChecklist.ID) - Wait.text_by_id(Constants.Dashboard.Checklist.Name.ID, checklistName) - - @staticmethod - def validate_audit_log(log_txt): - audit_log_list_text = Get.by_id( - Constants.Dashboard.Checklist.AuditLog.AuditLogList.ID, - wait_for_page=True) - try: - log_txt in audit_log_list_text - logger.debug("validate_audit_log PASS") - except Exception: - errorMsg = "Failed in validate_audit_log" - raise Exception(errorMsg) - - @staticmethod - def get_to_create_new_ns_modal(): - Click.id(Constants.Dashboard.Checklist.AddNS.ID, - wait_for_page=True) - Wait.text_by_css(Constants.Dashboard.Checklist.AddNS.CSS, - Constants.Dashboard.Checklist.TITLE) - Helper.internal_assert(Constants.Dashboard.Checklist.TITLE, Get.by_css( - Constants.Dashboard.Checklist.AddNS.CSS)) - Helper.internal_assert( - Constants.Dashboard.Checklist.AddNS.TITLE, - Get.by_css(Constants.FEGeneral.CSS.H2)) - - @staticmethod - def get_to_create_new_ns_modal_via_overview(): - Click.id(Constants.Dashboard.Overview.NextSteps.Add.ID, - wait_for_page=True) - Wait.text_by_css(Constants.Dashboard.Checklist.AddNS.CSS, - Constants.Dashboard.Overview.NextSteps.Add.TITLE) - Helper.internal_assert( - Constants.Dashboard.Checklist.AddNS.TITLE, - Get.by_css(Constants.FEGeneral.CSS.H2)) - - @staticmethod - def get_jenkins_log(): - Click.id(Constants.Dashboard.Checklist.JenkinsLog.ID, True) - Wait.text_by_id( - Constants.Dashboard.Checklist.JenkinsLog.Modal.Title.ID, - Constants.Dashboard.Checklist.JenkinsLog.Modal.Title.TEXT, True) - log = Get.by_id( - Constants.Dashboard.Checklist.JenkinsLog.Modal.Body.ID, True) - Helper.assertTrue( - Constants.Dashboard.Checklist.JenkinsLog.Modal.Body. - TEXT_SAMPLE in log, - "Jenkins log could not be viewed.") - Click.id(Constants.Dashboard.Modal.CLOSE_BUTTON_ID) - return log diff --git a/services/frontend/fe_checklist_template.py b/services/frontend/fe_checklist_template.py deleted file mode 100644 index 09a497f..0000000 --- a/services/frontend/fe_checklist_template.py +++ /dev/null @@ -1,331 +0,0 @@ - -# ============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.common.action_chains import ActionChains - -from services.api.api_virtual_function import APIVirtualFunction -from services.constants import Constants -from services.database.db_checklist import DBChecklist -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_checklist import FEChecklist -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 FEChecklistTemplate: - - @staticmethod - def basic_admin_navigation(): - FEUser.login( - Constants.Users.Admin.EMAIL, Constants.Default.Password.TEXT) - FEUser.go_to_admin() - - @staticmethod - def click_on_template_name_on_navigation(template_name, text): - Wait.text_by_name(template_name, text, wait_for_page=True) - Click.name(template_name, wait_for_page=True) - - @staticmethod - def click_on_save_and_assert_success_msg(): - Click.id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.SAVE_BTN_ID, - wait_for_page=True) - Click.id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.APPROVE_BTN_ID, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.SUCCESS_ID, - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.SUCCESS_SAVE_MSG) - - @staticmethod - def click_on_disabled_save_and_assert_for_promp_msg(): - Click.id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.SAVE_BTN_ID) - session.run_negative( - lambda: Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.APPROVE_BTN_ID), - "Ooops modal window is opened although 'Save' " + - "button should have been disabled") - - @staticmethod - def save_with_no_changes(): - Wait.text_by_id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.SAVE_BTN_ID, - Constants.Dashboard.LeftPanel.EditChecklistTemplate.SAVE_BTN) - Click.id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.SAVE_BTN_ID, - wait_for_page=True) - Wait.text_by_name( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.HEAT, - Constants.Dashboard.LeftPanel.EditChecklistTemplate.HEAT) - Wait.text_by_id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.APPROVE_BTN_TITLE_ID, - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.APPROVE_BTN_TITLE_TEXT) - Wait.text_by_id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.APPROVE_BTN_ID, - "Yes") - Click.id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.APPROVE_BTN_ID, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.SUCCESS_ID, - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.CL_TEMPLATE_SAVED_TXT) - - @staticmethod - def discard_checklist_after_modification(): - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_SECTION_ID, - wait_for_page=True) - Enter.text_by_id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_SECTION_INPUT_ID, - "ttttttt", - wait_for_page=True) - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_SECTION_ID) - Click.id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.REJECT_BTN_ID) - Click.id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.APPROVE_BTN_ID, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.SUCCESS_ID, - "All changes discarded.") - - @staticmethod - def edit_template_and_save(): - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_SECTION_ID) - Enter.text_by_id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_SECTION_INPUT_ID, - "Ros Is My Mentor") - FEChecklistTemplate.click_on_save_and_assert_success_msg() - - @staticmethod - def del_lineitem_and_save(): - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_SECTION_ID, - wait_for_page=True) - Enter.text_by_id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_SECTION_INPUT_ID, - "Ros Is My Mentor", - wait_for_page=True) - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_SECTION_ID) - FEChecklistTemplate.click_on_save_and_assert_success_msg() - - @staticmethod - def add_lineitem_and_save(): - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.ADD_LINE_ITEM_BTN, - wait_for_page=True) - Click.xpath("//li[@id='select-lineitem-btn-0.1']/span[2]") - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_BTN) - Enter.text_by_id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_NAME, - "xxx") - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_BTN, - wait_for_page=True) - FEChecklistTemplate.click_on_save_and_assert_success_msg() - - @staticmethod - def edit_description_lineitem_and_save(): - desc = Helper.rand_string("randomString") - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_LINE_ITEM_ID) - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_BTN) - Enter.text_by_id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_NAME, - Helper.rand_string("randomString")) - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_DESC) - editor_element = Get.wysiwyg_element_by_id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.LINE_ITEM_DESC_TEXT_BOX) - editor_element.clear() - editor_element.send_keys(desc) - Wait.page_has_loaded() - actionChains = ActionChains(session.ice_driver) - actionChains.double_click(editor_element).perform() - Wait.page_has_loaded() - Click.xpath( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.WYSIWYG_BUTTON_BOLD) - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_BTN, - wait_for_page=True) - isBold = Wait.is_css_exists("b") - while not isBold: - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_BTN, - wait_for_page=True) - actionChains.double_click(editor_element).perform() - Click.xpath( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.WYSIWYG_BUTTON_BOLD, - wait_for_page=True) - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_BTN, - wait_for_page=True) - isBold = Wait.is_css_exists("b") - if isBold: - FEChecklistTemplate.click_on_save_and_assert_success_msg() - FEGeneral.refresh() - Click.name( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.HEAT, - wait_for_page=True) - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_LINE_ITEM_ID, - wait_for_page=True) - Wait.css("b") - Wait.text_by_css("b", desc, wait_for_page=True) - - @staticmethod - def rollback_add_lineitem_and_save(): - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.DELETE_LINE_ITEM) - FEChecklistTemplate.click_on_save_and_assert_success_msg() - FEChecklistTemplate.rollback_to_heat_teampleate() - - @staticmethod - def add_lineitem_and_check_db(): - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_SECTION_ID) - Enter.text_by_id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.FIRST_SECTION_INPUT_ID, - "Ros Is My Mentor") - FEChecklistTemplate.click_on_save_and_assert_success_msg() - result = DBChecklist.checkChecklistIsUpdated() - Helper.internal_not_equal(result, None) - - @staticmethod - def check_cl_after_lineitem_added(): - template_name = Constants.Dashboard.LeftPanel.\ - EditChecklistTemplate.HEAT - user_content = APIVirtualFunction.create_engagement() - FEUser.login( - Constants.Users.Admin.EMAIL, Constants.Default.Password.TEXT) - vfName = user_content['vfName'] - engagement_id = DBChecklist.fetchEngByVfName(vfName) - engLeadEmail = DBUser.select_el_email(vfName) - engagement_manual_id = DBChecklist.fetchEngManIdByEngUuid( - engagement_id) - FEOverview.click_on_vf(user_content) - FEGeneral.re_open(Constants.Default.LoginURL.TEXT) - FEUser.login( - engLeadEmail, - Constants.Default.Password.TEXT, - engagement_manual_id) - Click.id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.DASHBOARD_ID) - Enter.text_by_id( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.SEARCH_ENG_ID, - vfName) - Click.id("test_" + vfName) - checklistName = FEChecklist.create_checklist( - engagement_id, vfName, None, engagement_manual_id) - FEUser.go_to_admin() - result = DBChecklist.fetchChecklistByName(checklistName) - FEUser.go_to_admin() - FEChecklistTemplate.click_on_template_name_on_navigation( - Constants.Dashboard.LeftPanel.EditChecklistTemplate.HEAT, - template_name) - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_BTN) - Enter.text_by_id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_NAME, - "test_lineitem_added_and_audit_log_on_dupl_cl-NAME") - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.EDIT_LINE_ITEM_BTN) - FEChecklistTemplate.click_on_save_and_assert_success_msg() - Click.id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.DASHBOARD_ID) - Enter.text_by_id( - Constants.Dashboard.LeftPanel. - EditChecklistTemplate.SEARCH_ENG_ID, - vfName) - Click.id("test_" + vfName) - Click.id("checklist-" + str(result)) - Helper.internal_assert( - "1. automation", - session.ice_driver.find_element_by_xpath("//li[@id='']").text) diff --git a/services/frontend/fe_cms.py b/services/frontend/fe_cms.py deleted file mode 100644 index 168a09a..0000000 --- a/services/frontend/fe_cms.py +++ /dev/null @@ -1,179 +0,0 @@ - -# ============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 services.constants import Constants -from services.database.db_cms import DBCMS -from services.frontend.base_actions.click import Click -from services.frontend.base_actions.enter import Enter -from services.frontend.base_actions.wait import Wait -from services.frontend.fe_dashboard import FEDashboard -from services.frontend.fe_user import FEUser -from services.logging_service import LoggingServiceFactory -from services.session import session - - -logger = LoggingServiceFactory.get_logger() - - -class FECms: - - @staticmethod - def validate_5_last_announcement_displayed( - listOfTitleAnDescriptions, user_content, last_title): - last_description = listOfTitleAnDescriptions[ - len(listOfTitleAnDescriptions) - 1][1] - Wait.text_by_id(Constants.Toast.CMS_ID, last_title + ".") - FEDashboard.open_announcement() - Wait.text_by_id(Constants.Cms.Toast_title_id, last_title) - Wait.text_by_id(Constants.Cms.Toast_description, last_description) - DBCMS.update_X_days_back_post(last_title, xdays=3) - Click.id(Constants.Cms.Test_addDT_close_modal_button) - FEUser.logout() - # Validate Announcement TOAST not displayed - FEUser.login(user_content['email'], Constants.Default.Password.TEXT) - session.run_negative( - lambda: Wait.text_by_id( - Constants.Cms.Toast_title_id, - last_title), - "Last Announcement displayed in News & Announcements sections %s" % - last_title) - - @staticmethod - def validate_grandchild_page( - parent_title, - child_title, - grand_child_title, - description): - Click.id(Constants.Cms.Documentation) - Click.id(parent_title) - Click.id(child_title) - Click.id(grand_child_title) - Wait.text_by_id("center-" + grand_child_title, grand_child_title) - page_id = DBCMS.get_last_inserted_page_id() - Wait.text_by_id(page_id, description) - - @staticmethod - def announcement_validate_toast(title, description, user_content): - Wait.text_by_id(Constants.Toast.CMS_ID, title + ".") - FEDashboard.open_announcement() - Wait.text_by_id(Constants.Cms.Toast_title_id, title) - Wait.text_by_id(Constants.Cms.Toast_description, description) - Click.id(Constants.Cms.Test_addDT_close_modal_button) - Click.css("button.close") - FEUser.logout() - FEUser.login(user_content['email'], Constants.Default.Password.TEXT) - # Validate Announcement displayed in News & Announcements sections - session.run_negative(lambda: FEDashboard.open_announcement( - ), "Announcement toast disappear after 2 days %s" % title) - Wait.text_by_id(title, title) - Wait.text_by_id(description, description) - - @staticmethod - def search_documentation_title(title, user_content): - FEDashboard.open_documentation(title) - Wait.text_by_id(title, title) - logger.debug("Search Documentation by title") - Enter.text_by_id( - Constants.Cms.SearchDocumentation, - title, - wait_for_page=True) - Wait.text_by_id(title, title) - Click.id(title, wait_for_page=True) - Wait.text_by_id(title, title) - logger.debug("Documentation found (searched by title)") - - @staticmethod - def search_documentation_content(title, content): - FEDashboard.open_documentation(title) - Wait.text_by_id(title, title) - logger.debug("Search Documentation by content") - Enter.text_by_id( - Constants.Cms.SearchDocumentation, - content, - wait_for_page=True) - Wait.text_by_id(title, title) - Click.id(title, wait_for_page=True) - Wait.text_by_css(Constants.Cms.DocumentationPageContent, content) - logger.debug("Documentation found (searched by content)") - - @staticmethod - def validate_expired_post_Announcement(email, title, description): - title2 = Constants.Toast.TEXT + title + "." - Wait.text_by_id( - Constants.Toast.CMS_ID, title2, True) - FEDashboard.open_announcement() - Wait.text_by_id(Constants.Cms.Toast_title_id, title) - Wait.text_by_id(Constants.Cms.Toast_description, description) - DBCMS.update_X_days_back_post(title, xdays=3) - Click.id(Constants.Cms.Test_addDT_close_modal_button) - FEUser.logout() - FEUser.login(email, Constants.Default.Password.TEXT) - session.run_negative( - lambda: Wait.text_by_id( - Constants.Toast.CMS_ID, - title2), - "Announcement toast not disappear after 2 days %s" % - title) - - @staticmethod - def validate_page(title, description): - Click.id(Constants.Cms.Documentation) - Click.id(title) - Wait.text_by_id("center-" + title, title) - page_id = DBCMS.get_last_inserted_page_id() - Wait.text_by_id(page_id, description) - - @staticmethod - def validate_FAQ(description): - Wait.text_by_id(Constants.Cms.Tooltip_title, "Did you know?", True) - Wait.text_by_id(Constants.Cms.Tooltip_description, description, True) - - @staticmethod - def validate_news(title, description): - Wait.text_by_id(title, title) - Wait.text_by_id(description, description) - Click.id(title) - Wait.text_by_id(Constants.Cms.Toast_title_id, title) - Wait.text_by_id(Constants.Cms.Toast_description, description) - - @staticmethod - def validae_announcement(title, description): - Wait.text_by_id(Constants.Toast.CMS_ID, title + ".") - FEDashboard.open_announcement() - Wait.text_by_id(Constants.Cms.Toast_title_id, title) - Wait.text_by_id(Constants.Cms.Toast_description, description) diff --git a/services/frontend/fe_dashboard.py b/services/frontend/fe_dashboard.py deleted file mode 100644 index cb845cc..0000000 --- a/services/frontend/fe_dashboard.py +++ /dev/null @@ -1,310 +0,0 @@ - -# ============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.smart_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.smart_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.smart_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) diff --git a/services/frontend/fe_detailed_view.py b/services/frontend/fe_detailed_view.py deleted file mode 100644 index 49a3523..0000000 --- a/services/frontend/fe_detailed_view.py +++ /dev/null @@ -1,471 +0,0 @@ - -# ============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. -import time - -from selenium.webdriver.support.ui import Select - -from services.constants import Constants, ServiceProvider -from services.database.db_general import DBGeneral -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_dashboard import FEDashboard -from services.frontend.fe_general import FEGeneral -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 FEDetailedView: - - @staticmethod - def search_vf_and_go_to_detailed_view(engagement_manual_id, vf_name): - engName = engagement_manual_id + ": " + vf_name - detailed_view_id = Constants.Dashboard.DetailedView.ID + engName - FEDashboard.statuses_search_vf(engagement_manual_id, vf_name) - Click.id(detailed_view_id, wait_for_page=True) - return detailed_view_id - - @staticmethod - def update_aic_version(): - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails.PLUS, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.Modal.TITLE_ID, - Constants.Dashboard.DetailedView.ValidationDetails.TITLE, - wait_for_page=True) - Select( - session.ice_driver.find_element_by_id( - Constants.Dashboard.DetailedView.AIC.Dropdown.ID - )).select_by_visible_text( - Constants.Dashboard.DetailedView.ValidationDetails. - TargetAICVersion.AIC3) - Click.xpath("//option[3]", wait_for_page=True) - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails.SAVE, - wait_for_page=True) - - @staticmethod - def open_validation_details(): - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails.PLUS, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.Modal.TITLE_ID, - Constants.Dashboard.DetailedView.ValidationDetails.TITLE, - wait_for_page=True) - - @staticmethod - def save_validation_details(): - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails.SAVE, - wait_for_page=True) - - @staticmethod - def update_target_lab_entry(): - Click.id( - Constants.Dashboard.DetailedView.TargetLabEntry.CHANGE, - wait_for_page=True) - Enter.date_picker( - '#lab-entry-date', 'vm.targetLabDate', wait_for_page=True) - Click.css( - Constants.Dashboard.DetailedView.TargetLabEntry.INPUT_CSS, - wait_for_page=True) - Click.css(Constants.SubmitButton.CSS, wait_for_page=True) - actualDate = Get.by_css( - Constants.Dashboard.DetailedView.TargetLabEntry.CONTENT_CSS, - wait_for_page=True) - return str(actualDate) - - @staticmethod - def validate_target_lab_entry(date): - Wait.text_by_css( - Constants.Dashboard.DetailedView.TargetLabEntry.CSS, - Constants.Dashboard.DetailedView.TargetLabEntry.TEXT, - wait_for_page=True) - actualDate = Get.by_css( - Constants.Dashboard.DetailedView.TargetLabEntry.CONTENT_CSS) - Helper.internal_assert(actualDate, date) - - @staticmethod - def update_ecomp_release(EcompName): - count = 0 - try: - Click.id(Constants.Dashboard.DetailedView.ValidationDetails.PLUS) - Wait.text_by_id( - Constants.Dashboard.Modal.TITLE_ID, - Constants.Dashboard.DetailedView.ValidationDetails.TITLE, - wait_for_page=True) - Click.id( - Constants.Dashboard.DetailedView.ECOMP.Dropdown.ID, - wait_for_page=True) - Select(session.ice_driver.find_element_by_id( - Constants.Dashboard.DetailedView.ECOMP.Dropdown.ID - )).select_by_visible_text(EcompName) - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails. - ECOMPRelease.ID_ECOMP + - EcompName, - wait_for_page=True) - count += 1 - Wait.id( - Constants.Dashboard.DetailedView.ValidationDetails. - ECOMPRelease.ID_ECOMP + - Constants.Dashboard.DetailedView.ValidationDetails. - ECOMPRelease.UNKNOW, - wait_for_page=True) - Select( - session.ice_driver.find_element_by_id( - Constants.Dashboard.DetailedView.ECOMP.Dropdown.ID - )).select_by_visible_text( - Constants.Dashboard.DetailedView.ValidationDetails. - ECOMPRelease.UNKNOW) - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails. - ECOMPRelease.ID_ECOMP + - Constants.Dashboard.DetailedView.ValidationDetails. - ECOMPRelease.UNKNOW, - wait_for_page=True) - count += 1 - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails.SAVE, - wait_for_page=True) - Helper.internal_assert(count, 2) - # If failed - count the failure and add the error to list of errors. - except BaseException: - errorMsg = "Failed in update_ecomp_release ." - raise Exception(errorMsg) - - @staticmethod - def update_vf_version(): - try: - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails.PLUS, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.Modal.TITLE_ID, - Constants.Dashboard.DetailedView.ValidationDetails.TITLE, - wait_for_page=True) - newVFVersionName = "newVFVersionName-" + \ - Helper.rand_string("randomString") - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails. - VFVersion.ID_VERSION) - Enter.text_by_id( - Constants.Dashboard.DetailedView.ValidationDetails. - VFVersion.ID_VERSION, - newVFVersionName, - wait_for_page=True) - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails.SAVE, - wait_for_page=True) - return newVFVersionName - # If failed - count the failure and add the error to list of errors. - except BaseException: - errorMsg = "Failed in update_ecomp_release ." - raise Exception(errorMsg) - - @staticmethod - def validate_aic_version(): - FEGeneral.refresh() - Wait.id( - Constants.Dashboard.DetailedView.AIC.ID + - "3.0", - wait_for_page=True) - - @staticmethod - def validate_ecomp_version(): - FEGeneral.refresh() - Wait.id( - Constants.Dashboard.DetailedView.ECOMP.ID + - Constants.Dashboard.DetailedView.ValidationDetails. - ECOMPRelease.UNKNOW, - wait_for_page=True) - - @staticmethod - def validate_vf_version(newVFVersionName): - FEGeneral.refresh() - Wait.id( - Constants.Dashboard.DetailedView.ValidationDetails. - VFVersion.VF_VERSION_ID + - newVFVersionName, - wait_for_page=True) - - @staticmethod - def validate_all_titles_on_dv_form(): - Wait.text_by_id( - Constants.Dashboard.DetailedView.DeploymentTarget.ID, - Constants.Dashboard.DetailedView.DeploymentTarget.TEXT, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.DetailedView.VirtualFunctionComponents.ID, - Constants.Dashboard.DetailedView.VirtualFunctionComponents.TEXT) - Wait.text_by_id(Constants.Dashboard.DetailedView.TargetLabEntry.ID, - Constants.Dashboard.DetailedView.TargetLabEntry.TEXT) - Wait.text_by_id( - Constants.Dashboard.DetailedView.ValidationDetails.ID, - Constants.Dashboard.DetailedView.ValidationDetails.TEXT) - Wait.text_by_id( - Constants.Dashboard.DetailedView.ValidationDetails. - TargetAICVersion.ID, - Constants.Dashboard.DetailedView.ValidationDetails. - TargetAICVersion.TEXT) - Wait.text_by_id( - Constants.Dashboard.DetailedView.ValidationDetails.ECOMPRelease.ID, - Constants.Dashboard.DetailedView.ValidationDetails. - ECOMPRelease.TEXT) - Wait.text_by_id( - Constants.Dashboard.DetailedView.ValidationDetails.VFVersion.ID, - Constants.Dashboard.DetailedView.ValidationDetails.VFVersion.TEXT, - wait_for_page=True) - - @staticmethod - def add_deployment_target(user_content): - Click.id(Constants.Dashboard.DetailedView.TargetLabEntry.Add.ID) - Wait.text_by_id(Constants.Dashboard.Modal.TITLE_ID, - Constants.Dashboard.DetailedView.DeploymentTarget. - TITLE) - # FIXME: empty drop-down, tests will fail. - Select(session.ice_driver.find_element_by_xpath( - "//select")).select_by_visible_text("Lisle (DPA3)") - Click.id( - Constants.Dashboard.DetailedView.DeploymentTarget.SAVE, - wait_for_page=True) - Wait.text_by_css( - Constants.Dashboard.DetailedView.DeploymentTarget.CSS, - "Lisle (DPA3)", - wait_for_page=True) - Wait.text_by_id(Constants.Dashboard.DetailedView.AIC.ID + - user_content['target_aic'], user_content['target_aic']) - e2edate = FEGeneral.date_short_formatter() - Wait.text_by_css( - Constants.Dashboard.DetailedView.TargetLabEntry.CONTENT_CSS, - e2edate) - - @staticmethod - def remove_deployment_target(user_content): - Wait.text_by_id( - "visible-dts-Lisle (DPA3)", "Lisle (DPA3)", wait_for_page=True) - dt_site_id = DBGeneral.select_query( - "SELECT uuid FROM public.ice_deployment_target_site where name" + - " = 'Lisle (DPA3)'") - Click.id("visible-dts-Lisle (DPA3)") - Wait.id( - Constants.Dashboard.DetailedView.DeploymentTarget.ID_REMOVE_DTS + - dt_site_id) - Click.id( - Constants.Dashboard.DetailedView.DeploymentTarget.ID_REMOVE_DTS + - dt_site_id, - wait_for_page=True) - session.run_negative( - lambda: Wait.text_by_id( - "visible-dts-Lisle (DPA3)", - "Lisle (DPA3)", - wait_for_page=True), - "Negative test failed at wait text Lisle (DPA3)") - - @staticmethod - def add_vfc(): - vfcName = "VFC-" + Helper.rand_string("randomString") - Click.id(Constants.Dashboard.DetailedView.VFC.Add.ID) - Enter.text_by_name("name", vfcName) - session.ice_driver.find_element_by_name("extRefID").click() - Enter.text_by_name("extRefID", Helper.rand_string("randomNumber")) - Select(session.ice_driver.find_element_by_id( - Constants.Dashboard.DetailedView.VFC.Choose_Company.ID - )).select_by_visible_text(ServiceProvider.MainServiceProvider) - Click.id(Constants.Dashboard.DetailedView.VFC.Save_button.ID) - return vfcName - - @staticmethod - def add_vfcs(name, extRefID): - Click.id( - Constants.Dashboard.DetailedView.VFC.Add.ID, wait_for_page=True) - Wait.text_by_id(Constants.Dashboard.Modal.TITLE_ID, - "Add Virtual Function Components (VFCs)") - Enter.text_by_name("name", name) - Click.name("extRefID", wait_for_page=True) - Enter.text_by_name("extRefID", extRefID, wait_for_page=True) - Select(session.ice_driver.find_element_by_id( - Constants.Dashboard.DetailedView.VFC.Choose_Company.ID - )).select_by_visible_text("Amdocs") - Wait.text_by_css("span.add-text", "Add VFC", wait_for_page=True) - Click.css("span.add-text", wait_for_page=True) - logger.debug("Add VFC no.2") - Enter.text_by_xpath( - "//div[2]/ng-form/div/input", "djoni2", wait_for_page=True) - Enter.text_by_xpath("//div[2]/ng-form/div[2]/input", "loka2") - Enter.text_by_xpath("//div[2]/ng-form/div[4]/input", "companyManual2") - Click.id( - Constants.Dashboard.DetailedView.VFC.Save_button.ID, - wait_for_page=True) - - @staticmethod - def remove_vfc(user_content): - vf_id = DBGeneral.select_where( - "uuid", "ice_vf", "name", user_content['vfName'], 1) - djoni_uuid = None - counter = 0 - while not djoni_uuid and counter <= Constants.DBConstants.\ - RETRIES_NUMBER: - time.sleep(session.wait_until_time_pause_long) - djoni_uuid = DBGeneral.select_where_and( - "uuid", "ice_vfc", "vf_id", vf_id, "name", "djoni", 1) - logger.debug("Checklist state not changed yet (%s of %s)" % ( - counter, Constants.DBConstants.RETRIES_NUMBER)) - counter += 1 - logger.debug("VFC_UUID was successfully selecteded : " + - djoni_uuid + ", and was verified over the DB") - Wait.text_by_id(Constants.Dashboard.DetailedView.VFC.ID + - "djoni", "djoni (loka)", wait_for_page=True) - Wait.text_by_id(Constants.Dashboard.DetailedView.VFC.ID + - "djoni2", "djoni2 (loka2)", wait_for_page=True) - Click.id( - Constants.Dashboard.DetailedView.VFC.ID + - "djoni", - wait_for_page=True) - Click.id(Constants.Dashboard.DetailedView.VFC.Remove.ID + - djoni_uuid, wait_for_page=True) - - @staticmethod - def validate_deployment_targets(user_content, users): - for user in users: - FEGeneral.re_open(Constants.Default.LoginURL.TEXT) - logger.debug("Login with user " + user) - FEUser.login(user, Constants.Default.Password.TEXT) - FEDetailedView.search_vf_and_go_to_detailed_view( - user_content['engagement_manual_id'], user_content['vfName']) - Wait.id( - Constants.Dashboard.DetailedView.DeploymentTarget. - AddDeploymentTargetButton.ID) - - @staticmethod - def add_remove_deployment_targets(user_content, users): - for user in users: - FEGeneral.re_open(Constants.Default.LoginURL.TEXT) - logger.debug("Login with user " + user) - FEUser.login(user, Constants.Default.Password.TEXT) - FEDetailedView.search_vf_and_go_to_detailed_view( - user_content['engagement_manual_id'], user_content['vfName']) - FEDetailedView.add_deployment_target(user_content) - FEDetailedView.remove_deployment_target(user_content) - - @staticmethod - def validate_negative_role_for_deployment_targets(user_content, users): - for user in users: - FEGeneral.re_open(Constants.Default.LoginURL.TEXT) - logger.debug("Login with user " + user) - FEUser.login(user, Constants.Default.Password.TEXT) - FEDetailedView.search_vf_and_go_to_detailed_view( - user_content['engagement_manual_id'], user_content['vfName']) - session.run_negative( - lambda: Click.id( - Constants.Dashboard.DetailedView.DeploymentTarget. - AddDeploymentTargetButton.ID), - "Negative test failed at click_on_ deployment-targets " + - "with user %s" % user) - - @staticmethod - def click_on_update_aic_version(): - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails.PLUS, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.Modal.TITLE_ID, - Constants.Dashboard.DetailedView.ValidationDetails.TITLE, - wait_for_page=True) - - @staticmethod - def click_on_update_ecomp_release(): - Click.id( - Constants.Dashboard.DetailedView.ValidationDetails.PLUS, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.Modal.TITLE_ID, - Constants.Dashboard.DetailedView.ValidationDetails.TITLE, - wait_for_page=True) - - @staticmethod - def select_aic_version_from_list(aic_version): - Select(session.ice_driver.find_element_by_id( - Constants.Dashboard.DetailedView.AIC.Dropdown.ID - )).select_by_visible_text(aic_version) - - @staticmethod - def compare_aic_selected_version(expected_aic_version): - Helper.internal_assert( - Get.by_id( - Constants.Dashboard.DetailedView.AIC.ID + - expected_aic_version), - expected_aic_version) - - @staticmethod - def compare_selected_ecomp_release(expected_ecomp_release): - Helper.internal_assert( - Get.by_id( - Constants.Dashboard.DetailedView.ECOMP.ID + - expected_ecomp_release), - expected_ecomp_release) - - @staticmethod - def validate_deprecated_aic_version_in_dropdown(expected_aic_version): - Helper.internal_assert( - Get.by_id( - Constants.Dashboard.DetailedView.AIC.Dropdown. - UniversalVersion.ID % - expected_aic_version), - "AIC " + - expected_aic_version + - " - Deprecated") - - @staticmethod - def validate_deprecated_ecomp_release_in_dropdown(expected_ecomp_release): - Helper.internal_assert( - Get.by_id( - Constants.Dashboard.DetailedView.ECOMP.Dropdown. - UniversalRelease.ID % - expected_ecomp_release), - expected_ecomp_release + - " - Deprecated") diff --git a/services/frontend/fe_general.py b/services/frontend/fe_general.py deleted file mode 100644 index 5974801..0000000 --- a/services/frontend/fe_general.py +++ /dev/null @@ -1,281 +0,0 @@ - -# ============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. -import json -import time - -from selenium.webdriver.support.select import Select - -from services.constants import Constants -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.helper import Helper -from services.logging_service import LoggingServiceFactory -from services.session import session - - -logger = LoggingServiceFactory.get_logger() - - -class FEGeneral(Helper): - - @staticmethod - def date_formatter(): - d = int(time.strftime("%d")) - if (d == 1 or d == 21 or d == 31): - d = str(d) + "st" - elif (d == 2 or d == 22): - d = str(d) + "nd" - elif (d == 3 or d == 23): - d = str(d) + "rd" - else: - d = str(d) + "th" - return time.strftime("%A %B " + d + " %Y") - - @staticmethod - def date_short_formatter(): - return time.strftime("%-m" + "/" + "%-d" + "/" + "%y") - - @staticmethod - def re_open(reopen_url): - try: - logger.debug("Reopen URL: " + reopen_url) - session.ice_driver.get('javascript:localStorage.clear();') - session.ice_driver.get('javascript:sessionStorage.clear();') - session.ice_driver.delete_all_cookies() - # Open FireFox with requested URL. - session.ice_driver.get("about:blank") - # Open FireFox with requested URL. - session.ice_driver.get(reopen_url) - session.ice_driver.maximize_window() - Wait.page_has_loaded() - except Exception: - errorMsg = "Could not reopen requested page" - raise Exception(errorMsg, reopen_url) - - @staticmethod - def re_open_not_clean_cache(url): - try: - # Open FireFox with requested URL. - session.ice_driver.get(url) - session.ice_driver.maximize_window() - except BaseException: - errorMsg = "Could not reopen requested page" - raise Exception(errorMsg, url) - logger.debug("Moving to next test case") - - @staticmethod - def refresh(): - try: - session.ice_driver.refresh() - Wait.page_has_loaded() - except Exception as e: - errorMsg = "Could not refresh the page." - logger.error(errorMsg) - raise Exception(errorMsg, e) - - @staticmethod - def smart_refresh(): - session.ice_driver.refresh() - i = 0 - success = False - while not success and i < 2: - try: - Wait.page_has_loaded() - success = True - break - except Exception: - i += 1 - time.sleep(1) - pass - if not success: - raise Exception("Failed to wait for refresh") - - @staticmethod - def select_vendor_from_list(vendor): - Wait.name(Constants.Signup.Company.NAME) - Select(session.ice_driver.find_element_by_name( - Constants.Signup.Company.NAME)).select_by_visible_text(vendor) - - @staticmethod - def go_to_signup_from_login(): - Click.link_text(Constants.Login.Signup.LINK_TEXT, wait_for_page=True) - Wait.text_by_css( - Constants.Signup.Title.CSS, - Constants.Signup.Title.TEXT, - wait_for_page=True) - - @staticmethod - def form_enter_name(name): - Enter.text_by_name(Constants.Signup.FullName.NAME, name) - - @staticmethod - def form_enter_email(email): - Enter.text_by_name(Constants.Signup.Email.NAME, email) - - @staticmethod - def form_enter_phone(phone): - Enter.text_by_name(Constants.Signup.Phone.NAME, phone) - - @staticmethod - def form_enter_password(password): - Enter.text_by_name(Constants.Signup.Password.NAME, password) - - @staticmethod - def form_check_checkbox(xpath): - Click.xpath(xpath) - - @staticmethod - def click_on_submit(): - Click.css(Constants.SubmitButton.CSS) - - @staticmethod - def go_to_login_from_signup(): - Click.link_text(Constants.Signup.HaveAccount.LINK_TEXT) - Wait.text_by_css(Constants.Login.Title.CSS, Constants.Login.Title.TEXT) - - @staticmethod - def verify_toast_message(expected_message): - Wait.text_by_id( - Constants.Toast.ID, expected_message, wait_for_page=True) - - @staticmethod - def form_validate_name(name): - name_in_ui = Get.value_by_name( - Constants.Dashboard.Avatar.Account.FullName.NAME) - Helper.internal_assert(name, name_in_ui) - - @staticmethod - def form_validate_email(email): - email_in_ui = Get.value_by_name( - Constants.Dashboard.Avatar.Account.Email.NAME) - Helper.internal_assert(email, email_in_ui) - - @staticmethod - def form_validate_phone(phone): - phone_in_ui = Get.value_by_name( - Constants.Dashboard.Avatar.Account.Phone.NAME) - Helper.internal_assert(phone, phone_in_ui) - - @staticmethod - def form_validate_company(company): - company_in_ui = Get.value_by_name( - Constants.Dashboard.Avatar.Account.Company.NAME) - Helper.internal_assert(company, company_in_ui) - - @staticmethod - def form_validate_ssh(key): - key_in_ui = Get.value_by_name( - Constants.Dashboard.Avatar.Account.SSHKey.NAME) - Helper.internal_assert(key, key_in_ui) - - @staticmethod - def go_to_reset_password_from_login(): - Click.link_text(Constants.Login.ResetPassword.LINK_TEXT) - - @staticmethod - def send_reset_password(email): - FEGeneral.go_to_reset_password_from_login() - Wait.text_by_css( - Constants.ResetPassword.Title.CSS, - Constants.ResetPassword.Title.TEXT) - Enter.text_by_name(Constants.ResetPassword.Email.NAME, email) - Wait.text_by_css( - Constants.SubmitButton.CSS, Constants.ResetPassword.Button.TEXT) - Click.css(Constants.SubmitButton.CSS) - Wait.text_by_id( - Constants.Toast.ID, Constants.ResetPassword.Toast.Success.TEXT) - logger.debug(Constants.ResetPassword.Toast.Success.TEXT) - - @staticmethod - def verify_home_elements(): - Wait.text_by_id(Constants.Home.Title.ID, Constants.Home.Title.TEXT) - element = session.ice_driver.find_element_by_id( - Constants.Home.Collaborate.ID) - element.location_once_scrolled_into_view - Wait.text_by_xpath( - Constants.Home.Collaborate.XPATH, Constants.Home.Collaborate.TEXT) - Wait.text_by_xpath( - Constants.Home.Validate.XPATH, Constants.Home.Validate.TEXT) - Wait.text_by_xpath( - Constants.Home.Incubate.XPATH, Constants.Home.Incubate.TEXT) - element = session.ice_driver.find_element_by_id(Constants.Home.Logo.ID) - element.location_once_scrolled_into_view - Wait.text_by_id(Constants.Home.Title.ID, Constants.Home.Title.TEXT) - - @staticmethod - def go_to_signup_from_homepage(): - Click.link_text(Constants.Home.GetStarted.LINK_TEXT) - Wait.text_by_css( - Constants.Signup.Title.CSS, Constants.Signup.Title.TEXT) - - @staticmethod - def get_meta_order_of_element(element_id): - return Get.meta_order_by_id(element_id) - - @staticmethod - def verify_num_of_existing_ids(requested_num_of_ids, id_prefix): - existing_id_objects_in_page = 0 - ids = session.ice_driver.find_elements_by_xpath('//*[@id]') - for id in ids: - if id_prefix in id.get_attribute('id'): - # Print id.tag_name (id name as string). - logger.debug(id.get_attribute('id')) - existing_id_objects_in_page += 1 - Helper.internal_assert( - existing_id_objects_in_page, requested_num_of_ids) - logger.debug("verify_num_of_existing_ids succeeded") - - @staticmethod - def verify_existing_files_in_list(items_list, id_to_search_for): - element = session.ice_driver.find_elements_by_id(id_to_search_for) - element_attribute_items = json.loads(element[0].get_attribute('name')) - Helper.internal_assert( - len(items_list), len(element_attribute_items) - 1) - extracted_files_list = list() - for file in element_attribute_items: - extracted_files_list.append(file['File']) - for item in items_list: - if item not in extracted_files_list: - Helper.assertTrue( - False, "%s does not exist over the client's side" % item) - logger.debug( - "verify_existing_files_in_list succeeded, " + - "All vf repo files are available for choosing.") diff --git a/services/frontend/fe_invite.py b/services/frontend/fe_invite.py deleted file mode 100644 index 061df73..0000000 --- a/services/frontend/fe_invite.py +++ /dev/null @@ -1,226 +0,0 @@ - -# ============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 services.api.api_user import APIUser -from services.constants import Constants, ServiceProvider -from services.database.db_general import DBGeneral -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_user import FEUser -from services.frontend.fe_wizard import FEWizard -from services.helper import Helper -from services.logging_service import LoggingServiceFactory -from services.session import session - - -logger = LoggingServiceFactory.get_logger() - - -class FEInvite: - - @staticmethod - def invite_users(user_content): - engName = user_content[0][ - 'engagement_manual_id'] + ": " + user_content[0]['vfName'] - vf_left_nav_id = "clickable-" + engName - Click.id(vf_left_nav_id) - FEWizard.invite_team_members_modal(user_content[1]['email']) - # self.sleep(1) # TODO need to wait until modal window is closed. - invitation_token = DBUser.select_invitation_token( - "invitation_token", - "ice_invitation", - "engagement_uuid", - user_content[0]['engagement_uuid'], - user_content[1]['email'], - 1) - inviterURL = Constants.Default.InviteURL.Login.TEXT + invitation_token - FEGeneral.re_open(inviterURL) - # Login with 2nd user # - title_id = "title-id-" + engName - FEUser.login( - user_content[1]['email'], - Constants.Default.Password.TEXT, - title_id) - Click.id(vf_left_nav_id) - actualVfName = Get.by_id(vf_left_nav_id) - Helper.internal_assert(engName, actualVfName) - Wait.text_by_id(Constants.Dashboard.Overview.Title.ID, engName) - FEUser.logout() - return vf_left_nav_id - - @staticmethod - def invite_x_users(user_content, vf_left_nav_id, x): - for _ in range(x): # Invites 2-5 - Click.id(vf_left_nav_id) - Click.id(Constants.Dashboard.LeftPanel.AddEngagement.ID) - FEWizard.add_vf() - Click.id( - Constants.Dashboard.Wizard.CloseButton.ID, wait_for_page=True) - FEWizard.invite_team_members_modal(user_content[1]['email']) - FEGeneral.refresh() - - @staticmethod - def invite_and_validate_limit(user_content, vf_left_nav_id): - Click.id(Constants.Dashboard.LeftPanel.AddEngagement.ID) - FEWizard.add_vf() - Click.id(Constants.Dashboard.Wizard.CloseButton.ID, wait_for_page=True) - Click.id(vf_left_nav_id) - Click.id(Constants.Dashboard.Overview.TeamMember.ID) - Wait.text_by_css(Constants.Dashboard.Wizard.Title.CSS, - Constants.Dashboard.Wizard.InviteTeamMembers. - Title.TEXT) - Enter.text_by_name("email", user_content[1]['email']) - Wait.text_by_css( - Constants.SubmitButton.CSS, - Constants.Dashboard.Wizard.InviteTeamMembers.Button.TEXT) - Click.css(Constants.SubmitButton.CSS) - Wait.id(Constants.Toast.ID) - Helper.internal_assert( - Get.by_id(Constants.Toast.ID), "Invite couldn't be created") - - @staticmethod - def invite_x_users_from_tm( - list_of_invite_emails, - countofUser, - countOfem, - num): - Enter.text_by_name( - "email", list_of_invite_emails[countofUser], wait_for_page=True) - for _ in range(num): - try: - session.run_negative( - lambda: Click.css("span.add-icon"), "css appears") - break - except BaseException: # button exists - pass - countofUser += 1 -# Click.css("span.add-icon") - Wait.xpath("//fieldset[" + str(countOfem) + "]/div/input") - Enter.text_by_xpath( - "//fieldset[" + str(countOfem) + "]/div/input", - list_of_invite_emails[countofUser]) - countOfem += 1 - Click.css(Constants.SubmitButton.CSS, wait_for_page=True) - - @staticmethod - def create_x_vfs(user_content, engName, x): - vflist = [] - FEUser.login(user_content['email'], Constants.Default.Password.TEXT) - for _ in range(x): - vf_left_nav_id = "clickable-" + engName - Click.id(vf_left_nav_id) - Click.id(Constants.Dashboard.LeftPanel.AddEngagement.ID) - vfName = FEWizard.add_vf() - vflist.append(vfName) - Click.id( - Constants.Dashboard.Wizard.CloseButton.ID, wait_for_page=True) - return vflist - - @staticmethod - def validations_for_user2(user_content, inviteEmail, vflist): - # Fetch one AT&T user ID. - engagement_id = DBGeneral.select_where( - "engagement_id", "ice_vf", "name", vflist[0], 1) - engagement_manual_id = DBGeneral.select_where( - "engagement_manual_id", "ice_engagement", "uuid", engagement_id, 1) - engLeadEmail = DBUser.select_el_email(vflist[0]) - user_content['engagement_uuid'] = engagement_id - user_content['el_email'] = engLeadEmail - uuid = DBGeneral.select_where_email( - "uuid", "ice_user_profile", user_content['email']) - sponsor = [ServiceProvider.MainServiceProvider, 'aaaaaa', inviteEmail, - '3058000000'] - invitation_token = DBUser.select_invitation_token( - "invitation_token", - "ice_invitation", - "engagement_uuid", - engagement_id, - inviteEmail, - 1) - signUpURLforContact = DBUser.get_contact_signup_url( - invitation_token, uuid, sponsor[2], sponsor[1], - sponsor[3], sponsor[0]) - APIUser.signup_invited_user( - sponsor[0], - inviteEmail, - invitation_token, - signUpURLforContact, - user_content, - True, - wait_for_gitlab=False) - activationUrl2 = DBUser.get_activation_url(sponsor[2]) - FEGeneral.re_open(activationUrl2) # Login with 2nd user # - engName = engagement_manual_id + ": " + vflist[0] - title_id = "clickable-" + engName - FEUser.login(inviteEmail, Constants.Default.Password.TEXT, title_id) - for vfName in vflist: - # Fetch one AT&T user ID. - engagement_id = DBGeneral.select_where( - "engagement_id", "ice_vf", "name", vfName, 1) - engagement_manual_id = DBGeneral.select_where( - "engagement_manual_id", "ice_engagement", "uuid", - engagement_id, 1) - engName = engagement_manual_id + ": " + vfName - vf_left_nav_id = "clickable-" + engName - Click.id(vf_left_nav_id, wait_for_page=True) - - @staticmethod - def invite_x_users_and_verify_VF_appers_for_invited(user_content, engName): - inviteEmail = Helper.rand_string( - 'randomString') + "@" + ServiceProvider.email - vflist = FEInvite.create_x_vfs(user_content, engName, x=3) - for vfName in vflist: - # Fetch one AT&T user ID. - engagement_id = DBGeneral.select_where( - "engagement_id", "ice_vf", "name", vfName, 1) - engagement_manual_id = DBGeneral.select_where( - "engagement_manual_id", "ice_engagement", "uuid", - engagement_id, 1) - engName = engagement_manual_id + ": " + vfName - vf_left_nav_id = "clickable-" + engName - Click.id(vf_left_nav_id) - FEWizard.invite_team_members_modal(inviteEmail, - wait_modal_to_disappear=False) - FEGeneral.refresh() - # validations - FEInvite.validations_for_user2(user_content, inviteEmail, vflist) diff --git a/services/frontend/fe_next_step.py b/services/frontend/fe_next_step.py deleted file mode 100644 index b10735d..0000000 --- a/services/frontend/fe_next_step.py +++ /dev/null @@ -1,58 +0,0 @@ - -# ============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. -''' -Created on 20 Jul 2017 -''' -from services.constants import Constants -from services.frontend.base_actions.click import Click -from services.frontend.base_actions.wait import Wait - - -class FENextStep(object): - - @staticmethod - def check_select_deselect_all_files(): - Click.id(Constants.Dashboard.Overview.NextSteps.Add.AssociatedFiles.ID) - Click.link_text( - Constants.Dashboard.Overview.NextSteps.Add.AssociatedFiles. - SELECT_ALL_FILES_NAME) - Wait.text_by_id( - Constants.Dashboard.Overview.NextSteps.Add.AssociatedFiles.ID, - Constants.Dashboard.Overview.NextSteps.Add.AssociatedFiles. - ALL_FILES_SELECTED) diff --git a/services/frontend/fe_overview.py b/services/frontend/fe_overview.py deleted file mode 100644 index 15f8725..0000000 --- a/services/frontend/fe_overview.py +++ /dev/null @@ -1,528 +0,0 @@ - -# ============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. -import datetime - -from django.utils import timezone -from selenium.webdriver.support.select import Select - -from services.constants import Constants -from services.database.db_general import DBGeneral -from services.database.db_user import DBUser -from services.database.db_virtual_function import DBVirtualFunction -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_user import FEUser -from services.frontend.fe_wizard import FEWizard -from services.helper import Helper -from services.logging_service import LoggingServiceFactory -from services.session import session - -logger = LoggingServiceFactory.get_logger() - - -class FEOverview: - - @staticmethod - def click_on_vf(user_content): - vfFullName = user_content[ - 'engagement_manual_id'] + ": " + user_content['vfName'] - Enter.text_by_id( - Constants.Dashboard.LeftPanel.SearchBox.ID, - user_content['vfName'], - True) - Click.id(Constants.Dashboard.LeftPanel.SearchBox.Results.ID % - user_content['vfName'], True) - Wait.text_by_id( - Constants.Dashboard.Overview.Title.ID, vfFullName) - - @staticmethod - def go_to_eng_overview_by_clicking_on_the_created_NS(user_content): - logger.debug( - "Go to engagement's overview by clicking on the created Next Step") - Click.name(user_content['engagement_manual_id'], wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.Overview.Title.ID, - user_content['engagement_manual_id'] + ":", - wait_for_page=True) - FEGeneral.re_open(Constants.Default.LoginURL.TEXT) - logger.debug("Login with EL user " + user_content['el_email']) - FEUser.login(user_content['el_email'], Constants.Default.Password.TEXT) - # Query to select all assigned next steps on TODO state # - el_native_id = str(DBGeneral.select_where( - "id", "ice_user_profile", "email", user_content['el_email'], 1)) - queryStr = "SELECT count(*) FROM ice_user_profile AS users, " +\ - "ice_next_step_assignees AS assignees, " +\ - "ice_next_step AS ns WHERE users.id=" + \ - el_native_id + \ - " AND users.id=assignees.iceuserprofile_id " +\ - "AND assignees.nextstep_id=ns.uuid AND ns.state='Incomplete';" - el_assigned_ns = str(DBGeneral.select_query(queryStr)) - logger.debug("el_assigned_ns=" + el_assigned_ns) - Wait.page_has_loaded() - if (int(el_assigned_ns) >= 5): - logger.debug( - "EL has 5 or more assigned next steps, " + - "checking that only 5 are shown") - ns_list = Get.by_id("next-steps-list") - if (ns_list.count("Engagement - ") > 5): - logger.error("More than 5 next steps are listed in dashboard.") - raise - - @staticmethod - def complete_defaults_nextsteps(engagement_id): - # NEXT STEP ID - next_steps = DBVirtualFunction.select_next_steps_uuids_by_stage( - engagement_id, Constants.EngagementStages.INTAKE) - for next_step in next_steps: - Wait.id(next_step) - Click.id(next_step, wait_for_page=True) - - @staticmethod - def check_stage_notifications(stage): - activityLogID = "activity-log-0" - activityLogMsg = "Engagement stage is now %s" % stage - uiActivityLog = Get.by_id(activityLogID) - if activityLogMsg not in uiActivityLog: - return False - return True - - @staticmethod - def check_stage_next_steps(stage, engagement_uuid): - ns_list = DBGeneral.select_where_and( - "description", - "ice_next_step", - "engagement_id", - engagement_uuid, - "engagement_stage", - stage, - 0) # List of next steps from DB. - logger.debug("Got list of Next Steps for current stage " + stage) - for i in range(len(ns_list)): - ns_description = ns_list[i] # Value number i from the list. - ns_uuid = DBGeneral.select_where_and( - "uuid", - "ice_next_step", - "engagement_id", - engagement_uuid, - "description", - ns_description, - 1) - logger.debug( - "Compare presented text of next step with the text from DB.") - portal_ns = Get.by_id("step-" + ns_uuid) - # Get from UI the text of relevant next step. - if ns_description not in portal_ns: - logger.error("Next step wasn't found in stage " + stage) - raise - - @staticmethod - def change_engagement_stage(next_stage, is_negative=False): - # Click on next stage. - Click.id(Constants.Dashboard.Overview.Stage.Set.ID + next_stage) - txtLine2ID = "modal-message-" + next_stage - if is_negative: - session.run_negative( - lambda: Wait.id(txtLine2ID), "Error: modal window opened.") - else: - Wait.text_by_id( - txtLine2ID, - "Are you sure you want to set the Engagement's stage to " + - next_stage + - "?") - # Click on Approve (after validations inside window). - Click.xpath( - Constants.Dashboard.Overview.Stage.Approve.XPATH, - wait_for_page=True) - - @staticmethod - def check_progress(expected_progress): - currentProgress = Get.by_id( - Constants.Dashboard.Overview.Progress.Percent.ID) - Helper.internal_assert(currentProgress, expected_progress) - - @staticmethod - def check_vnf_version(expected_progress): - current_vnf_value = Get.by_css( - "." + Constants.Dashboard.Overview.Progress.VnfVersion.CLASS) - Helper.internal_assert(current_vnf_value, expected_progress) - - @staticmethod - def set_progress(new_value): - Click.id(Constants.Dashboard.Overview.Progress.Change.ID) - Helper.internal_assert( - Constants.Dashboard.Overview.Progress.Wizard.Title.TEXT, Get.by_id( - Constants.Dashboard.Modal.TITLE_ID)) - Enter.text_by_name( - Constants.Dashboard.Overview.Progress.Wizard.NAME, new_value) - Wait.text_by_css( - Constants.SubmitButton.CSS, - Constants.Dashboard.Overview.Progress.Wizard.Button.TEXT) - Click.css(Constants.SubmitButton.CSS) - Wait.modal_to_dissappear() - - @staticmethod - def delete_next_step(next_step_uuid): - Click.id("step-" + next_step_uuid, wait_for_page=True) - Click.id("delete-" + next_step_uuid, wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.GeneralPrompt.Title.ID, "Delete Step") - Click.id( - Constants.Dashboard.GeneralPrompt.ApproveButton.ID, - wait_for_page=True) - Wait.id_to_dissappear("test_" + next_step_uuid) - - @staticmethod - def click_on_admin_dropdown(): - Click.id( - Constants.Dashboard.Overview.AdminDropdown.ID, wait_for_page=True) - - @staticmethod - def click_on_archeive_engagement_from_dropdown(): - FEOverview.click_on_admin_dropdown() - Click.link_text( - Constants.Dashboard.Overview.AdminDropdown. - ArchiveEngagement.LINK_TEXT, - wait_for_page=True) - - @staticmethod - def archive_engagement_modal(engagement_manual_id, vf_name): - Wait.text_by_id( - Constants.Dashboard.Overview.AdminDropdown. - ArchiveEngagement.Wizard.Title.ID, - Constants.Dashboard.Overview.AdminDropdown. - ArchiveEngagement.Wizard.Title.TEXT) - random_reason = Helper.rand_string() - Enter.text_by_name( - Constants.Dashboard.Overview.AdminDropdown. - ArchiveEngagement.Wizard.Reason.NAME, - random_reason) - Click.id(Constants.SubmitButton.ID) - Wait.text_by_id( - Constants.Toast.ID, - "Engagement '%s: %s' archived successfully." % ( - engagement_manual_id, vf_name)) - query = "select archived_time,archive_reason from " +\ - "ice_engagement where engagement_manual_id" +\ - "='{engagement_manual_id}'".format( - engagement_manual_id=engagement_manual_id) - archived_time, db_reason = DBGeneral.select_query(query, "list") - Helper.assertTrue(archived_time is not None) - Helper.internal_assert(random_reason, db_reason) - - @staticmethod - def click_on_change_reviewer_from_dropdown(): - FEOverview.click_on_admin_dropdown() - Click.link_text( - Constants.Dashboard.Overview.AdminDropdown. - ChangeReviewer.LINK_TEXT) - - @staticmethod - def select_engagement_lead_from_list(el_name): - Wait.name( - Constants.Dashboard.Overview.AdminDropdown. - ChangeReviewer.Wizard.Select.NAME, - wait_for_page=True) - Select(session.ice_driver.find_element_by_name( - Constants.Dashboard.Overview.AdminDropdown. - ChangeReviewer.Wizard.Select.NAME)).\ - select_by_visible_text(el_name) - - @staticmethod - def change_engagement_lead_modal(el_name, is_reviewer=True): - Wait.text_by_id( - Constants.Dashboard.Overview.AdminDropdown. - ChangeReviewer.Wizard.Title.ID, - Constants.Dashboard.Overview.AdminDropdown. - ChangeReviewer.Wizard.Title.TEXT) - FEOverview.select_engagement_lead_from_list(el_name) - if is_reviewer: - Wait.text_by_id( - Constants.Toast.ID, - Constants.Dashboard.Overview.AdminDropdown. - ChangeReviewer.Toast.TEXT) - else: - Wait.text_by_id( - Constants.Toast.ID, - Constants.Dashboard.Overview.AdminDropdown. - ChangePeerReviewer.Toast.TEXT) - - @staticmethod - def click_on_change_peer_reviewer_from_dropdown(): - FEOverview.click_on_admin_dropdown() - Click.link_text( - Constants.Dashboard.Overview.AdminDropdown. - ChangePeerReviewer.LINK_TEXT) - Wait.text_by_id( - Constants.Dashboard.Overview.AdminDropdown. - ChangePeerReviewer.Wizard.Title.ID, - Constants.Dashboard.Overview.AdminDropdown. - ChangePeerReviewer.Wizard.Title.TEXT) - - @staticmethod - def click_on_update_status_from_dropdown(): - FEOverview.click_on_admin_dropdown() - Click.link_text( - Constants.Dashboard.Overview.AdminDropdown.UpdateStatus.LINK_TEXT) - Wait.text_by_id("update-engagement-status-title", "Update Status") - - @staticmethod - def fill_update_status_form_admin_dropdown(): - random_string = Helper.rand_string() - Enter.text_by_name( - Constants.Dashboard.Overview.AdminDropdown.UpdateStatus.PROGRESS, - str(50)) - Enter.date_picker( - Constants.Dashboard.Overview.AdminDropdown. - UpdateStatus.PROGRESS_CSS, - Constants.Dashboard.Overview.AdminDropdown.UpdateStatus.TARGET) - Enter.date_picker( - Constants.Dashboard.Overview.AdminDropdown. - UpdateStatus.PROGRESS_CSS, - Constants.Dashboard.Overview.AdminDropdown.UpdateStatus.HEAT) - Enter.date_picker( - Constants.Dashboard.Overview.AdminDropdown. - UpdateStatus.PROGRESS_CSS, - Constants.Dashboard.Overview.AdminDropdown.UpdateStatus.IMAGE_SACN) - Enter.date_picker( - Constants.Dashboard.Overview.AdminDropdown. - UpdateStatus.PROGRESS_CSS, - Constants.Dashboard.Overview.AdminDropdown.UpdateStatus.AIC) - Enter.date_picker( - Constants.Dashboard.Overview.AdminDropdown. - UpdateStatus.PROGRESS_CSS, - Constants.Dashboard.Overview.AdminDropdown.UpdateStatus.ASDC) - Enter.text_by_name( - Constants.Dashboard.Overview.AdminDropdown.UpdateStatus.STATUS, - random_string) - Click.css( - Constants.Dashboard.Overview.AdminDropdown.UpdateStatus.SUBMIT, - wait_for_page=True) - Wait.text_by_id( - Constants.Toast.ID, - Constants.Dashboard.Overview.AdminDropdown. - UpdateStatus.SUCCESS_MSG, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.Overview.Status.Description.ID, random_string) - - @staticmethod - def get_next_step_description(idx): - return str(Get.by_id("step-description-%s" % idx, wait_for_page=True)) - - @staticmethod - def get_list_of_next_steps(): - i = 0 - ns_list = [] - steps_length = len( - session.ice_driver.find_elements_by_css_selector( - ".step-indication > li")) - while i < steps_length: - ns_list.append(FEOverview.get_next_step_description(i)) - i += 1 - return ns_list - - @staticmethod - def validate_next_steps_order(steps_uuids): - ui_steps = FEOverview.get_list_of_next_steps() - for idx, step_uuid in enumerate(steps_uuids): - db_step_text = DBVirtualFunction.select_next_step_description( - step_uuid) - Wait.text_by_id( - Constants.Dashboard.Overview.NextSteps.Add.Description. - STEP_DESC_ID + str(idx), - ui_steps[idx], - wait_for_page=True) - if db_step_text != ui_steps[idx]: - raise AssertionError( - "Next step is not located in expected index. " + - "db_step_text = " + - db_step_text + - " ui_steps[idx] = " + - ui_steps[idx] + - "|| uuid = " + - step_uuid) - - @staticmethod - def next_steps_filter_by_files(): - Click.id( - Constants.Dashboard.Overview.NextSteps.FilterByFileDropDown.ID) - Click.link_text( - Constants.Dashboard.Overview.NextSteps.FilterByFileDropDown. - ANY_FILE_LINK_TEXT) - Click.link_text( - Constants.Dashboard.Overview.NextSteps.FilterByFileDropDown. - FILE0_LINK_TEXT) - Click.id( - Constants.Dashboard.Overview.NextSteps.FilterByFileDropDown.ID) - - @staticmethod - def complete_next_step(step_uuid): - Click.id(step_uuid) - - @staticmethod - def complete_next_step_and_wait_for_it_to_disappear(step_uuid): - Click.id(step_uuid) - Wait.id_to_dissappear(step_uuid) - - @staticmethod - def next_steps_filter_by_states(): - Click.id(Constants.Dashboard.Overview.NextSteps.StateDropDown.ID) - Click.link_text( - Constants.Dashboard.Overview.NextSteps.StateDropDown. - INCOMPLETE_LINK_TEXT) - Click.link_text( - Constants.Dashboard.Overview.NextSteps.StateDropDown. - COMPLETED_LINK_TEXT) - Click.id(Constants.Dashboard.Overview.NextSteps.StateDropDown.ID) - - @staticmethod - def add_next_step(): - Click.id(Constants.Dashboard.Overview.NextSteps.Add.ID) - Wait.text_by_css(Constants.Dashboard.Overview.NextSteps.Add.Title.CSS, - Constants.Dashboard.Overview.NextSteps.Add.Title.TEXT) - ns_description = "New next step - " + \ - Helper.rand_string("randomString") - Click.id(Constants.Dashboard.Overview.NextSteps.Add.Description.ID) - Enter.text_by_id( - Constants.Dashboard.Overview.NextSteps.Add.Description.ID, - ns_description) - FEWizard.date_picker_add_ns(0) - Wait.text_by_css( - Constants.SubmitButton.CSS, - Constants.Dashboard.Overview.NextSteps.Add.Button.TEXT) - Click.css(Constants.SubmitButton.CSS) - Wait.modal_to_dissappear() - - @staticmethod - def click_on_team_member(full_name): - Click.id(Constants.Dashboard.Overview.TeamMember.MEMBER_ID % full_name) - Wait.id(Constants.Dashboard.Overview.TeamMember.Title.ID) - - @staticmethod - def remove_user_from_eng_team(full_name, is_negative=False): - FEOverview.click_on_team_member(full_name) - if is_negative: - Wait.id_to_dissappear( - Constants.Dashboard.Overview.TeamMember.RemoveUser.ID) - else: - Click.id(Constants.Dashboard.Overview.TeamMember.RemoveUser.ID) - Wait.text_by_id( - Constants.Dashboard.GeneralPrompt.UpperTitle.ID, - Constants.Dashboard.Overview.TeamMember.RemoveUser.Title.TEXT % - full_name) - Wait.text_by_id( - Constants.Dashboard.GeneralPrompt.Title.ID, - Constants.Dashboard.Overview.TeamMember.RemoveUser. - Message.TEXT) - Click.id(Constants.Dashboard.GeneralPrompt.ApproveButton.ID) - FEGeneral.refresh() - Wait.id_to_dissappear( - Constants.Dashboard.Overview.TeamMember.MEMBER_ID % full_name) - - @staticmethod - def invite_and_reopen_link(user_content, other_el_email): - enguuid = DBGeneral.select_where( - "uuid", - "ice_engagement", - "engagement_manual_id", - user_content['engagement_manual_id'], - 1) - invitation_token = DBUser.select_invitation_token( - "invitation_token", - "ice_invitation", - "engagement_uuid", - enguuid, - other_el_email, - 1) - inviterURL = Constants.Default.InviteURL.Login.TEXT + invitation_token - FEGeneral.re_open(inviterURL) - - @staticmethod - def create_and_verify_VF_with_VFversion(): - Click.id( - Constants.Dashboard.LeftPanel.AddEngagement.ID, wait_for_page=True) - vfName = FEWizard.add_vf() - version_name = DBVirtualFunction.select_vf_version_by_vf_name(vfName) - vfNameDb = DBVirtualFunction.select_vf_name_by_vf_version(version_name) - Helper.internal_assert(vfNameDb, vfName) - - @staticmethod - def validate_empty_associated_files(): - FEOverview.add_next_step() - Click.id(Constants.Dashboard.Overview.NextSteps.AssociatedFiles.ID) - Wait.text_by_id( - Constants.Dashboard.Overview.NextSteps.AssociatedFiles.EmptyMsgID, - Constants.Dashboard.Overview.NextSteps.AssociatedFiles.EmptyMsg) - - @staticmethod - def validate_associated_files(file_name): - Click.id(Constants.Dashboard.Overview.NextSteps.AssociatedFiles.ID) - Wait.text_by_id( - Constants.Dashboard.Overview.NextSteps.AssociatedFiles.FileId, - file_name) - - @staticmethod - def validate_bucket_url(eng_manual_id, vf_name): - expected_text = Constants.Dashboard.Overview.BucketURL.TEXT + \ - eng_manual_id + "_" + vf_name.lower() - Wait.text_by_id( - Constants.Dashboard.Overview.BucketURL.ID, expected_text, True) - - @staticmethod - def verify_validation_dates(): - validation_date = Get.by_id( - Constants.Dashboard.Overview.Progress.ValidationsDates.AIC_ID, - True) - validation_date = datetime.datetime.strptime(validation_date, - "%m/%d/%y").date() - current_date = timezone.now().date() - Helper.internal_assert(validation_date, current_date) - - @staticmethod - def open_add_next_step_modal_from_overview(): - Click.id(Constants.Dashboard.Overview.NextSteps.Add.ID, - wait_for_page=True) - Wait.text_by_css(Constants.Dashboard.Checklist.AddNS.CSS, - Constants.Dashboard.Overview.NextSteps.Add.TITLE) - Helper.internal_assert( - Constants.Dashboard.Checklist.AddNS.TITLE, - Get.by_css(Constants.FEGeneral.CSS.H2)) diff --git a/services/frontend/fe_user.py b/services/frontend/fe_user.py deleted file mode 100644 index 1438007..0000000 --- a/services/frontend/fe_user.py +++ /dev/null @@ -1,455 +0,0 @@ - -# ============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.select import Select - -from services.api.api_user import APIUser -from services.api.api_virtual_function import APIVirtualFunction -from services.constants import Constants -from services.database.db_general import DBGeneral -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.helper import Helper -from services.logging_service import LoggingServiceFactory -from services.session import session - - -logger = LoggingServiceFactory.get_logger() - - -class FEUser: - - @staticmethod - def login( - email, - password, - expected_element=Constants.Dashboard.Statuses.Title.ID, - element_type="id"): - try: - logger.debug("Verifying and Insert Login page elements:") - logger.debug("Insert Email " + email) - Wait.name(Constants.Login.Email.NAME, wait_for_page=True) - Enter.text_by_name(Constants.Login.Email.NAME, email) - logger.debug("Insert Password") - Enter.text_by_name(Constants.Login.Password.NAME, password) - logger.debug("Click Login Button") - Click.css(Constants.SubmitButton.CSS) - logger.debug("Login Button clicked") - if element_type == 'id': - Wait.id(expected_element, True) - elif element_type == 'css': - Wait.css(expected_element, True) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "Login FAILED: email=%s password=%s" % (email, password) - logger.error(errorMsg) - raise Exception(errorMsg, e) - - @staticmethod - def relogin( - email, - password, - expected_element=Constants.Dashboard.Statuses.Title.ID, - element_type="id"): - FEGeneral.re_open(Constants.Default.LoginURL.TEXT) - FEUser.login(email, password, expected_element, element_type) - - @staticmethod - def logout(): - Click.id(Constants.Dashboard.Avatar.ID) - Click.link_text(Constants.Dashboard.Avatar.Logout.LINK_TEXT) - - @staticmethod - def activate_and_login( - email, - password, - expected_element=Constants.Dashboard.Statuses.Title.ID, - element_type="id"): - activationUrl = DBUser.get_activation_url(email) - FEGeneral.re_open(activationUrl) - FEUser.login(email, password, expected_element, element_type) - - @staticmethod - def open_account_form(): - Click.id(Constants.Dashboard.Avatar.ID, wait_for_page=True) - Click.link_text( - Constants.Dashboard.Avatar.Account.LINK_TEXT, wait_for_page=True) - - @staticmethod - # Update account API - only adds new SSH key! - def update_account_and_return_changes(): - try: - Select(session.ice_driver.find_element_by_name( - "company")).select_by_visible_text("Nokia") - randomName = Helper.rand_string("randomString") - Enter.text_by_name("fullname", randomName) - phone = "97258" + Helper.rand_string("randomNumber", 6) - Enter.text_by_name("phone", phone) - password = Constants.Default.Password.NewPass.TEXT - Enter.text_by_name("password", password) - Enter.text_by_name("confirm_password", password) - Wait.text_by_css("button.btn.btn-primary", "Update") - Click.css("button.btn.btn-primary") - Wait.text_by_id( - Constants.Toast.ID, "Account was updated successfully!") - Click.id(Constants.Dashboard.Statuses.ID) - - accountObj = [randomName, phone, password] - return accountObj - # If failed - count the failure and add the error to list of errors. - except BaseException: - errorMsg = "Failed in update accaunt ." - raise Exception(errorMsg) - raise - - @staticmethod - def go_to_account(): - try: - FEUser.click_on_avatar() - FEUser.click_on_account() - except Exception as e: - errorMsg = "Failed to go to Account page." - raise Exception(errorMsg, e) - - @staticmethod - def go_to_notifications(): - try: - FEUser.click_on_avatar() - FEUser.click_on_notifications() - Wait.page_has_loaded() - except Exception as e: - errorMsg = "Failed to go to Notifications page." - raise Exception(errorMsg, e) - - @staticmethod - def click_on_avatar(): - try: - Click.id(Constants.Dashboard.Avatar.ID, wait_for_page=True) - except Exception as e: - errorMsg = "Failed to click_on on Avatar." - raise Exception(errorMsg, e) - - @staticmethod - def click_on_admin(): - try: - Click.id( - Constants.Dashboard.Avatar.Admin.Title.ID, wait_for_page=True) - except Exception as e: - errorMsg = "Failed to click_on on Admin." - raise Exception(errorMsg, e) - - @staticmethod - def click_on_feedback(): - Click.id(Constants.Dashboard.Feedback.ID, wait_for_page=True) - Wait.id( - Constants.Dashboard.Feedback.FeedbackModal.SAVE_BTN_ID, - wait_for_page=True) - - @staticmethod - def validate_feedback(description, user_email): - query = "SELECT user_id FROM ice_feedback where " +\ - "description = '{desc}'".format( - desc=description) - feedback_user_uuid = DBGeneral.select_query(query) - query = "SELECT id FROM ice_user_profile where " +\ - "email = '{email}'".format( - email=user_email) - user_uuid = DBGeneral.select_query(query) - Helper.internal_assert(user_uuid, feedback_user_uuid) - - @staticmethod - def add_feedback(): - Wait.css("textarea[name=\"description\"]", wait_for_page=True) - description = Helper.rand_string("randomString") - Enter.text_by_css("textarea[name=\"description\"]", description) - Click.id( - Constants.Dashboard.Feedback.FeedbackModal.SAVE_BTN_ID, - wait_for_page=True) - Wait.text_by_id(Constants.Toast.ID, - "Feedback was sent successfully.", wait_for_page=True) - return description - - @staticmethod - def click_on_account(): - try: - Click.link_text(Constants.Dashboard.Avatar.Account.LINK_TEXT) - Wait.text_by_css(Constants.Dashboard.Avatar.Account.Title.CSS, - Constants.Dashboard.Avatar.Account.Title.TEXT) - except Exception as e: - errorMsg = "Failed to click_on on Admin." - raise Exception(errorMsg, e) - - @staticmethod - def click_on_notifications(): - try: - Click.link_text( - Constants.Dashboard.Avatar.Notifications.LINK_TEXT, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.Avatar.Notifications.Title.ID, - Constants.Dashboard.Avatar.Notifications.Title.TEXT, - wait_for_page=True) - except Exception as e: - errorMsg = "Failed to click_on on Admin." - raise Exception(errorMsg, e) - - @staticmethod - def go_to_admin(): - try: - FEUser.click_on_avatar() - FEUser.click_on_admin() - except Exception as e: - errorMsg = "Failed to go to Admin page." - raise Exception(errorMsg, e) - - @staticmethod - def assigned_one_NS_to_user(user_content): - nextStepsNumber = int( - Get.by_id("next-steps-header").split('(')[1][:-1]) - if (nextStepsNumber != 0): - logger.error("assigned ns: " + str(nextStepsNumber)) - logger.error( - "APIUser should not have assigned next steps at first login.") - raise - if (Get.by_id("next-steps-list") != - "No next steps are assigned to you."): - logger.error( - "No assigned next steps and text 'No next steps are " + - "assigned to you.' was not found.") - raise - token = "token " + APIUser.login_user(user_content['el_email']) - user_content['session_token'] = token - logger.debug( - "Adding new next step (via api) and assigning it to user " + - user_content['full_name']) - APIVirtualFunction.add_next_step(user_content) - logger.debug( - "Refresh page and look for changes in assigned " + - "next steps section:") - FEGeneral.refresh() - logger.debug(" > Check if number has changed in 'Assigned To You'") - FEUser.logout() - FEUser.login( - user_content['email'], Constants.Default.Password.TEXT) - text = Get.by_id("next-steps-header", True) - Helper.internal_assert(text, "Assigned To You (1)") - - @staticmethod - def set_ssh_key_from_account(key, is_negative=False): - FEUser.go_to_account() - Enter.text_by_name(Constants.Dashboard.Avatar.Account.SSHKey.NAME, key) - Click.css(Constants.SubmitButton.CSS) - if is_negative: - Wait.text_by_id( - Constants.Toast.ID, - Constants.Dashboard.Avatar.Account.SSHKey.UpdateFailed.TEXT) - else: - Wait.text_by_id( - Constants.Toast.ID, - Constants.Dashboard.Avatar.Account.Update.Success.TEXT) - - @staticmethod - def reset_password(): - Wait.text_by_css( - Constants.UpdatePassword.Title.CSS, - Constants.UpdatePassword.Title.TEXT) - Wait.text_by_css( - Constants.UpdatePassword.SubTitle.CSS, - Constants.UpdatePassword.SubTitle.TEXT) - Wait.text_by_css( - Constants.SubmitButton.CSS, Constants.UpdatePassword.Button.TEXT) - Enter.text_by_name( - Constants.UpdatePassword.Password.NAME, - Constants.Default.Password.NewPass.TEXT) - Enter.text_by_name( - Constants.UpdatePassword.ConfirmPassword.NAME, - Constants.Default.Password.NewPass.TEXT) - Click.css(Constants.SubmitButton.CSS) - Wait.text_by_id( - Constants.Toast.ID, Constants.UpdatePassword.Toast.TEXT) - - @staticmethod - def delete_notification(notificationID): - if isinstance(notificationID, tuple): - notificationID = notificationID[0] - delete_button = Constants.Dashboard.Avatar.Notifications.\ - DeleteNotification.ID + notificationID - # Click on delete button. - Click.id(delete_button, wait_for_page=True) - Wait.id_to_dissappear(delete_button) - - @staticmethod - def validate_notifications(notificationIDs, notification_list): - ui_list = [] - for notifID in notificationIDs: - if isinstance(notifID, tuple): - notifID = notifID[0] - ui_list.append(str(Get.by_id( - Constants.Dashboard.Avatar.Notifications. - NotificationColumn.ID + notifID))) - for activity in notification_list: - if not any(activity in s for s in ui_list): - raise AssertionError( - "Activity: \"" + activity + "\" not appears in UI") - - @staticmethod - def click_on_export_excel(user_content): - Enter.text_by_id( - Constants.Dashboard.Statuses.SearchBox.ID, user_content['vfName']) - engName = user_content[ - 'engagement_manual_id'] + ": " + user_content['vfName'] - engSearchID = "eng-" + engName - Wait.id(engSearchID) - # Find the download link and click it - Click.id(Constants.Dashboard.Statuses.ExportExcel.ID) - - @staticmethod - def open_invite_team_member_form(vf_left_nav_id): - Click.id(vf_left_nav_id) - Click.id(Constants.Dashboard.Overview.TeamMember.ID) - Wait.text_by_name( - Constants.Dashboard.Wizard.InviteTeamMembers.Title.NAME, - Constants.Dashboard.Wizard.InviteTeamMembers.Title.TEXT) - - @staticmethod - def invite_single_user_to_team(email): - Enter.text_by_name("email", email, wait_for_page=True) - Click.css(Constants.SubmitButton.CSS, wait_for_page=True) - - @staticmethod - def go_to_user_profile_settings(): - FEUser.go_to_account() - Click.id( - Constants.Dashboard.Avatar.Account.UserProfileSettings.ID, - wait_for_page=True) - Wait.text_by_id( - Constants.Dashboard.Avatar.Account.UserProfileSettings.TitleID, - Constants.Dashboard.Avatar.Account.UserProfileSettings.TitleText, - wait_for_page=True) - - @staticmethod - def check_user_profile_settings_checkboxes(): - Click.id( - Constants.Dashboard.Avatar.Account. - UserProfileSettings.ReceiveEmailsID, - wait_for_page=True) - Click.id( - Constants.Dashboard.Avatar.Account.UserProfileSettings. - ReceiveEmailEveryTimeID, - wait_for_page=True) - Click.id( - Constants.Dashboard.Avatar.Account.UserProfileSettings. - ReceiveDigestEmailID, - wait_for_page=True) - Click.id( - Constants.Dashboard.Avatar.Account.UserProfileSettings. - UpdateButtonID, - wait_for_page=True) - - @staticmethod - def validate_user_profile_settings_checkboxes(checked): - Wait.page_has_loaded() - receive_emails = Get.is_selected_by_id( - Constants.Dashboard.Avatar.Account.UserProfileSettings. - ReceiveEmailsID, True) - Helper.internal_assert(receive_emails, checked) - Get.is_selected_by_id( - Constants.Dashboard.Avatar.Account.UserProfileSettings. - ReceiveNotificationsID, True) - receive_email_every_time = Get.is_selected_by_id( - Constants.Dashboard.Avatar.Account.UserProfileSettings. - ReceiveEmailEveryTimeID, True) - Helper.internal_assert(receive_email_every_time, checked) - receive_digest_email = Get.is_selected_by_id( - Constants.Dashboard.Avatar.Account.UserProfileSettings. - ReceiveDigestEmailID, True) - Helper.internal_assert(receive_digest_email, not checked) - - @staticmethod - def compare_notifications_count_for_user(expected_count): - Wait.text_by_id( - Constants.Dashboard.Avatar.Notifications.Count.ID, - expected_count, - True) - - @staticmethod - def check_notification_number_is_not_presented(): - FEGeneral.refresh() - Wait.id_to_dissappear( - Constants.Dashboard.Avatar.Notifications.Count.ID, - wait_for_page=True) - - @staticmethod - def validate_account_details(full_name, phone_number, ssh_key): - Helper.internal_assert(full_name, Get.value_by_name( - Constants.Dashboard.Avatar.Account.FullName.NAME)) - Helper.internal_assert(phone_number, Get.value_by_name( - Constants.Dashboard.Avatar.Account.Phone.NAME)) - Helper.internal_assert(ssh_key, Get.value_by_name( - Constants.Dashboard.Avatar.Account.SSHKey.NAME)) - - @staticmethod - def check_rgwa_access_key(my_key): - Wait.text_by_id( - Constants.Dashboard.Avatar.Account.RGWA.Key.KEY_ID, my_key) - - @staticmethod - def check_rgwa_access_secret(my_secret): - Click.id(Constants.Dashboard.Avatar.Account.RGWA.Secret.BUTTON_ID) - Wait.text_by_id( - Constants.Dashboard.Avatar.Account.RGWA.Secret.SECRET_ID, - my_secret) - - @staticmethod - def get_rgwa_access_secret(): - Click.id(Constants.Dashboard.Avatar.Account.RGWA.Secret.BUTTON_ID, - wait_for_page=True) - secret = Get.by_id( - Constants.Dashboard.Avatar.Account.RGWA.Secret.SECRET_ID, - wait_for_page=True) - return secret - - @staticmethod - def check_rgwa_access_secret_not_presented(): - Wait.text_by_id( - Constants.Dashboard.Avatar.Account.RGWA.Secret.SECRET_ID, - Constants.Dashboard.Avatar.Account.RGWA.Secret.SECRET_TEXT) diff --git a/services/frontend/fe_wizard.py b/services/frontend/fe_wizard.py deleted file mode 100644 index c299a4b..0000000 --- a/services/frontend/fe_wizard.py +++ /dev/null @@ -1,240 +0,0 @@ - -# ============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 datetime import datetime - -from selenium.webdriver.support.ui import Select - -from services.constants import Constants, ServiceProvider -from services.frontend.base_actions.click import Click -from services.frontend.base_actions.enter import Enter -from services.frontend.base_actions.wait import Wait -from services.helper import Helper -from services.logging_service import LoggingServiceFactory -from services.session import session - - -logger = LoggingServiceFactory.get_logger() - - -class FEWizard: - - E2Edate = None - - @staticmethod - def add_vf(): - try: - logger.debug("Tab Add Virtual Functions") - Wait.text_by_css( - Constants.Dashboard.Wizard.Title.CSS, - Constants.Dashboard.Wizard.AddVF.Title.TEXT, - wait_for_page=True) - vfName = "newVF" + Helper.rand_string("randomString") - vfVersion = "newVFVersion" + \ - Helper.rand_string( - "randomNumber") + Helper.rand_string("randomString") - Enter.text_by_name("virtualFunction", vfName) - Enter.text_by_name("VFversion", vfVersion, wait_for_page=True) - FEWizard.date_picker_wizard() - Select(session.ice_driver.find_element_by_id( - Constants.Dashboard.Wizard.AddVF.AIC_Version.TEXT - )).select_by_visible_text("AIC 3.5") - Select(session.ice_driver.find_element_by_id( - Constants.Dashboard.Wizard.AddVF.ECOMP_Release.TEXT - )).select_by_visible_text("Unknown") - session.E2Edate = FEWizard.get_lab_entry_date() - Click.css(Constants.SubmitButton.CSS, wait_for_page=True) - Wait.page_has_loaded() - Wait.name_to_dissappear("Add Virtual Function") - return vfName - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "Failed to add a Virtual Function via modal window. " +\ - "Exception " +\ - str(e) - raise Exception(errorMsg) - - @staticmethod - def get_lab_entry_date(): - E2Edate = session.ice_driver.find_element_by_id( - "add-vf-hidden-target-lab-date").get_attribute("value") - return str(E2Edate) - - @staticmethod - def add_vendor_contact(): - logger.debug("Tab Add Vendor Contact") - Wait.text_by_css( - Constants.Dashboard.Wizard.Title.CSS, - Constants.Dashboard.Wizard.AddVendorContact.Title.TEXT, - wait_for_page=True) - Select(session.ice_driver.find_element_by_name( - "company")).select_by_visible_text("Ericsson") - fullname = Helper.rand_string( - "randomString") + Helper.rand_string("randomString") - Enter.text_by_name("fullname", fullname) - email = Helper.rand_string("randomString") + "@ericson.com" - Enter.text_by_name("email", email) - phone = "201" + Helper.rand_string("randomNumber", 6) - Enter.text_by_name("phone", phone) - Click.css(Constants.SubmitButton.CSS, wait_for_page=True) - Wait.name_to_dissappear("Add Vendor Contact", wait_for_page=True) - vendor = {"company": "Ericsson", "full_name": fullname, - "email": email, "phone": phone} - return vendor - - @staticmethod - def add_service_provider_internal(): - logger.debug( - "Tab Add " + ServiceProvider.MainServiceProvider + " Sponsor") - Wait.text_by_css( - Constants.Dashboard.Wizard.Title.CSS, - "Add " + - ServiceProvider.MainServiceProvider + - " Sponsor") - fullname = Helper.rand_string( - "randomString") + Helper.rand_string("randomString") - Enter.text_by_name("fullname", fullname) - email = Helper.rand_string( - "randomString") + "@" + ServiceProvider.email - Enter.text_by_name("email", email) - phone = "201" + Helper.rand_string("randomNumber", 6) - logger.debug(phone) - Enter.text_by_name("phone", phone) - Click.css(Constants.SubmitButton.CSS) - Wait.name_to_dissappear("Add AT&T Sponsor") - sponsor = {"company": ServiceProvider.MainServiceProvider, - "full_name": fullname, "email": email, "phone": phone} - return sponsor - - @staticmethod - def invite_team_members(email): - try: - logger.debug("Tab Invite Team Members") - Wait.text_by_name( - Constants.Dashboard.Wizard.InviteTeamMembers.Title.NAME, - Constants.Dashboard.Wizard.InviteTeamMembers.Title.TEXT) - Enter.text_by_name("email", email) - Wait.text_by_css( - Constants.SubmitButton.CSS, - Constants.Dashboard.Wizard.InviteTeamMembers.Button.TEXT) - Click.css(Constants.SubmitButton.CSS) - Wait.name_to_dissappear( - Constants.Dashboard.Wizard.InviteTeamMembers.Title.NAME) - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "FAILED in Tab Invite Team Members. Exception = %s" % e - raise Exception(errorMsg) - - @staticmethod - def add_ssh_key(is_negative=False): - logger.debug("About to add an SSH Key in modal window") - try: # Add SSH Key from modal window and return key value. - Wait.text_by_name(Constants.Dashboard.Wizard.AddSSHKey.Title.NAME, - Constants.Dashboard.Wizard.AddSSHKey.Title.TEXT) - # Generate an SSH Public Key. - sshKey = Helper.generate_sshpub_key() - if is_negative: - sshKey = sshKey[8:] - Enter.text_by_name("key", sshKey) - - # Check that the submit button exists. - Wait.text_by_css( - Constants.SubmitButton.CSS, - Constants.Dashboard.Wizard.AddSSHKey.Title.TEXT) - - Click.css(Constants.SubmitButton.CSS) # Click on submit button. - if is_negative: - Wait.text_by_id( - Constants.Toast.ID, - Constants.Dashboard.Avatar.Account - .SSHKey.UpdateFailed.TEXT) - else: - Wait.name_to_dissappear( - Constants.Dashboard.Wizard.AddSSHKey.Title.NAME) - logger.debug("SSH Key added via modal window.") - return sshKey - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "Failed to add an SSH Key in " +\ - "the modal window. Exception=" + \ - str(e) - raise Exception(errorMsg) - - @staticmethod - def invite_team_members_modal(email, wait_modal_to_disappear=True): - try: - Click.id( - Constants.Dashboard.Overview.TeamMember.ID, - wait_for_page=True) - Wait.text_by_css( - Constants.Dashboard.Wizard.Title.CSS, - Constants.Dashboard.Wizard.InviteTeamMembers.Title.TEXT) - Enter.text_by_name("email", email) - Wait.text_by_css( - Constants.SubmitButton.CSS, - Constants.Dashboard.Wizard.InviteTeamMembers.Button.TEXT) - Click.css(".inviteMembers-form button.btn.btn-primary", True) - if wait_modal_to_disappear: - Wait.modal_to_dissappear() - # If failed - count the failure and add the error to list of errors. - except Exception as e: - errorMsg = "FAILED in PopUp Invite Team Members. Exception=" + \ - str(e) - raise Exception(errorMsg) - - @staticmethod - def date_picker_add_ns(count): - try: - session.ice_driver.execute_script( - "var el = angular.element(document.querySelector" + - "('.addNextSteps')); el.scope().vm.nextSteps[" + - str(count) + - "].duedate = new Date('" + - str( - datetime.today().isoformat()) + - "')") - Click.css("div.modal-content", wait_for_page=True) - except Exception as e: - errorMsg = "Failed to select date with datePicker." - - raise Exception(errorMsg, str(e)) - - @staticmethod - def date_picker_wizard(): - Enter.date_picker('#e2e-lab-entry-date', 'choice.TargetLab') - Click.css('input[name="virtualFunction"]', wait_for_page=True) |