Index: suite_leahi/shared/scripts/configuration/utility.py =================================================================== diff -u -rf26ea87587e4b5be8fb20c83c3e824a19cf9cc04 -rc091cb2bd9bd4b20538496aa27435e8c8cf39e7a --- suite_leahi/shared/scripts/configuration/utility.py (.../utility.py) (revision f26ea87587e4b5be8fb20c83c3e824a19cf9cc04) +++ suite_leahi/shared/scripts/configuration/utility.py (.../utility.py) (revision c091cb2bd9bd4b20538496aa27435e8c8cf39e7a) @@ -6,10 +6,15 @@ from leahi_dialin.ui import utils from datetime import datetime from leahi_dialin.ui.td_messaging import TD_Messaging -from configuration import config, navigation +from leahi_dialin.common.td_defs import TDOpModes,TDTreatmentStates +from configuration import config, navigation +from leahi_dialin.ui import utils +from builtins import int as pyInt td =TD_Messaging() - +from leahi_dialin.ui import utils +from builtins import int as pyInt + def get_object_from_names(names_dict, error_message = "Missing object", timeout_ms = 200): """ To get an object with try..except catching to prevent script errors when the object is not found on the GUI @@ -20,7 +25,7 @@ return squish.waitForObject(names_dict, timeout_ms) except LookupError: test.fail("ERROR : " + error_message) - return None + return None def get_bullet_object(screen_obj, num): """ @@ -43,7 +48,7 @@ names.o_text_object["text"] = txt return names.o_text_object -def setObjectText(text,obj): +def setObjectText(obj,text): """ Method to set object property based on text @param text : (string) treatment parameter text @@ -73,7 +78,10 @@ found = findChildByText(child, target_text) if found: return found - + + return None + + def set_value_based_on_target(obj, target_value): """ obj: dictionary containing object paths @@ -97,7 +105,7 @@ # Read current value (supports invisible text too) - current_value = round(float(squish.findObject(obj).value),1) + current_value = round(float(squish.waitForObject(obj).value), 1) # Determine direction while current_value != float(target_value): @@ -107,12 +115,13 @@ elif current_value > float(target_value): squish.mouseClick(squish.waitForObject(left_arrow)) - current_value = round(float(squish.findObject(obj).value),1) + current_value = round(float(squish.waitForObject(obj).value), 1) test.log(f"Updated value: {current_value}") - test.log(f"✅ Target value reached: {current_value}") + test.log(f"✅ Target value reached: {current_value}") + def select_different_dropdown(object,type,whichTypeIndex): """ Selects a value from a dropdown using a doc string. @@ -136,16 +145,14 @@ set_value_based_on_target(names.o_PreTreatmentCreate_bloodFlowRateControl_ValueAdjuster, 60) set_value_based_on_target(names.o_PreTreatmentCreate_dialysateFlowRateControl_ValueAdjuster, 75) set_value_based_on_target(names.o_PreTreatmentCreate_durationControl_ValueAdjuster, 75) - heparinValue =navigation.get_ini_value("/home/denali/Public/luis/config/configurations/Settings/System.conf", section ="Feature Configurations", key ="HeparinSyringePump") - if heparinValue == "1": - set_value_based_on_target(names.o_PreTreatmentCreate_heparinBolusVolumeControl_ValueAdjuster, 0.4) - set_value_based_on_target(names.o_PreTreatmentCreate_heparinDispensingRateControl_ValueAdjuster, 0.5) - set_value_based_on_target(names.o_PreTreatmentCreate_heparinStopTimeControl_ValueAdjuster, 60) + set_value_based_on_target(names.o_PreTreatmentCreate_heparinBolusVolumeControl_ValueAdjuster, 0.4) + set_value_based_on_target(names.o_PreTreatmentCreate_heparinDispensingRateControl_ValueAdjuster, 0.5) + set_value_based_on_target(names.o_PreTreatmentCreate_heparinStopTimeControl_ValueAdjuster, 60) select_different_dropdown(names.o_PreTreatmentCreate_acidConcentrateComboBox_BaseComboBox,config.ACID_CONCENTRATE,2) set_value_based_on_target(names.o_PreTreatmentCreate_dialysateTemperatureControl_ValueAdjuster,37.0) select_different_dropdown(names.o_PreTreatmentCreate_dialyzerTypeComboBox_BaseComboBox,config.DIALYZER_TYPE,2) set_value_based_on_target(names.o_PreTreatmentCreate_salineBolusVolumeControl_ValueAdjuster, 200) - set_value_based_on_target(names.o_PreTreatmentCreate_bpMeasurementIntervalControl_ValueAdjusterCustom,1) + select_different_dropdown(names.o_PreTreatment_vitalsCombobox_BaseCombobox,config.VITALS,1) select_different_dropdown(names.o_PreTreatmentCreate_bicarbonateConcentrateComboBox_BaseComboBox,config.BICARBONATE,0) Validatebutton = setObjectText(obj = names.o_preTreatmentStack_Text, text =config.VALIDATE) squish.mouseClick(squish.waitForObject(Validatebutton)) @@ -169,9 +176,10 @@ vDialysateTempRejectReason = 0, vHeparinDispensingRateRejectReason = 0, vHeparinBolusVolumeRejectReason = 0 - ) - confirm = squish.waitForObjectExists(names.o_preTreatmentStack_confirmButton_ConfirmButton, 3000) - squish.mouseClick(confirm) + ) + + confirmButton = setObjectText(obj = names.o_preTreatmentStack_Text,text = config.CONFIRM ) + squish.mouseClick(squish.waitForObject(confirmButton)) test.endSection() def findAllObjectsById(parent, target_id): @@ -190,15 +198,19 @@ results.extend(findAllObjectsById(child, target_id)) return results + + + + def set_value_with_slider(value_field_obj, slider_obj,parameter): """ Opens the slider and moves it gradually to the target value (step of 10). Uses controlled arrow key input for fine adjustment. """ try: - value_field = waitForObject(value_field_obj,1000) + value_field = squish.waitForObject(value_field_obj,1000) test.log(f"Opening slider for {parameter}...") squish.mousePress(value_field, squish.Qt.LeftButton) value = value_field.value @@ -211,10 +223,10 @@ if not object.exists(slider_obj): test.fail(f"{parameter}: Slider did not appear.") - slider = waitForObject(slider_obj) + slider = squish.waitForObject(slider_obj) test.log(f"{parameter}: Slider appeared successfully.") squish.mousePress(slider,squish.Qt.LeftButton) - final_value = waitForObject(value_field_obj).value + final_value = squish.waitForObject(value_field_obj).value test.verify(final_value!= value, f"{parameter} slider adjusted correctly to {final_value}") squish.mouseRelease(slider, squish.Qt.LeftButton) if object.exists(slider_obj): @@ -241,6 +253,17 @@ utils.waitForGUI(0.2) # Small delay to allow UI to update return None + +def get_row_object(screen_obj, num): + """ + To obtain a row object based on occurrence provided. + @param screen_obj: provides the container on which the row must be present + @param num: provides the occurrence value (0-based index) + @returns a real name object + """ + names.o_Row_Object["container"] = screen_obj + names.o_Row_Object["occurrence"] = num + 1 + return names.o_Row_Object def get_object_color(names_dict, error_message = "Missing object color", timeout_ms = 2000): """ @@ -252,8 +275,8 @@ return squish.waitForObject(names_dict, timeout_ms).color.name except LookupError: test.fail("ERROR : " + error_message) - return None + def get_object_source_path(names_dict, error_message = "Missing object source path", timeout_ms = 2000): """ To get an object source path with try..except catching to prevent script errors when the object is not found on the GUI @@ -262,9 +285,9 @@ """ try: return squish.waitForObject(names_dict, timeout_ms).source.path - except LookupError: - return None + except LookupError: test.fail("ERROR : " + error_message) + return None def get_object_text(names_dict, error_message = "Missing object text", timeout_ms = 2000): """ @@ -276,4 +299,82 @@ return squish.waitForObject(names_dict, timeout_ms).text except LookupError: test.fail("ERROR : " + error_message) - return None \ No newline at end of file + return None + +def findAllObjectsByText(parent, target_text): + """ + Recursively finds all child objects that have a 'text' property + matching the target_text. Returns a list of matches. + """ + results = [] + # Use hasattr to safely check for 'text' property before comparing + if hasattr(parent, 'text') and str(parent.text) == target_text: + results.append(parent) + + # Recurse through all children + for child in object.children(parent): + results.extend(findAllObjectsByText(child, target_text)) + + return results + +def verify_create_treatment_parameters(): + test.startSection("Pre treatment parameters") + navigation.navigation_pageIndicator_step(config.CREATERX) + squish.mouseClick(squish.waitForObject(names.o_PreTreatmentCreate_pretreatmentPatientIDEntry_TextEntry)) + squish.waitForObject(names.o_PreTreatmentCreate_pretreatmentPatientIDEntry_TextEntry).text ="abcd" + set_value_based_on_target(names.o_PreTreatmentCreate_bloodFlowRateControl_ValueAdjuster, 60) + set_value_based_on_target(names.o_PreTreatmentCreate_dialysateFlowRateControl_ValueAdjuster, 75) + set_value_based_on_target(names.o_PreTreatmentCreate_durationControl_ValueAdjuster, 75) + heparinValue =navigation.get_ini_value("/home/denali/Public/luis/config/configurations/Settings/System.conf", section ="Feature Configurations", key ="HeparinSyringePump") + if heparinValue == "1": + set_value_based_on_target(names.o_PreTreatmentCreate_heparinBolusVolumeControl_ValueAdjuster, 0.4) + set_value_based_on_target(names.o_PreTreatmentCreate_heparinDispensingRateControl_ValueAdjuster, 0.5) + set_value_based_on_target(names.o_PreTreatmentCreate_heparinStopTimeControl_ValueAdjuster, 60) + select_different_dropdown(names.o_PreTreatmentCreate_acidConcentrateComboBox_BaseComboBox,config.ACID_CONCENTRATE,2) + select_different_dropdown(names.o_PreTreatmentCreate_dialyzerTypeComboBox_BaseComboBox,config.DIALYZER_TYPE,2) + set_value_based_on_target(names.o_PreTreatmentCreate_salineBolusVolumeControl_ValueAdjuster, 200) + set_value_based_on_target(names.o_PreTreatmentCreate_bpMeasurementIntervalControl_ValueAdjusterCustom,5.0) + select_different_dropdown(names.o_PreTreatmentCreate_bicarbonateConcentrateComboBox_BaseComboBox,config.BICARBONATE,0) + Validatebutton = setObjectText(obj = names.o_preTreatmentStack_Text, text =config.VALIDATE) + squish.mouseClick(squish.waitForObject(Validatebutton)) + td.td_Treatment_Parameters_Validation( vAccepted = 1, + vBloodFlowRateRejectReason = 0, + vDialysateFlowRateRejectReason = 0, + vTreatmentDurationRejectReason = 0, + vSalineBolusVolumeRejectReason = 0, + vHeparinStopTimeRejectReason = 0, + vHeparinTypeRejectReason = 0, + vAcidConcentrateRejectReason = 0, + vBicarbonateConcentrateRejectReason = 0, + vDialyzerTypeRejectReason = 0, + vBloodPressureMeasureIntervalRejectReason = 0, + vRinsebackFlowRateRejectReason = 0, + vRinsebackVolumeRejectReason = 0, + vArterialPressureLimitWindowRejectReason = 0, + vVenousPressureLimitWindowRejectReason = 0, + vVenousPressureLimitAsymtrcRejectReason = 0, + vTransmembranePressureLimitWindowRejectReason = 0, + vDialysateTempRejectReason = 0, + vHeparinDispensingRateRejectReason = 0, + vHeparinBolusVolumeRejectReason = 0 + ) + confirm = squish.waitForObjectExists(names.o_preTreatmentStack_confirmButton_ConfirmButton, 3000) + squish.mouseClick(confirm) + test.endSection() + +def findAllObjectsById(parent, target_id): + """ + Recursively finds all child objects by their id property. + Returns a list of all matching objects found. + """ + results = [] + + # Use hasattr to safely check for 'id' property + if hasattr(parent, 'id') and str(parent.id) == target_id: + results.append(parent) + + # Recurse through all children to collect all instances + for child in object.children(parent): + results.extend(findAllObjectsById(child, target_id)) + + return results