Merge "Fix grafana UI tests"
This commit is contained in:
@@ -161,3 +161,32 @@ class PageObject(BaseWebObject):
|
||||
|
||||
def refresh_page(self):
|
||||
self.driver.refresh()
|
||||
|
||||
|
||||
class DropDownMenu(BaseWebObject):
|
||||
|
||||
_default_src_locator = None
|
||||
|
||||
_options_list_locator = None
|
||||
|
||||
_items_locator = None
|
||||
|
||||
def __init__(self, driver):
|
||||
super(DropDownMenu, self).__init__(driver)
|
||||
self.src_elem = self._get_element(*self._default_src_locator)
|
||||
|
||||
def is_opened(self):
|
||||
return self._is_element_present(*self._options_list_locator)
|
||||
|
||||
def open(self):
|
||||
if not self.is_opened():
|
||||
self.src_elem.click()
|
||||
|
||||
@property
|
||||
def options(self):
|
||||
self.open()
|
||||
return self._get_element(*self._options_list_locator)
|
||||
|
||||
@property
|
||||
def items(self):
|
||||
return self.options.find_elements(*self._items_locator)
|
||||
|
@@ -14,19 +14,26 @@
|
||||
from fuelweb_test import logger
|
||||
from proboscis import asserts
|
||||
|
||||
from stacklight_tests.helpers.ui_tester import ui_driver
|
||||
from stacklight_tests.helpers import ui_tester
|
||||
from stacklight_tests.influxdb_grafana.grafana_ui import pages
|
||||
|
||||
|
||||
def check_grafana_dashboards(grafana_url):
|
||||
login_key_xpath = '//form[1]//button[1]'
|
||||
|
||||
login_key_xpath = '/html/body/div/div[2]/div/div/div[2]/form/div[2]/button'
|
||||
|
||||
with ui_driver(grafana_url, "Grafana", login_key_xpath) as driver:
|
||||
login_page = pages.LoginPage(driver)
|
||||
login_page.is_login_page()
|
||||
home_page = login_page.login("grafana", "grafanapass")
|
||||
home_page.is_main_page()
|
||||
def _get_main_page(driver, auth_data):
|
||||
login_page = pages.LoginPage(driver)
|
||||
login_page.is_login_page()
|
||||
home_page = login_page.login(*auth_data)
|
||||
home_page.is_main_page()
|
||||
return home_page
|
||||
|
||||
|
||||
def check_grafana_dashboards(url):
|
||||
|
||||
with ui_tester.ui_driver(url, "Grafana", login_key_xpath) as driver:
|
||||
user = ("grafana", "grafanapass")
|
||||
home_page = _get_main_page(driver, user)
|
||||
dashboard_names = {
|
||||
"Apache", "Cinder", "Elasticsearch", "Glance", "HAProxy", "Heat",
|
||||
"Hypervisor", "InfluxDB", "Keystone", "LMA self-monitoring",
|
||||
@@ -35,7 +42,8 @@ def check_grafana_dashboards(grafana_url):
|
||||
dashboard_names = {
|
||||
panel_name.lower() for panel_name in dashboard_names}
|
||||
available_dashboards_names = {
|
||||
dashboard.text.lower() for dashboard in home_page.dashboards}
|
||||
dashboard.text.lower()
|
||||
for dashboard in home_page.dashboard_menu.items}
|
||||
msg = ("There is not enough panels in available panels, "
|
||||
"panels that are not presented: {}")
|
||||
# NOTE(rpromyshlennikov): should there be 'elasticsearch'
|
||||
@@ -48,29 +56,25 @@ def check_grafana_dashboards(grafana_url):
|
||||
dashboard_page.get_back_to_home()
|
||||
|
||||
|
||||
def check_grafana_ldap(grafana_url, authz=False, uadmin=("uadmin", "uadmin"),
|
||||
uviewer=("uviewer", "uviewer")):
|
||||
|
||||
_check_available_menu_items_for_user(uadmin, grafana_url, authz)
|
||||
_check_available_menu_items_for_user(uviewer, grafana_url, authz)
|
||||
|
||||
|
||||
def _check_available_menu_items_for_user(user, url, authz):
|
||||
logger.info("Checking Grafana service at {} with LDAP authorization "
|
||||
"for {} user".format(url, user[0]))
|
||||
login_key_xpath = '//form[1]//button[1]'
|
||||
admin_panels = ["Dashboards", "Data Sources", "Plugins"]
|
||||
viewer_panel = list(admin_panels[1]) if authz else admin_panels
|
||||
admin_panels = ["Dashboards", "Data Sources", "Plugins", "Admin"]
|
||||
viewer_panel = admin_panels[:1] if authz else admin_panels
|
||||
|
||||
with ui_driver(url, "Grafana", login_key_xpath) as driver:
|
||||
login_page = pages.LoginPage(driver)
|
||||
login_page.is_login_page()
|
||||
home_page = login_page.login(*user)
|
||||
home_page.is_main_page()
|
||||
menu_items = [name.text for name in home_page.main_menu_items]
|
||||
with ui_tester.ui_driver(url, "Grafana", login_key_xpath) as driver:
|
||||
home_page = _get_main_page(driver, user)
|
||||
menu_items = [name.text for name in home_page.main_menu.items]
|
||||
msg = "Not all required panels are available in main menu."
|
||||
asserts.assert_true(
|
||||
(admin_panels if ("uadmin" in user)
|
||||
else viewer_panel) == menu_items,
|
||||
msg
|
||||
)
|
||||
|
||||
|
||||
def check_grafana_ldap(grafana_url, authz=False,
|
||||
uadmin=("uadmin", "uadmin"),
|
||||
uviewer=("uviewer", "uviewer")):
|
||||
_check_available_menu_items_for_user(uadmin, grafana_url, authz)
|
||||
_check_available_menu_items_for_user(uviewer, grafana_url, authz)
|
||||
|
@@ -25,22 +25,38 @@ class DashboardPage(base_pages.PageObject):
|
||||
|
||||
|
||||
class MainPage(base_pages.PageObject):
|
||||
_dropdown_menu_locator = (
|
||||
_main_menu_locator = (
|
||||
by.By.CLASS_NAME,
|
||||
'navbar-brand-btn')
|
||||
|
||||
_dashboards_list_locator = (
|
||||
by.By.CLASS_NAME,
|
||||
'sidemenu'
|
||||
"navbar-brand-btn"
|
||||
)
|
||||
|
||||
_dashboard_locator = (by.By.CLASS_NAME,
|
||||
"search-item-dash-db")
|
||||
class MainDropDownMenu(base_pages.DropDownMenu):
|
||||
_default_src_locator = (
|
||||
by.By.CLASS_NAME,
|
||||
"navbar-brand-btn"
|
||||
)
|
||||
_options_list_locator = (
|
||||
by.By.CLASS_NAME,
|
||||
"sidemenu"
|
||||
)
|
||||
_items_locator = (
|
||||
by.By.CLASS_NAME,
|
||||
"dropdown"
|
||||
)
|
||||
|
||||
_dashboard_main_locator = (
|
||||
by.By.CLASS_NAME,
|
||||
"dropdown"
|
||||
)
|
||||
class DashboardDropDownMenu(base_pages.DropDownMenu):
|
||||
_default_src_locator = (
|
||||
by.By.CLASS_NAME,
|
||||
"icon-gf-dashboard"
|
||||
)
|
||||
_options_list_locator = (
|
||||
by.By.CLASS_NAME,
|
||||
"search-results-container"
|
||||
)
|
||||
_items_locator = (
|
||||
by.By.CLASS_NAME,
|
||||
"search-item-dash-db"
|
||||
)
|
||||
|
||||
def __init__(self, driver):
|
||||
super(MainPage, self).__init__(driver)
|
||||
@@ -48,37 +64,19 @@ class MainPage(base_pages.PageObject):
|
||||
|
||||
def is_main_page(self):
|
||||
return (self.is_the_current_page() and
|
||||
self._is_element_visible(*self._dropdown_menu_locator))
|
||||
self._is_element_visible(*self._main_menu_locator))
|
||||
|
||||
@property
|
||||
def dropdown_menu(self):
|
||||
return self._get_element(*self._dropdown_menu_locator)
|
||||
def main_menu(self):
|
||||
return self.MainDropDownMenu(self.driver)
|
||||
|
||||
@property
|
||||
def dashboards_list(self):
|
||||
self.open_dropdown_menu()
|
||||
return self._get_element(*self._dashboards_list_locator)
|
||||
|
||||
@property
|
||||
def main_menu_items(self):
|
||||
return self.dashboards_list.find_elements(
|
||||
*self._dashboard_main_locator
|
||||
)
|
||||
|
||||
@property
|
||||
def dashboards(self):
|
||||
return self.dashboards_list.find_elements(*self._dashboard_locator)
|
||||
|
||||
def is_dropdown_menu_opened(self):
|
||||
return self._is_element_present(*self._dashboards_list_locator)
|
||||
|
||||
def open_dropdown_menu(self):
|
||||
if not self.is_dropdown_menu_opened():
|
||||
self.dropdown_menu.click()
|
||||
def dashboard_menu(self):
|
||||
return self.DashboardDropDownMenu(self.driver)
|
||||
|
||||
def open_dashboard(self, dashboard_name):
|
||||
dashboards_mapping = {dashboard.text.lower(): dashboard
|
||||
for dashboard in self.dashboards}
|
||||
for dashboard in self.dashboard_menu.items}
|
||||
dashboards_mapping[dashboard_name.lower()].click()
|
||||
dashboard_page = DashboardPage(self.driver, dashboard_name)
|
||||
dashboard_page.is_dashboards_page()
|
||||
@@ -86,8 +84,8 @@ class MainPage(base_pages.PageObject):
|
||||
|
||||
|
||||
class LoginPage(base_pages.PageObject):
|
||||
_login_username_field_locator = (by.By.NAME, 'username')
|
||||
_login_password_field_locator = (by.By.NAME, 'password')
|
||||
_login_username_field_locator = (by.By.NAME, "username")
|
||||
_login_password_field_locator = (by.By.NAME, "password")
|
||||
_login_submit_button_locator = (by.By.CLASS_NAME, "btn")
|
||||
|
||||
def __init__(self, driver):
|
||||
|
Reference in New Issue
Block a user