Warning

This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy_test.selenium.test_published_histories_grid

from .framework import (
    retry_assertion_during_transitions,
    selenium_test,
    SharedStateSeleniumTestCase,
)


[docs]class HistoryGridTestCase(SharedStateSeleniumTestCase):
[docs] @selenium_test def test_history_grid_histories(self): self.navigate_to_published_histories_page() self.assert_histories_in_grid(self.all_histories)
[docs] @selenium_test def test_history_grid_search_standard(self): self.navigate_to_published_histories_page() self.screenshot("histories_published_grid") self.published_grid_search_for(self.history1_name) self.assert_grid_histories_are([self.history1_name]) self.unset_filter('free-text-search', self.history1_name) self.published_grid_search_for(self.history4_name) self.assert_grid_histories_are(['No Items'])
[docs] @selenium_test def test_history_grid_search_advanced(self): self.navigate_to_published_histories_page() self.wait_for_and_click_selector('#standard-search .advanced-search-toggle') name_filter_selector = '#input-name-filter' annot_filter_selector = '#input-annotation-filter' owner_filter_selector = '#input-username-filter' tags_filter_selector = '#input-tags-filter' # Search by name self.set_filter(name_filter_selector, self.history1_name) self.screenshot("histories_published_grid_advanced") self.assert_grid_histories_are([self.history1_name]) self.unset_filter('name', self.history1_name) self.set_filter(name_filter_selector, self.history4_name) self.assert_grid_histories_are(['No Items']) self.unset_filter('name', self.history4_name) # Search by annotation self.set_filter(annot_filter_selector, self.history3_annot) self.assert_grid_histories_are([self.history3_name]) self.unset_filter('annotation', self.history3_annot) # Search by owner owner = self.user2_email.split('@')[0] self.set_filter(owner_filter_selector, owner) self.assert_grid_histories_are([self.history2_name]) self.unset_filter('username', owner) # Search by tags self.set_filter(tags_filter_selector, self.history1_tags[0]) self.assert_grid_histories_are([self.history1_name, self.history3_name], False) self.unset_filter('tags', self.history1_tags[0])
# Trying to address an intermittent failure by injecting a small rendering # sleep. to be honest, I'm not sure that the timing is the issue, because # this test never fails when run on its own, only when part of a longer test # run, but there's so few moving parts here, I'm not sure what else to try.
[docs] @selenium_test def test_history_grid_sort_by_name(self): self.navigate_to_published_histories_page() self.sleep_for(self.wait_types.UX_RENDER) self.wait_for_and_click_selector('th#name-header > a') self.sleep_for(self.wait_types.UX_RENDER) self.assert_grid_histories_are(sorted(self.all_histories))
[docs] @selenium_test def test_history_grid_sort_by_owner(self): self.navigate_to_published_histories_page() self.wait_for_and_click_selector('th#username-header > a') self.assert_grid_histories_sorted_by_owner()
[docs] @selenium_test def test_history_grid_tag_click(self): self.navigate_to_published_histories_page() tags = None grid = self.wait_for_selector('#grid-table-body') for row in grid.find_elements_by_tag_name('tr'): td = row.find_elements_by_tag_name('td') name = td[0].text if name == self.history1_name: tags = td[4] break if tags is None: raise AssertionError('Failed to find history with name [%s]' % self.history1_name) tag_button_selector = 'div.tag-name' tag_buttons = tags.find_elements_by_css_selector(tag_button_selector) tag_button_text = None target_tag_button_text = self.history1_tags[0] for tag_button in tag_buttons: tag_button_text = tag_button.text if tag_button_text == target_tag_button_text: break self.assertEqual(tag_button_text, target_tag_button_text) tag_button.click() self.assert_grid_histories_are([self.history1_name, self.history3_name], False)
[docs] def get_histories(self, sleep=False): self.sleep_for(self.wait_types.UX_RENDER) names = [] grid = self.wait_for_selector('#grid-table-body') for row in grid.find_elements_by_tag_name('tr'): cell = row.find_elements_by_tag_name('td')[0] # Name names.append(cell.text) return names
[docs] @retry_assertion_during_transitions def assert_grid_histories_sorted_by_owner(self): histories = self.get_histories() index_1, index_2, index_3 = [histories.index(n) for n in self.all_histories] # 1 and 3 are owned by a owner whose username lexicographically # precedes 2. So verify 1 and 3 come before 2. assert index_1 < index_2 assert index_3 < index_2
[docs] @retry_assertion_during_transitions def assert_grid_histories_are(self, expected_histories, sort_matters=True): actual_histories = self.get_histories() # Filter out histories created by other tests all_histories = self.all_histories + ['No Items'] actual_histories = [x for x in actual_histories if x in all_histories] if not sort_matters: actual_histories = set(actual_histories) expected_histories = set(expected_histories) self.assertEqual(actual_histories, expected_histories)
[docs] @retry_assertion_during_transitions def assert_histories_in_grid(self, expected_histories, present=True): actual_histories = self.get_histories() intersection = set(actual_histories).intersection(expected_histories) if present: self.assertEqual(intersection, set(expected_histories)) else: self.assertEqual(intersection, set())
[docs] def set_filter(self, selector, value): filter_input = self.wait_for_selector_clickable(selector) filter_input.send_keys(value) self.send_enter(filter_input)
[docs] def unset_filter(self, filter_key, filter_value): close_link_selector = 'a[filter_key="%s"][filter_val="%s"]' % \ (filter_key, filter_value) self.wait_for_and_click_selector(close_link_selector) self.sleep_for(self.wait_types.UX_RENDER)
[docs] def set_annotation(self, annotation): self.ensure_annotation_area_displayed() self.wait_for_and_click(self.navigation.history_panel.selectors.annotation_editable_text) annon_area_editable = self.wait_for_and_click(self.navigation.history_panel.selectors.annotation_edit) anno_done_button = self.wait_for_clickable(self.navigation.history_panel.selectors.annotation_done) annon_area_editable.send_keys(annotation) anno_done_button.click()
[docs] def ensure_annotation_area_displayed(self): annotation_area_selector = self.navigation.history_panel.selectors.annotation_area annotation_icon_selector = self.navigation.history_panel.selectors.annotation_icon if not self.is_displayed(annotation_area_selector): self.wait_for_and_click(annotation_icon_selector)
[docs] def setup_shared_state(self): tag1 = self._get_random_name(len=5) tag2 = self._get_random_name(len=5) tag3 = self._get_random_name(len=5) HistoryGridTestCase.user1_email = self._get_random_email('test1') HistoryGridTestCase.user2_email = self._get_random_email('test2') HistoryGridTestCase.history1_name = self._get_random_name() HistoryGridTestCase.history2_name = self._get_random_name() HistoryGridTestCase.history3_name = self._get_random_name() HistoryGridTestCase.history4_name = self._get_random_name() HistoryGridTestCase.history1_tags = [tag1, tag2] HistoryGridTestCase.history2_tags = [tag3] HistoryGridTestCase.history3_tags = [tag1] HistoryGridTestCase.history3_annot = self._get_random_name() HistoryGridTestCase.all_histories = [self.history1_name, self.history2_name, self.history3_name] self.register(self.user1_email) self.create_history(self.history1_name) self.history_panel_add_tags(self.history1_tags) self.publish_current_history() self.create_history(self.history3_name) self.history_panel_add_tags(self.history3_tags) self.set_annotation(self.history3_annot) self.publish_current_history() self.logout_if_needed() self.register(self.user2_email) self.create_history(self.history2_name) self.history_panel_add_tags(self.history2_tags) self.publish_current_history()
[docs] def create_history(self, name): self.home() self.history_panel_create_new_with_name(name)
[docs] def publish_current_history(self): self.click_history_option('Share or Publish') self.components.histories.sharing.make_accessible_and_publish.wait_for_and_click() self.wait_for_selector_clickable('#disable_link_access_and_unpublish')
[docs] def navigate_to_published_histories_page(self): self.home() self.click_masthead_shared_data() self.components.masthead.published_histories.wait_for_and_click()