diff --git a/client/src/utils/navigation/navigation.yml b/client/src/utils/navigation/navigation.yml index 11d36698b75..050ed34bcae 100644 --- a/client/src/utils/navigation/navigation.yml +++ b/client/src/utils/navigation/navigation.yml @@ -407,6 +407,7 @@ collection_builders: clear_filters: "a.clear-filters-link" forward_datasets: ".forward-column .column-datasets" reverse_datasets: ".reverse-column .column-datasets" + name: "input.collection-name" histories: labels: diff --git a/lib/galaxy/selenium/navigates_galaxy.py b/lib/galaxy/selenium/navigates_galaxy.py index 4136b8a607f..1e957d75e12 100644 --- a/lib/galaxy/selenium/navigates_galaxy.py +++ b/lib/galaxy/selenium/navigates_galaxy.py @@ -1775,8 +1775,17 @@ class NavigatesGalaxy(HasDriver): return item_component.details.is_displayed def collection_builder_set_name(self, name): - name_element = self.wait_for_selector_visible("input.collection-name") - name_element.send_keys(name) + # small sleep here seems to be needed in the case of the + # collection builder even though we wait for the component + # to be clickable - which should make it enabled and should + # allow send_keys to work. The send_keys occasionally doesn't + # result in the name being filled out in the UI without this. + self.sleep_for(WAIT_TYPES.UX_RENDER) + self._wait_for_input_text_component_and_fill(self.components.collection_builders.name, name) + + def _wait_for_input_text_component_and_fill(self, component, text): + target_element = component.wait_for_clickable() + target_element.send_keys(text) def collection_builder_hide_originals(self): self.wait_for_and_click_selector("input.hide-originals") diff --git a/lib/galaxy/selenium/smart_components.py b/lib/galaxy/selenium/smart_components.py index d62968448a2..51d8b9a50f1 100644 --- a/lib/galaxy/selenium/smart_components.py +++ b/lib/galaxy/selenium/smart_components.py @@ -125,3 +125,6 @@ class SmartTarget: def assert_no_axe_violations_with_impact_of_at_least(self, impact: Impact) -> None: self.wait_for_visible() self.axe_eval().assert_no_violations_with_impact_of_at_least(impact) + + def __str__(self): + return f"SmartTarget[_target={self._target}]"