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