Warning

This document is for an old release 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_workflow_invocation_details

from galaxy_test.base.workflow_fixtures import (
    WORKFLOW_KEEP_SUCCESSFUL_DATASETS,
    WORKFLOW_KEEP_SUCCESSFUL_DATASETS_TEST_DATA,
    WORKFLOW_WITH_OUTPUT_COLLECTION,
)
from .framework import (
    managed_history,
    retry_assertion_during_transitions,
    selenium_test,
    SeleniumTestCase,
)


[docs] class TestWorkflowInvocationDetails(SeleniumTestCase): ensure_registered = True
[docs] @selenium_test def test_job_details(self): gx_selenium_context = self history_id = gx_selenium_context.dataset_populator.new_history() gx_selenium_context.workflow_populator.run_workflow( WORKFLOW_WITH_OUTPUT_COLLECTION, history_id=history_id, assert_ok=True, wait=True ) self.invocation_open_latest() invocations = self.components.invocations @retry_assertion_during_transitions def assert_progress_steps_note_contains(text): assert text in invocations.progress_steps_note.wait_for_visible().text assert_progress_steps_note_contains("3 of 3 steps successfully scheduled.") assert "2 of 2 jobs complete." in invocations.progress_jobs_note.wait_for_visible().text invocations.invocation_tab(label="Inputs").wait_for_and_click() invocations.input_details_title(label="text_input").wait_for_visible() assert "Test_Dataset" in invocations.input_details_name(label="text_input").wait_for_visible().text invocations.invocation_tab(label="Steps").wait_for_and_click() assert "Step 1: text_input" in invocations.step_title(order_index="0").wait_for_visible().text assert "Step 2: split_up" in invocations.step_title(order_index="1").wait_for_visible().text assert "Step 3: paired" in invocations.step_title(order_index="2").wait_for_visible().text invocations.step_details(order_index="1").wait_for_and_click() invocations.step_job_details(order_index="1").wait_for_visible() self.sleep_for(self.wait_types.UX_RENDER) self.screenshot("invocation_step_jobs") invocations.step_job_information(order_index="1").wait_for_visible() assert ( "collection_creates_pair" in invocations.step_job_information_tool_id(order_index="1").wait_for_visible().text ) # switch to outputs tab invocations.step_outputs_tab_link.wait_for_and_click() invocations.step_output_collection(order_index="1").wait_for_visible() invocations.step_output_collection_toggle(order_index="1").wait_for_and_click() invocations.step_output_collection_element_identifier(element_identifier="forward").wait_for_and_click() datatype = invocations.step_output_collection_element_datatype(order_index="1").wait_for_text() assert datatype == "txt"
[docs] @selenium_test @managed_history # failed job messes with some history wait code we probably shouldn't be using def test_invocation_step_jobs_with_failed_jobs(self): """Test invocation step jobs view with mixed successful and failed jobs. This test verifies: - Job state counters (ok and error) display correctly for steps with mixed job states - Filtering by failed jobs works correctly - Debug tab shows only failed steps - Failed steps can be expanded in debug view """ history_id = self.current_history_id() self.workflow_populator.run_workflow( WORKFLOW_KEEP_SUCCESSFUL_DATASETS, test_data=WORKFLOW_KEEP_SUCCESSFUL_DATASETS_TEST_DATA, history_id=history_id, assert_ok=False, ) # Open the first invocation self.invocation_open_latest() # Navigate to Steps tab invocations = self.components.invocations invocations.invocation_tab(label="Steps").wait_for_and_click() # Click on a step with multiple mixed failed and successful jobs invocations.step_details(order_index="1").wait_for_and_click() invocations.step_job_details(order_index="1").wait_for_visible() # Verify job state counters okay_counter = invocations.step_job_details_state_counter(state="ok").wait_for_visible() failed_counter = invocations.step_job_details_state_counter(state="error").wait_for_visible() assert okay_counter.get_attribute("data-count") == "1" assert failed_counter.get_attribute("data-count") == "1" self.screenshot("invocation_steps_view_with_failed_jobs") # Filter by failed jobs invocations.step_job_details_state_counter(state="error").wait_for_and_click() self.screenshot("invocation_steps_view_with_failed_jobs_failed_jobs_list") # Navigate to Debug tab invocations.invocation_tab(label="Debug").wait_for_and_click() # Verify the failed step appears here and the successful step doesn't self.screenshot("invocation_steps_view_with_failed_jobs_debug_landing") invocations.step_title(order_index=1).wait_for_and_click() invocations.step_title(order_index=2).assert_absent() self.screenshot("invocation_steps_view_with_failed_jobs_debug_job_expanded")
[docs] def invocation_open_latest(self): # TODO: migrate retry_assertion_during_transitions to navigates_galaxy.py so this # can be moved there. # open invocations panel self.home() self.components.invocations.activity.wait_for_and_click() invocations = self.components.invocations invocations.invocations_panel_list.wait_for_visible() @retry_assertion_during_transitions def assert_has_row(): invocations.invocations_panel_list_items.wait_for_visible() invocation_rows = invocations.invocations_panel_list_items.all() assert len(invocation_rows) > 0 return invocation_rows[0] assert_has_row() invocations.state_details.assert_absent() details = invocations.invocations_panel_list_items.all()[0] details.click() invocations.state_details.wait_for_visible() # close invocations panel self.components.invocations.activity.wait_for_and_click()