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_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()