diff --git a/openstack_dashboard/test/integration_tests/config.py b/openstack_dashboard/test/integration_tests/config.py index ee66cd22a7..21cc317784 100644 --- a/openstack_dashboard/test/integration_tests/config.py +++ b/openstack_dashboard/test/integration_tests/config.py @@ -108,9 +108,9 @@ AvailableServiceGroup = [ ] SeleniumGroup = [ - cfg.FloatOpt( - 'message_implicit_wait', - default=0.1, + cfg.IntOpt( + 'message_wait', + default=60, help='Timeout in seconds to wait for message confirmation modal'), cfg.IntOpt( 'implicit_wait', diff --git a/openstack_dashboard/test/integration_tests/horizon.conf b/openstack_dashboard/test/integration_tests/horizon.conf index e9ba006716..66be6c1f0b 100644 --- a/openstack_dashboard/test/integration_tests/horizon.conf +++ b/openstack_dashboard/test/integration_tests/horizon.conf @@ -14,8 +14,8 @@ help_url=https://docs.openstack.org/ [selenium] # Timeout in seconds to wait for message confirmation modal -# (float value) -message_implicit_wait=3 +# (integer value) +message_wait=60 # Timeout in seconds to wait for a page to become available # (integer value) diff --git a/openstack_dashboard/test/selenium/conftest.py b/openstack_dashboard/test/selenium/conftest.py index d0f7f81133..2ffbe2ebff 100644 --- a/openstack_dashboard/test/selenium/conftest.py +++ b/openstack_dashboard/test/selenium/conftest.py @@ -34,6 +34,7 @@ class Session: self.current_user = None self.current_project = None self.driver = driver + self.config = config self.credentials = { 'user': ( config.identity.username, @@ -84,7 +85,7 @@ class Session: selection = project_element.find_element_by_xpath( f'.//*[normalize-space()="{project}"]') selection.click() - widgets.get_and_dismiss_messages(self.driver) + widgets.get_and_dismiss_messages(self.driver, self.config) self.current_project = self.driver.find_element_by_xpath( self.project_name_xpath).text diff --git a/openstack_dashboard/test/selenium/integration/test_defaults.py b/openstack_dashboard/test/selenium/integration/test_defaults.py index 4290ac65db..f25067d81f 100644 --- a/openstack_dashboard/test/selenium/integration/test_defaults.py +++ b/openstack_dashboard/test/selenium/integration/test_defaults.py @@ -64,7 +64,7 @@ def test_update_compute_defaults(login, driver, openstack_admin, config, defaults_form.find_element_by_id("id_cores").clear() defaults_form.find_element_by_id("id_cores").send_keys(number_of_cores) defaults_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert 'Success: Default quotas updated.' in messages new_quotas = openstack_admin.compute.get( "/os-quota-class-sets/default").json() @@ -93,7 +93,7 @@ def test_update_volume_defaults(login, driver, openstack_admin, config, defaults_form.find_element_by_id("id_snapshots").send_keys( number_of_snapshots) defaults_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert 'Success: Default quotas updated.' in messages new_quotas = openstack_admin.block_storage.get( "/os-quota-class-sets/default").json() diff --git a/openstack_dashboard/test/selenium/integration/test_flavors.py b/openstack_dashboard/test/selenium/integration/test_flavors.py index 2770372589..55349b79f3 100644 --- a/openstack_dashboard/test/selenium/integration/test_flavors.py +++ b/openstack_dashboard/test/selenium/integration/test_flavors.py @@ -60,7 +60,7 @@ def test_create_flavor(login, driver, flavor_name, openstack_admin, flavors_form.find_element_by_id("id_disk_gb").send_keys(flavor_disk) flavors_form.find_element_by_css_selector( ".btn-primary[value='Create Flavor']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Success: Created new flavor "{flavor_name}".' in messages flavor_sdk = openstack_admin.compute.find_flavor(flavor_name) assert flavor_sdk is not None @@ -84,6 +84,6 @@ def test_delete_flavor(login, driver, flavor_name, new_flavor, config, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Flavor") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Flavor: {flavor_name}" in messages assert openstack_admin.compute.find_flavor(flavor_name) is None diff --git a/openstack_dashboard/test/selenium/integration/test_floatingips.py b/openstack_dashboard/test/selenium/integration/test_floatingips.py index 8edfeb738b..ce0b5d35f9 100644 --- a/openstack_dashboard/test/selenium/integration/test_floatingips.py +++ b/openstack_dashboard/test/selenium/integration/test_floatingips.py @@ -70,7 +70,7 @@ def test_allocate_floatingip(login, driver, config, openstack_demo, floatingip_form.find_element_by_id("id_description").send_keys( floatingip_description) floatingip_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) if len(messages) > 1: message = [msg for msg in messages if "Success: Allocated Floating IP" in msg][0] @@ -99,7 +99,7 @@ def test_release_floatingip(login, driver, openstack_demo, config, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Release Floating IP") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Released Floating IP: " f"{new_floating_ip.floating_ip_address}" in messages) assert openstack_demo.network.find_ip( @@ -128,7 +128,7 @@ def test_associate_floatingip(login, driver, openstack_demo, new_floating_ip, associateip_form, "id_port_id", f"{instance_name}: {new_instance_demo.private_v4}") associateip_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: IP address {new_floating_ip.floating_ip_address}" f" associated." in messages) assert (new_instance_demo.id == openstack_demo.network.find_ip( @@ -156,7 +156,7 @@ def test_disassociate_floatingip(login, driver, openstack_demo, config, assert len(rows) == 1 rows[0].find_element_by_css_selector(".data-table-action").click() widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Successfully disassociated Floating IP: " f"{instance_auto_ip}" in messages) instance_sdk = openstack_demo.compute.find_server(new_instance_demo.id) diff --git a/openstack_dashboard/test/selenium/integration/test_groups.py b/openstack_dashboard/test/selenium/integration/test_groups.py index a4dec820a6..b9b75a9c80 100644 --- a/openstack_dashboard/test/selenium/integration/test_groups.py +++ b/openstack_dashboard/test/selenium/integration/test_groups.py @@ -51,7 +51,7 @@ def test_create_group(login, driver, group_name, openstack_admin, config, group_form = driver.find_element_by_css_selector(".modal-dialog form") group_form.find_element_by_id("id_name").send_keys(group_name) group_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Success: Group "{group_name}" was successfully created.' in messages) assert openstack_admin.identity.find_group(group_name) is not None @@ -72,7 +72,7 @@ def test_delete_group(login, driver, group_name, openstack_admin, config, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Group") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Group: {group_name}" in messages assert openstack_admin.identity.find_group(group_name) is None @@ -98,7 +98,7 @@ def test_edit_group_name_and_description(login, driver, group_name, group_form.find_element_by_id("id_description").send_keys( f"EDITED_Description for: {group_name}") group_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert "Success: Group has been updated successfully." in messages assert (openstack_admin.identity.find_group( f"EDITED_{group_name}") is not None) diff --git a/openstack_dashboard/test/selenium/integration/test_grouptypes.py b/openstack_dashboard/test/selenium/integration/test_grouptypes.py index 24491fa504..c3df561d02 100644 --- a/openstack_dashboard/test/selenium/integration/test_grouptypes.py +++ b/openstack_dashboard/test/selenium/integration/test_grouptypes.py @@ -51,7 +51,7 @@ def test_create_grouptype(login, driver, grouptype_name, openstack_admin, grouptype_form = driver.find_element_by_css_selector(".modal-content form") grouptype_form.find_element_by_id("id_name").send_keys(grouptype_name) grouptype_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Success: Successfully created group type: {grouptype_name}' in messages) assert (openstack_admin.block_storage.find_group_type(grouptype_name) @@ -73,6 +73,6 @@ def test_delete_grouptype(login, driver, grouptype_name, openstack_admin, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Group Type") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Group Type: {grouptype_name}" in messages assert openstack_admin.block_storage.find_group_type(grouptype_name) is None diff --git a/openstack_dashboard/test/selenium/integration/test_host_aggregates.py b/openstack_dashboard/test/selenium/integration/test_host_aggregates.py index c8d526639b..e36e99df9b 100644 --- a/openstack_dashboard/test/selenium/integration/test_host_aggregates.py +++ b/openstack_dashboard/test/selenium/integration/test_host_aggregates.py @@ -65,7 +65,7 @@ def test_create_host_aggregate(login, driver, openstack_admin, config, host_aggregate_name) host_aggregate_form.find_element_by_css_selector( ".btn-primary[value='Create Host Aggregate']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Success: Created new host aggregate "{host_aggregate_name}".' in messages) is_host_aggregate_created_sdk = False @@ -93,7 +93,7 @@ def test_delete_host_aggregate(login, driver, openstack_admin, config, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Host Aggregate") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Deleted Host Aggregate: " f"{new_host_aggregate['aggregate']['name']}" in messages) is_host_aggregate_deleted_sdk = True diff --git a/openstack_dashboard/test/selenium/integration/test_images.py b/openstack_dashboard/test/selenium/integration/test_images.py index a2f16c0bd0..f3dc32d08b 100644 --- a/openstack_dashboard/test/selenium/integration/test_images.py +++ b/openstack_dashboard/test/selenium/integration/test_images.py @@ -163,7 +163,7 @@ def test_image_create_from_local_file_demo(login, driver, image_names, wizard.find_element_by_css_selector( "[label='QCOW2 - QEMU Emulator']").click() wizard.find_element_by_css_selector("button.btn-primary.finish").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Image {image_name} was successfully" f" created." in messages) assert openstack_demo.compute.find_image(image_name) is not None @@ -185,7 +185,7 @@ def test_image_delete_demo(login, driver, image_names, openstack_demo, ".//ancestor::tr/td[contains(@class,'actions_column')]") widgets.select_from_dropdown(actions_column, "Delete Image") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Image: {image_name}." in messages assert openstack_demo.compute.find_image(image_name) is None @@ -262,7 +262,7 @@ def test_image_create_from_local_file_admin(login, driver, image_names, wizard.find_element_by_css_selector( "[label='QCOW2 - QEMU Emulator']").click() wizard.find_element_by_css_selector("button.btn-primary.finish").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Image {image_name} was successfully" f" created." in messages) assert openstack_admin.compute.find_image(image_name) is not None @@ -284,7 +284,7 @@ def test_image_delete_admin(login, driver, image_names, openstack_admin, ".//ancestor::tr/td[contains(@class,'actions_column')]") widgets.select_from_dropdown(actions_column, "Delete Image") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Image: {image_name}." in messages assert openstack_admin.compute.find_image(image_name) is None @@ -393,7 +393,7 @@ def test_remove_protected_image_admin(login, driver, image_names, image_form.find_element_by_xpath(".//label[text()='No']").click() image_form.find_element_by_xpath( ".//button[@class='btn btn-primary finish']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Image {image_name} was successfully updated." in messages wait_for_steady_state_of_unprotected_image(openstack_admin, image_name) WebDriverWait(driver, config.selenium.page_timeout).until( @@ -405,7 +405,7 @@ def test_remove_protected_image_admin(login, driver, image_names, ".//ancestor::tr/td[contains(@class,'actions_column')]") widgets.select_from_dropdown(actions_column, "Delete Image") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Image: {image_name}." in messages assert openstack_admin.compute.find_image(image_name) is None @@ -436,7 +436,7 @@ def test_edit_image_description_admin(login, driver, image_names, desc_field.send_keys(new_description) image_form.find_element_by_xpath( ".//button[@class='btn btn-primary finish']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Image {image_name} " \ f"was successfully updated." in messages image_id = new_image_admin.id @@ -474,7 +474,7 @@ def test_update_image_metadata_admin(login, driver, f"//span[@title='{name}']/parent::div/input").send_keys(value) # noqa: E231,E501 image_form.find_element_by_xpath( "//button[@ng-click='modal.save()']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert "Success: Metadata was successfully updated." in messages image_id = new_image_admin.id for name, value in new_metadata.items(): @@ -521,7 +521,7 @@ def test_launch_instance_from_image_admin(complete_default_test_network, login, test_instances.delete_volume_on_instance_delete(source_table, "Yes") wizard.find_element_by_css_selector( "button.btn-primary.finish").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert "Info: Scheduled creation of 1 instance." in messages assert openstack_admin.compute.find_server(instance_name) is not None @@ -550,6 +550,6 @@ def test_create_volume_from_image_admin(login, driver, volume_name, EC.element_to_be_clickable( (By.XPATH, "//button[@class='btn btn-primary finish']"))) create_vol_btn.click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Info: Creating volume {volume_name}" in messages assert openstack_admin.block_storage.find_volume(volume_name) is not None diff --git a/openstack_dashboard/test/selenium/integration/test_instances.py b/openstack_dashboard/test/selenium/integration/test_instances.py index 462b6c8fde..414856b120 100644 --- a/openstack_dashboard/test/selenium/integration/test_instances.py +++ b/openstack_dashboard/test/selenium/integration/test_instances.py @@ -246,7 +246,7 @@ def test_delete_instance_demo(login, driver, instance_name, openstack_demo, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Instance") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Info: Scheduled deletion of Instance: {instance_name}" in messages wait_for_instance_is_deleted(openstack_demo, instance_name) assert openstack_demo.compute.find_server(instance_name) is None @@ -496,7 +496,7 @@ def test_delete_instance_admin(login, driver, instance_name, openstack_admin, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Instance") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Info: Scheduled deletion of Instance: {instance_name}" in messages wait_for_instance_is_deleted(openstack_admin, instance_name) assert openstack_admin.compute.find_server(instance_name) is None diff --git a/openstack_dashboard/test/selenium/integration/test_keypairs.py b/openstack_dashboard/test/selenium/integration/test_keypairs.py index d2b9606f03..1f12c214b6 100644 --- a/openstack_dashboard/test/selenium/integration/test_keypairs.py +++ b/openstack_dashboard/test/selenium/integration/test_keypairs.py @@ -57,7 +57,7 @@ def test_create_keypair_demo(login, driver, openstack_demo, clear_keypair_demo, type_options.click() type_options.find_element_by_css_selector('option[label="SSH Key"]').click() keypair_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Success: Key pair {keypair_name} was successfully created.' in messages) assert openstack_demo.compute.find_keypair(keypair_name) is not None @@ -78,6 +78,6 @@ def test_delete_keypair_demo(login, driver, openstack_demo, config, rows[0].find_element_by_xpath( ".//ancestor::tr/td[contains(@class,'actions_column')]").click() widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Key Pair: {new_keypair_demo.name}." in messages assert openstack_demo.compute.find_keypair(new_keypair_demo.name) is None diff --git a/openstack_dashboard/test/selenium/integration/test_metadata_definitions.py b/openstack_dashboard/test/selenium/integration/test_metadata_definitions.py index 907ce6803a..60b8e552c6 100644 --- a/openstack_dashboard/test/selenium/integration/test_metadata_definitions.py +++ b/openstack_dashboard/test/selenium/integration/test_metadata_definitions.py @@ -77,7 +77,7 @@ def test_create_metadata_namespace(login, driver, metadata_namespace_name, widgets.select_from_dropdown(namespace_form, "Direct Input") namespace_form.find_element_by_id("id_direct_input").send_keys(namespace) namespace_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Namespace {metadata_namespace_name} " f"has been created." in messages) try: @@ -104,7 +104,7 @@ def test_delete_metadata_namespace(login, driver, new_metadata_namespace, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Namespace") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Deleted Namespace: " f"{new_metadata_namespace.namespace}" in messages) try: diff --git a/openstack_dashboard/test/selenium/integration/test_networks.py b/openstack_dashboard/test/selenium/integration/test_networks.py index 4f89746df8..7df9e3280f 100644 --- a/openstack_dashboard/test/selenium/integration/test_networks.py +++ b/openstack_dashboard/test/selenium/integration/test_networks.py @@ -97,7 +97,7 @@ def test_create_network_without_subnet_demo(login, openstack_demo, driver, ensure_checkbox(False, checkbox_element) network_form.find_element_by_css_selector( ".btn-primary.button-final").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Success: Created network "{network_name}".' in messages assert openstack_demo.network.find_network(network_name) is not None @@ -124,7 +124,7 @@ def test_create_network_with_subnet_demo(login, driver, openstack_demo, ".btn-primary.button-next").click() network_form.find_element_by_css_selector( ".btn-primary.button-final").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Success: Created network "{network_name}".' in messages specified_network_sdk = openstack_demo.network.find_network(network_name) assert specified_network_sdk is not None @@ -147,7 +147,7 @@ def test_delete_network_demo(login, driver, network_name, openstack_demo, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Network") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Network: {network_name}" in messages assert openstack_demo.network.find_network(network_name) is None @@ -171,7 +171,7 @@ def test_create_network_without_subnet_admin(login, openstack_admin, driver, network_form, 'id_tenant_id', 'admin') network_form.find_element_by_css_selector( ".btn-primary.button-final").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Success: Created network "{network_name}".' in messages assert openstack_admin.network.find_network(network_name) is not None @@ -200,7 +200,7 @@ def test_create_network_with_subnet_admin(login, driver, openstack_admin, ".btn-primary.button-next").click() network_form.find_element_by_css_selector( ".btn-primary.button-final").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Success: Created network "{network_name}".' in messages specified_network_sdk = openstack_admin.network.find_network(network_name) assert specified_network_sdk is not None @@ -223,6 +223,6 @@ def test_delete_network_admin(login, driver, network_name, openstack_admin, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Network") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Network: {network_name}" in messages assert openstack_admin.network.find_network(network_name) is None diff --git a/openstack_dashboard/test/selenium/integration/test_projects.py b/openstack_dashboard/test/selenium/integration/test_projects.py index ff62cb4dd6..01895ab101 100644 --- a/openstack_dashboard/test/selenium/integration/test_projects.py +++ b/openstack_dashboard/test/selenium/integration/test_projects.py @@ -79,7 +79,7 @@ def test_create_project(login, driver, project_name, openstack_admin, project_form.find_element_by_id("id_name").send_keys(project_name) project_form.find_element_by_css_selector( ".btn-primary[value='Create Project']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Success: Created new project "{project_name}".' in messages assert openstack_admin.identity.find_project(project_name) is not None @@ -98,7 +98,7 @@ def test_delete_project(login, driver, project_name, openstack_admin, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Project") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Project: {project_name}" in messages assert openstack_admin.identity.find_project(project_name) is None @@ -124,7 +124,7 @@ def test_add_member_to_project(login, driver, project_name, openstack_admin, f"/following-sibling::li/a[@href='#add_remove']").click() # noqa: E231 project_form.find_element_by_css_selector( ".btn-primary[value='Save']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Success: Modified project "{project_name}".' in messages assert (openstack_admin.identity.validate_user_has_project_role( project=new_project, @@ -156,7 +156,7 @@ def test_add_role_to_project_member(login, driver, openstack_admin, config, widgets.select_from_dropdown(select_roles_dropdown, admin_role_name) project_form.find_element_by_css_selector( ".btn-primary[value='Save']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Success: Modified project ' f'"{new_project_with_admin.name}".' in messages) assert (openstack_admin.identity.validate_user_has_project_role( @@ -192,7 +192,7 @@ def test_add_group_to_project(login, driver, openstack_admin, f"/following-sibling::li/a[@href='#add_remove']").click() # noqa: E231 project_form.find_element_by_css_selector( ".btn-primary[value='Save']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Success: Modified project "{new_project.name}".' in messages assert (openstack_admin.identity.validate_group_has_project_role( project=new_project, @@ -225,7 +225,7 @@ def test_add_role_to_project_group(login, driver, openstack_admin, config, widgets.select_from_dropdown(select_roles_dropdown, admin_role_name) project_form.find_element_by_css_selector( ".btn-primary[value='Save']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Success: Modified project ' f'"{new_project_with_group.name}".' in messages) assert (openstack_admin.identity.validate_group_has_project_role( diff --git a/openstack_dashboard/test/selenium/integration/test_routers.py b/openstack_dashboard/test/selenium/integration/test_routers.py index 338924dcf7..c565cb2427 100644 --- a/openstack_dashboard/test/selenium/integration/test_routers.py +++ b/openstack_dashboard/test/selenium/integration/test_routers.py @@ -109,7 +109,7 @@ def test_create_router_demo(login, driver, router_name, openstack_demo, config.network.external_network) router_form.find_element_by_css_selector( ".btn-primary[value='Create Router']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Success: Router {router_name} was successfully created.' in messages) assert openstack_demo.network.find_router(router_name) is not None @@ -131,7 +131,7 @@ def test_delete_router_demo(login, driver, router_name, openstack_demo, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Router") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Router: {router_name}" in messages assert openstack_demo.network.find_router(router_name) is None @@ -164,7 +164,7 @@ def test_router_add_interface_demo(login, driver, router_name, openstack_demo, add_interface_form.find_element_by_id( "id_ip_address").send_keys(fixed_ip_test) add_interface_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Interface added {fixed_ip_test}" in messages is_interface_added_sdk = False @@ -200,7 +200,7 @@ def test_router_delete_interface_demo(login, driver, router_name, assert len(rows) == 1 rows[0].find_element_by_css_selector("td.actions_column").click() widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Interface: {extracted_port_name}" in messages assert (openstack_demo.network.find_port( new_interface['port_id']) is None) @@ -229,7 +229,7 @@ def test_router_set_gateway_demo(login, driver, new_router_demo, widgets.select_from_specific_dropdown_in_form( gateway_form, 'id_network_id', config.network.external_network) gateway_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert "Success: Gateway interface is added" in messages router_sdk = openstack_demo.network.get( f"/routers/{new_router_demo.id}" @@ -262,7 +262,7 @@ def test_router_clear_gateway_demo(login, driver, new_router_with_gateway, config.network.external_network).id) rows[0].find_element_by_css_selector(".data-table-action").click() widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Cleared Gateway: {new_router_with_gateway.name}" in messages) router_sdk = openstack_demo.network.get( @@ -290,7 +290,7 @@ def test_create_router_admin(login, driver, router_name, openstack_admin, router_form, "id_external_network", config.network.external_network) router_form.find_element_by_css_selector( ".btn-primary[value='Create Router']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Success: Router {router_name} was successfully created.' in messages) assert openstack_admin.network.find_router(router_name) is not None @@ -312,6 +312,6 @@ def test_delete_router_admin(login, driver, router_name, openstack_admin, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Router") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Router: {router_name}" in messages assert openstack_admin.network.find_router(router_name) is None diff --git a/openstack_dashboard/test/selenium/integration/test_security_groups.py b/openstack_dashboard/test/selenium/integration/test_security_groups.py index ea9a470e8b..734ec47655 100644 --- a/openstack_dashboard/test/selenium/integration/test_security_groups.py +++ b/openstack_dashboard/test/selenium/integration/test_security_groups.py @@ -66,7 +66,7 @@ def test_create_sec_group_demo(login, driver, config, sec_group_name, sec_group_form = driver.find_element_by_css_selector(".modal-dialog form") sec_group_form.find_element_by_id("id_name").send_keys(sec_group_name) sec_group_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Success: Successfully created security group: {sec_group_name}' in messages) assert (openstack_demo.network.find_security_group(sec_group_name) @@ -88,7 +88,7 @@ def test_delete_sec_group_demo(login, driver, sec_group_name, openstack_demo, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Security Group") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Security Group: {sec_group_name}" in messages assert openstack_demo.network.find_security_group(sec_group_name) is None @@ -108,7 +108,7 @@ def test_add_rule_sec_group_demo(login, driver, sec_group_name, openstack_demo, rule_form = driver.find_element_by_css_selector(".modal-dialog form") rule_form.find_element_by_id("id_port").send_keys(rule_port) rule_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Successfully added rule: ALLOW IPv4 {rule_port}" f"/tcp from 0.0.0.0/0" in messages) sec_group_rules_sdk = openstack_demo.network.find_security_group( @@ -138,7 +138,7 @@ def test_delete_rule_sec_group_demo(login, driver, sec_group_name, assert len(rows) == 1 rows[0].find_element_by_css_selector("td.actions_column").click() widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Deleted Rule: ALLOW IPv4 {rule_port}/tcp from 0.0.0.0/0" in messages) sec_group_rules_sdk = openstack_demo.network.find_security_group( diff --git a/openstack_dashboard/test/selenium/integration/test_user_credentials.py b/openstack_dashboard/test/selenium/integration/test_user_credentials.py index 608b576d9e..6370f345b8 100644 --- a/openstack_dashboard/test/selenium/integration/test_user_credentials.py +++ b/openstack_dashboard/test/selenium/integration/test_user_credentials.py @@ -58,7 +58,7 @@ def test_create_user_credential_totp(login, driver, openstack_admin, config, widgets.select_from_specific_dropdown_in_form( user_credential_form, 'id_cred_type', 'TOTP') user_credential_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert 'Success: User credential created successfully.' in messages credentials_sdk_after = list(openstack_admin.identity.credentials()) assert (len(credentials_sdk_after) == 1 and @@ -87,7 +87,7 @@ def test_create_user_credential_ec2(login, driver, openstack_admin, config, widgets.select_from_specific_dropdown_in_form( user_credential_form, 'id_project', 'admin') user_credential_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert 'Success: User credential created successfully.' in messages credentials_sdk_after = list(openstack_admin.identity.credentials()) assert (len(credentials_sdk_after) == 1 and @@ -113,7 +113,7 @@ def test_delete_user_credential(login, driver, openstack_admin, config, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete User Credential") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Deleted User Credential: {user_credential_blob}" in messages) credentials_sdk_after = list(openstack_admin.identity.credentials()) @@ -139,7 +139,7 @@ def test_edit_user_credential(login, driver, openstack_admin, config, user_credential_form.find_element_by_id("id_data").send_keys( f"EDITED_{user_credential_blob}") user_credential_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert ("Success: User credential updated successfully." in messages) credentials_sdk = list(openstack_admin.identity.credentials()) assert (len(credentials_sdk) == 1 and diff --git a/openstack_dashboard/test/selenium/integration/test_users.py b/openstack_dashboard/test/selenium/integration/test_users.py index 9e6889d447..0e42880925 100644 --- a/openstack_dashboard/test/selenium/integration/test_users.py +++ b/openstack_dashboard/test/selenium/integration/test_users.py @@ -57,7 +57,7 @@ def test_create_user(login, driver, user_name, openstack_admin, user_form.find_element_by_id( "id_confirm_password").send_keys(default_password) user_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Success: User "{user_name}" was successfully created.' in messages assert openstack_admin.identity.find_user(user_name) is not None @@ -77,7 +77,7 @@ def test_delete_user(login, driver, user_name, openstack_admin, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete User") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted User: {user_name}" in messages assert openstack_admin.identity.find_user(user_name) is None @@ -101,5 +101,5 @@ def test_change_user_password(login, driver, user_name, new_user, config): password_form.find_element_by_id( "id_confirm_password").send_keys(new_password) password_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert "Success: User password has been updated successfully." in messages diff --git a/openstack_dashboard/test/selenium/integration/test_volume_snapshots.py b/openstack_dashboard/test/selenium/integration/test_volume_snapshots.py index b117810ecd..99d15440fd 100644 --- a/openstack_dashboard/test/selenium/integration/test_volume_snapshots.py +++ b/openstack_dashboard/test/selenium/integration/test_volume_snapshots.py @@ -163,7 +163,7 @@ def test_create_volume_snapshot_demo(login, driver, volume_name, create_snap_form.find_element_by_id("id_name").send_keys( volume_snapshot_name) create_snap_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Info: Creating volume snapshot "{volume_snapshot_name}".' in messages) assert (openstack_demo.block_storage.find_snapshot(volume_snapshot_name) @@ -187,7 +187,7 @@ def test_delete_volume_snapshot_demo(login, driver, volume_snapshot_names, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Volume Snapshot") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Scheduled deletion of Volume Snapshot: " f"{volume_snapshot_name}" in messages) wait_for_volume_snapshot_is_deleted(openstack_demo, volume_snapshot_name) @@ -216,7 +216,7 @@ def test_edit_volume_snapshot_description_demo(login, driver, openstack_demo, snapshot_form.find_element_by_id("id_description").send_keys( f"EDITED_Description for: {new_volume_snapshot_demo.name}") snapshot_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Info: Updating volume snapshot ' f'"{new_volume_snapshot_demo.name}"' in messages) assert (openstack_demo.block_storage.find_snapshot( @@ -246,7 +246,7 @@ def test_create_volume_from_volume_snapshot_demo(login, driver, openstack_demo, volume_form.find_element_by_id("id_name").send_keys( volume_from_snapshot_name) volume_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Info: Creating volume "{volume_from_snapshot_name}"' in messages) assert (openstack_demo.block_storage.find_volume( volume_from_snapshot_name) is not None) @@ -269,7 +269,7 @@ def test_delete_volume_from_volume_snapshot_demo(login, driver, openstack_demo, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Volume") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Info: Scheduled deletion of Volume: " f"{new_volume_from_snapshot_demo.name}" in messages) test_volumes.wait_for_volume_is_deleted( @@ -302,7 +302,7 @@ def test_delete_snapshot_before_volume_demo(login, driver, openstack_demo, widgets.select_from_dropdown(actions_column_snapshot, "Delete Volume Snapshot") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Scheduled deletion of Volume Snapshot: " f"{volume_snapshot_name}" in messages) wait_for_volume_snapshot_is_deleted(openstack_demo, volume_snapshot_name) @@ -322,7 +322,7 @@ def test_delete_snapshot_before_volume_demo(login, driver, openstack_demo, "td.actions_column") widgets.select_from_dropdown(actions_column_volume, "Delete Volume") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Info: Scheduled deletion of Volume: " f"{new_volume_from_snapshot_demo.name}" in messages) test_volumes.wait_for_volume_is_deleted( @@ -425,7 +425,7 @@ def test_create_volume_snapshot_admin(login, driver, new_volume_admin, snapshot_form.find_element_by_id("id_name").send_keys( volume_snapshot_name) snapshot_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Info: Creating volume snapshot "{volume_snapshot_name}".' in messages) assert (openstack_admin.block_storage.find_snapshot(volume_snapshot_name) @@ -448,7 +448,7 @@ def test_delete_volume_snapshot_admin(login, driver, openstack_admin, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Volume Snapshot") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Scheduled deletion of Volume Snapshot: " f"{new_volume_snapshot_admin.name}" in messages) wait_for_volume_snapshot_is_deleted(openstack_admin, @@ -478,7 +478,7 @@ def test_edit_volume_snapshot_description_admin(login, driver, openstack_admin, snapshot_form.find_element_by_id("id_description").send_keys( f"EDITED_Description for: {new_volume_snapshot_admin.name}") snapshot_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Info: Updating volume snapshot ' f'"{new_volume_snapshot_admin.name}"' in messages) assert (openstack_admin.block_storage.find_snapshot( diff --git a/openstack_dashboard/test/selenium/integration/test_volumes.py b/openstack_dashboard/test/selenium/integration/test_volumes.py index e521ff4cb0..923b1295ce 100644 --- a/openstack_dashboard/test/selenium/integration/test_volumes.py +++ b/openstack_dashboard/test/selenium/integration/test_volumes.py @@ -67,7 +67,7 @@ def test_create_empty_volume_demo(login, driver, volume_name, openstack_demo, volume_form.find_element_by_id("id_name").send_keys(volume_name) volume_form.find_element_by_css_selector( ".btn-primary[value='Create Volume']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Info: Creating volume "{volume_name}"' in messages assert openstack_demo.block_storage.find_volume(volume_name) is not None @@ -94,7 +94,7 @@ def test_create_volume_via_vol_source_image_demo(login, driver, volume_form, 'id_image_source', image_source_name) volume_form.find_element_by_css_selector( ".btn-primary[value='Create Volume']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Info: Creating volume "{volume_name}"' in messages assert openstack_demo.block_storage.find_volume(volume_name) is not None @@ -116,7 +116,7 @@ def test_delete_volume_demo(login, driver, volume_name, openstack_demo, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Volume") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Info: Scheduled deletion of Volume: {volume_name}" in messages wait_for_volume_is_deleted(openstack_demo, volume_name) assert (openstack_demo.block_storage.find_volume(volume_name) is None) @@ -142,7 +142,7 @@ def test_edit_volume_description_demo(login, driver, volume_name, config, volume_form.find_element_by_id("id_description").send_keys( f"EDITED_Description for: {volume_name}") volume_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Info: Updating volume "{volume_name}"' in messages assert (openstack_demo.block_storage.find_volume( volume_name).description == f"EDITED_Description for: {volume_name}") @@ -169,7 +169,7 @@ def test_extend_volume_demo(login, driver, openstack_demo, new_volume_demo, volume_form.find_element_by_id("id_new_size").send_keys(2) volume_form.find_element_by_css_selector( ".btn-primary[value='Extend Volume']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Info: Extending volume: "{new_volume_demo.name}"' in messages wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) assert (openstack_demo.block_storage.find_volume( @@ -244,7 +244,7 @@ def test_volume_upload_to_image_demo(login, driver, openstack_demo, volume_form.find_element_by_id("id_image_name").send_keys(image_names[0]) volume_form.find_element_by_css_selector( ".btn-primary[value='Upload']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert ('Info: Successfully sent the request to upload volume to image for ' f'volume: "{new_volume_demo.name}"' in messages) wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) @@ -345,7 +345,7 @@ def test_manage_volume_attachments(login, driver, openstack_demo, f"{new_instance_demo.name} ({new_instance_demo.id})") attach_to_instance_form.find_element_by_css_selector( ".btn-primary[value='Attach Volume']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Info: Attaching volume {new_volume_demo.name} to instance " f"{new_instance_demo.name} on /dev/vdb." in messages) wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) @@ -368,7 +368,7 @@ def test_manage_volume_attachments(login, driver, openstack_demo, "td.actions_column").click() driver.find_element_by_xpath( ".//a[normalize-space()='Detach Volume']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Detaching Volume: Volume {new_volume_demo.name} " f"on instance {new_instance_demo.name}" in messages) wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) @@ -394,7 +394,7 @@ def test_create_empty_volume_admin(login, driver, volume_name, openstack_admin, volume_form.find_element_by_id("id_name").send_keys(volume_name) volume_form.find_element_by_css_selector( ".btn-primary[value='Create Volume']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Info: Creating volume "{volume_name}"' in messages assert openstack_admin.block_storage.find_volume(volume_name) is not None @@ -420,7 +420,7 @@ def test_create_volume_via_vol_source_image_admin(login, driver, volume_name, volume_form, 'id_image_source', image_source_name) volume_form.find_element_by_css_selector( ".btn-primary[value='Create Volume']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Info: Creating volume "{volume_name}"' in messages assert openstack_admin.block_storage.find_volume(volume_name) is not None @@ -442,7 +442,7 @@ def test_delete_volume_admin(login, driver, volume_name, openstack_admin, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Volume") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Info: Scheduled deletion of Volume: {volume_name}" in messages wait_for_volume_is_deleted(openstack_admin, volume_name) assert (openstack_admin.block_storage.find_volume(volume_name) is None) @@ -468,7 +468,7 @@ def test_edit_volume_description_admin(login, driver, volume_name, config, volume_form.find_element_by_id("id_description").send_keys( f"EDITED_Description for: {volume_name}") volume_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f'Info: Updating volume "{volume_name}"' in messages assert (openstack_admin.block_storage.find_volume( volume_name).description == f"EDITED_Description for: {volume_name}") diff --git a/openstack_dashboard/test/selenium/integration/test_volumetypes.py b/openstack_dashboard/test/selenium/integration/test_volumetypes.py index 01a702ed31..ef8591a1db 100644 --- a/openstack_dashboard/test/selenium/integration/test_volumetypes.py +++ b/openstack_dashboard/test/selenium/integration/test_volumetypes.py @@ -107,7 +107,7 @@ def test_create_volume_type(login, driver, volume_type_name, openstack_admin, volume_type_form = driver.find_element_by_css_selector(".modal-dialog form") volume_type_form.find_element_by_id("id_name").send_keys(volume_type_name) volume_type_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Success: Successfully created volume ' f'type: {volume_type_name}' in messages) assert openstack_admin.block_storage.find_type(volume_type_name) is not None @@ -128,7 +128,7 @@ def test_delete_volume_type(login, driver, volume_type_name, openstack_admin, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Volume Type") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted Volume Type: {volume_type_name}" in messages assert openstack_admin.block_storage.find_type(volume_type_name) is None @@ -150,7 +150,7 @@ def test_volume_type_create_encryption(login, driver, openstack_admin, config, volume_type_form.find_element_by_id("id_provider").send_keys("plain") volume_type_form.find_element_by_css_selector( ".btn-primary[value='Create Volume Type Encryption']").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Successfully created encryption for " f"volume type: {new_volume_type.name}" in messages) assert (openstack_admin.block_storage.get_type_encryption( @@ -176,7 +176,7 @@ def test_volume_type_delete_encryption(login, driver, openstack_admin, config, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete Encryption") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Deleted Encryption: " f"{new_volume_type_with_encryption.name}" in messages) assert (openstack_admin.block_storage.get_type_encryption( @@ -196,7 +196,7 @@ def test_create_qos_spec(login, driver, qos_spec_name, openstack_admin, volume_qos_form = driver.find_element_by_css_selector(".modal-dialog form") volume_qos_form.find_element_by_id("id_name").send_keys(qos_spec_name) volume_qos_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f'Success: Successfully created QoS ' f'Spec: {qos_spec_name}' in messages) qos_specs = openstack_admin.block_storage.get( @@ -220,7 +220,7 @@ def test_delete_qos_spec(login, driver, qos_spec_name, openstack_admin, actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Delete QoS Spec") widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert f"Success: Deleted QoS Spec: {qos_spec_name}" in messages qos_specs = openstack_admin.block_storage.get( "/qos-specs").json()['qos_specs'] @@ -248,7 +248,7 @@ def test_edit_qos_spec_consumer(login, driver, openstack_admin, config, volume_qos_form = driver.find_element_by_css_selector(".modal-dialog form") widgets.select_from_dropdown(volume_qos_form, 'front-end') volume_qos_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert "Success: Successfully modified QoS Spec consumer." in messages assert (openstack_admin.block_storage.get( f"/qos-specs/{new_qos_spec['id']}").json()['qos_specs']['consumer'] == @@ -274,7 +274,7 @@ def test_qos_spec_create_extra_specs(login, driver, openstack_admin, config, extra_specs_form.find_element_by_id("id_key").send_keys('minIOPS') extra_specs_form.find_element_by_id("id_value").send_keys(20) extra_specs_form.find_element_by_css_selector(".btn-primary").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert 'Success: Created spec "minIOPS".' in messages assert (openstack_admin.block_storage.get( f"/qos-specs/{new_qos_spec['id']}").json()['qos_specs']['specs'] == @@ -307,7 +307,7 @@ def test_qos_spec_delete_extra_specs(login, driver, openstack_admin, config, widgets.select_from_dropdown(actions_column, "Delete Spec") driver.find_element_by_css_selector( ".modal-dialog .modal-footer .btn-danger").click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert "Success: Deleted Spec: maxIOPS" in messages assert (openstack_admin.block_storage.get( f"/qos-specs/{new_qos_spec_with_extra_specs['id']}").json() diff --git a/openstack_dashboard/test/selenium/ui/test_actions.py b/openstack_dashboard/test/selenium/ui/test_actions.py index e24a62e170..2f2229d9bf 100644 --- a/openstack_dashboard/test/selenium/ui/test_actions.py +++ b/openstack_dashboard/test/selenium/ui/test_actions.py @@ -17,7 +17,7 @@ from openstack_dashboard.test.selenium import widgets def test_delete_multiple_instance_rows(live_server, driver, dashboard_data, - user): + config, user): with mock.patch.object( api.glance, 'image_list_detailed') as mocked_i_l_d, \ mock.patch.object( @@ -52,14 +52,14 @@ def test_delete_multiple_instance_rows(live_server, driver, dashboard_data, server_names.append(str(server)[1:-1].split("Server: ")[1]) string_server_names = ", ".join(server_names) widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Info: Scheduled deletion of Instances: {string_server_names}" in messages) # Test for cover delete multiple rows also for Angular based table def test_delete_multiple_images_rows(live_server, driver, dashboard_data, - user): + config, user): with mock.patch.object( api.glance, 'image_list_detailed') as mocked_i_l_d, \ mock.patch.object( @@ -91,6 +91,6 @@ def test_delete_multiple_images_rows(live_server, driver, dashboard_data, driver.find_element_by_xpath( "//button[normalize-space()='Delete Images']").click() widgets.confirm_modal(driver) - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert (f"Success: Deleted Images: {string_image_names}." in messages) diff --git a/openstack_dashboard/test/selenium/ui/test_settings.py b/openstack_dashboard/test/selenium/ui/test_settings.py index c829f8bcb9..5ba43d322f 100644 --- a/openstack_dashboard/test/selenium/ui/test_settings.py +++ b/openstack_dashboard/test/selenium/ui/test_settings.py @@ -94,14 +94,14 @@ def test_message_after_password_change(live_server, driver, user, 'Password changed. Please log in again to continue.') -def test_languages(live_server, driver, user): +def test_languages(live_server, driver, user, config): driver.get(live_server.url + '/settings') user_settings = driver.find_element_by_id('user_settings_modal') language_options = user_settings.find_element_by_id('id_language') language_options.click() language_options.find_element_by_xpath("//option[@value='de']").click() user_settings.find_element_by_xpath('//*[@class="btn btn-primary"]').click() - messages = widgets.get_and_dismiss_messages(driver) + messages = widgets.get_and_dismiss_messages(driver, config) assert ("Success: Settings saved." in messages or "Erfolg:Einstellungen gespeichert." in messages) assert "Error" not in messages diff --git a/openstack_dashboard/test/selenium/widgets.py b/openstack_dashboard/test/selenium/widgets.py index e85e63d176..4937b918da 100644 --- a/openstack_dashboard/test/selenium/widgets.py +++ b/openstack_dashboard/test/selenium/widgets.py @@ -27,8 +27,10 @@ class TableDefinition: names: list -def get_and_dismiss_messages(element): - messages = element.find_elements_by_css_selector("div.messages div.alert") +def get_and_dismiss_messages(driver, config): + messages = WebDriverWait(driver, config.selenium.message_wait).until( + EC.presence_of_all_elements_located( + (By.CSS_SELECTOR, 'div.messages div.alert'))) collect = [] for message in messages: text = message.find_element_by_css_selector("p, div").text