From 2a6ba687d0efc5209e945291b685386a1d6bbe0a Mon Sep 17 00:00:00 2001 From: Michal Reznik Date: Mon, 26 Mar 2018 12:34:25 +0200 Subject: [PATCH] test_web_ui: extend ui_driver methods Add close_all_dialogs(),change assert_last_dialog_details() method to assert_last_error_dialog() to make it more generic and tweak add_record() method to skip asserts so we can assert later. We are also changing assert_record_value() to accept list of values and adding select_multiple_records(). https://pagure.io/freeipa/issue/7463 Reviewed-By: Petr Vobornik --- ipatests/test_webui/ui_driver.py | 69 +++++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 5 deletions(-) diff --git a/ipatests/test_webui/ui_driver.py b/ipatests/test_webui/ui_driver.py index 1cc358397..d769f6f14 100644 --- a/ipatests/test_webui/ui_driver.py +++ b/ipatests/test_webui/ui_driver.py @@ -727,6 +727,20 @@ class UI_driver(object): else: break + def close_all_dialogs(self): + """ + Close all currently opened dialogs + """ + self.wait() + while True: + s = ".modal.fade.in .modal-header button.close" + btn = self.find(s, By.CSS_SELECTOR) + if btn: + btn.click() + self.wait(0.5) + else: + break + def get_form(self): """ Get last dialog or visible facet @@ -1034,6 +1048,15 @@ class UI_driver(object): 'Record was not checked: %s' % input_s self.wait() + def select_multiple_records(self, records): + """ + Select multiple records + """ + + for data in records: + pkey = data['pkey'] + self.select_record(pkey) + def get_record_value(self, pkey, column, parent=None, table_name=None): """ Get table column's text value @@ -1246,10 +1269,13 @@ class UI_driver(object): def add_record(self, entity, data, facet='search', facet_btn='add', dialog_btn='add', delete=False, pre_delete=True, - dialog_name='add', navigate=True, combobox_input=None): + dialog_name='add', navigate=True, combobox_input=None, + negative=False): """ Add records. + When negative=True we are skipping final assertions. + Expected data format: { 'pkey': 'key', @@ -1295,6 +1321,9 @@ class UI_driver(object): self.dialog_button_click('ok') self.wait_for_request() + if negative: + return + # check for error self.assert_no_error_dialog() self.wait_for_request() @@ -1861,12 +1890,20 @@ class UI_driver(object): key = pkey self.assert_record(key, negative=negative) - def assert_record_value(self, expected, pkey, column, parent=None, table_name=None): + def assert_record_value(self, expected, pkeys, column, parent=None, + table_name=None): """ - Assert that column's value of record defined by pkey equals expected value. + Assert that column's value of record defined by pkey equals expected + value. """ - val = self.get_record_value(pkey, column, parent, table_name) - assert expected == val, "Invalid value: '%s'. Expected: '%s'." % (val, expected) + + if type(pkeys) is not list: + pkeys = [pkeys] + + for pkey in pkeys: + val = self.get_record_value(pkey, column, parent, table_name) + assert expected == val, ("Invalid value: '%s'. Expected: '%s'." + % (val, expected)) def assert_class(self, element, cls, negative=False): """ @@ -1980,3 +2017,25 @@ class UI_driver(object): assert is_present, "Notification not present" if assert_text: assert assert_text in is_present.text + + def assert_last_error_dialog(self, expected_err, details=False, + dialog_name='error_dialog'): + """ + Assert error dialog body text or when details=True click on + 'Show details' and assert text there + """ + + err_dialog = self.get_last_error_dialog(dialog_name=dialog_name) + + if details: + # open "Show details" paragraph + s = 'a[title="Show details"]' + details = self.find(s, By.CSS_SELECTOR) + details.click() + + s = 'ul.error-container li p' + self.assert_text(s, expected_err, parent=err_dialog) + + else: + s = '.modal-body div p' + self.assert_text(s, expected_err, parent=err_dialog)