Merge "Fix grafana UI tests"

This commit is contained in:
Jenkins
2016-09-19 15:15:45 +00:00
committed by Gerrit Code Review
3 changed files with 94 additions and 63 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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):