35da6c52e4
test_extend_volume_demo test_volume_launch_as_instance_demo test_volume_upload_to_image_demo Change-Id: Ic577a94514881e56d32087a4fc4d6a06414ff568
125 lines
4.3 KiB
Python
125 lines
4.3 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from dataclasses import dataclass
|
|
from selenium.common import exceptions
|
|
from selenium.webdriver.common.by import By
|
|
from selenium.webdriver.support import expected_conditions as EC
|
|
from selenium.webdriver.support.wait import WebDriverWait
|
|
|
|
|
|
@dataclass
|
|
class TableDefinition:
|
|
"""Class for keeping track of fields on the page"""
|
|
next: bool
|
|
prev: bool
|
|
count: int
|
|
names: list
|
|
|
|
|
|
def get_and_dismiss_messages(element):
|
|
messages = element.find_elements_by_css_selector("div.messages div.alert")
|
|
collect = []
|
|
for message in messages:
|
|
text = message.find_element_by_css_selector("p, div").text
|
|
message.find_element_by_css_selector("a.close").click()
|
|
collect.append(text)
|
|
return collect
|
|
|
|
|
|
def find_already_visible_element_by_xpath(element, driver):
|
|
return WebDriverWait(driver, 160).until(
|
|
EC.visibility_of_element_located((By.XPATH, element)))
|
|
|
|
|
|
def select_from_dropdown(element, label):
|
|
menu_button = element.find_element_by_css_selector(
|
|
".dropdown-toggle"
|
|
)
|
|
menu_button.click()
|
|
options = element.find_element_by_css_selector("ul.dropdown-menu")
|
|
selection = options.find_element_by_xpath(
|
|
f".//*[normalize-space()='{label}']"
|
|
)
|
|
selection.click()
|
|
|
|
|
|
def select_from_specific_dropdown_in_form(driver, dropdown_id, label):
|
|
dropdown = driver.find_element_by_xpath(
|
|
f".//*[@for='{dropdown_id}']/following-sibling::div")
|
|
dropdown.click()
|
|
dropdown_options = dropdown.find_element_by_css_selector(
|
|
"ul.dropdown-menu")
|
|
dropdown_options.find_element_by_xpath(
|
|
f".//*[normalize-space()='{label}']").click()
|
|
|
|
|
|
def confirm_modal(element):
|
|
confirm = element.find_element_by_css_selector(
|
|
".modal-dialog .btn-danger"
|
|
)
|
|
confirm.click()
|
|
|
|
|
|
def is_next_link_available(driver):
|
|
try:
|
|
return driver.find_element_by_link_text("Next »").is_displayed()
|
|
except (exceptions.NoSuchElementException,
|
|
exceptions.ElementNotVisibleException):
|
|
return False
|
|
|
|
|
|
def is_prev_link_available(driver):
|
|
try:
|
|
return driver.find_element_by_link_text("« Prev").is_displayed()
|
|
except (exceptions.NoSuchElementException,
|
|
exceptions.ElementNotVisibleException):
|
|
return False
|
|
|
|
|
|
def get_table_definition(driver, sorting=False):
|
|
names = driver.find_elements_by_css_selector('table tr td:nth-child(2)')
|
|
if sorting:
|
|
names.sort()
|
|
actual_table = TableDefinition(next=is_next_link_available(driver),
|
|
prev=is_prev_link_available(driver),
|
|
count=len(names), names=[names[0].text])
|
|
return actual_table
|
|
|
|
|
|
def get_image_table_definition(driver, sorting=False):
|
|
"""This function is specific to Image table definition"""
|
|
names = driver.find_elements_by_css_selector("td[class='rsp-p1 word-wrap']")
|
|
if sorting:
|
|
names.sort()
|
|
actual_table = TableDefinition(next=is_next_link_available(driver),
|
|
prev=is_prev_link_available(driver),
|
|
count=len(names), names=[names[0].text])
|
|
return actual_table
|
|
|
|
|
|
def select_from_transfer_table(element, label):
|
|
# Choose row from available Images, Flavors, Networks, etc.
|
|
# In launch tab for example: m1.tiny for Flavor, cirros for image, etc.
|
|
|
|
try:
|
|
element.find_element_by_xpath(
|
|
f".//*[text()='{label}']//ancestor::tr/td//*"
|
|
f"[@class='btn btn-default fa fa-arrow-up']").click()
|
|
except exceptions.NoSuchElementException:
|
|
try:
|
|
element.find_element_by_xpath(
|
|
f".//*[text()='{label}']//ancestor::tr/td//*"
|
|
f"[@class='btn btn-default fa fa-arrow-down']")
|
|
except exceptions.NoSuchElementException:
|
|
raise
|