Index: shared/scripts/configuration/config.py =================================================================== diff -u -r83caf575cae31050f77bd25d2bb86f380c2338c8 -r2961accdbc24fa832a3c6fa3f12fa52ce7938124 --- shared/scripts/configuration/config.py (.../config.py) (revision 83caf575cae31050f77bd25d2bb86f380c2338c8) +++ shared/scripts/configuration/config.py (.../config.py) (revision 2961accdbc24fa832a3c6fa3f12fa52ce7938124) @@ -20,98 +20,11 @@ COMMON_PATH = os.environ['HOME']+"/Projects" - -COLOR_CODES = {"Aqua": "#81ffff", "Blue": "#017dea", "Blue 2": "#1090d5", "Green": "#29fd2d", "Grey": "#d3d3d3", - "Lavender": "#db98f5", "Light Blue": "#acd7f1", "Light Teal": "#29f1da","Lime": "#b7fc36", - "Magenta":"#fd28fd", "Orange": "#f2721c", "Peach":"#f1979a", "Red": "#c53b33", "Rose":"#fc178d", - "Slate blue":"#7f7ffa", "Violet": "#6435c9", "White": "#ffffff", "Yellow": "#fcfc4d"} - -#standby mode -GOODMORNING_START_TIME_SEC = 0 -GOODEVENING_START_TIME_SEC = 43200 - -BLOOD_PRIMING_TEXT = "Blood Priming" -RINSEBACK_UNIT = " mL" -RINSEBACK_UNIT_MIN = " mL/min" -BLOOD_PRIMING_DEFAULT_VALUE = "0 mL" - -#end-treatment screens +#rinseback setup state CURRENT_COLOR = '#000000' COMPLETE_COLOR= '#4290ec' ENABLED_COLOR = '#fcfcfc' INCOMPLETE_COLOR = '#607a91' -END_TREATMENT_SCREEN = ["Rinseback Setup", "Recirculate", "Treatment Complete", "Treatment Paused State"] +NUM_OF_REQUEST_REJECT_REASONS = 43 -#rinseback-setup -RINSE_BACK_SETUP_TEXT = "Rinseback Setup" -RINSEBACK_BUTTON_TEXT = "START RINSEBACK" -END_IMAGE_BUTTON_TEXT = "End" -DECELERATE_BUTTON_TEXT = "Decelerate" -ACCELERATE_BUTTON_TEXT = "Accelerate" -PAUSE_BUTTON_TEXT = "Pause" -RESUME_BUTTON_TEXT = "Resume" -RINSEBACK_TEXT = "Rinseback" -RINSEBACK_COMPLETE_TEXT = "Rinseback Complete" -END_TREATMENT_BUTTON_TEXT = "END TREATMENT" -ADDITIONAL_BUTTON_TEXT = "ADDITIONAL" -ADDITIONAL_RINSEBACK_TEXT = "Additional Rinseback" -TIME_OUT_DURATION_300 = 300 -TIME_OUT_DURATION_200 = 200 -TIME_OUT_DURATION_100 = 100 -COUNT_DOWN_TIME_100 = 100 -MINIMUM_COUNTDOWN_TIME = 0 -BEGIN_PRIME_TITLE = "Begin Prime" -PRIMING_TITLE = "Priming" -SYSTEM_SELF_TEST_TITLE = "System Self Test" -FILTER_FLUSH_TITLE = "Filter Flush" - -# dictionary of rejection reason from application source code. -# message location -> denali-> Headers-> common-> MsgDefs.h -REJECTION_REASON = { - 0: "No Active Alarm List", - 1: "REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE", # Request is not allowed in the current operating mode - 2: "REQUEST_REJECT_REASON_TIMEOUT_WAITING_FOR_USER_CONFIRM", # Validated request was not confirmed by user in reasonable time - 3: "REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE", # Request is not allowed if not in treatment mode - 4: "REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE", # Request is not allowed in current treatment state - 5: "REQUEST_REJECT_REASON_TREATMENT_TOO_CLOSE_TO_FINISHED", # Request is not allowed so near end of treatment - 6: "REQUEST_REJECT_REASON_TREATMENT_TIME_OUT_OF_RANGE", # Treatment duration is out of range - 7: "REQUEST_REJECT_REASON_TREATMENT_TIME_LESS_THAN_CURRENT", # Treatment time change is less than currently elapsed treatment time - 8: "REQUEST_REJECT_REASON_BLOOD_FLOW_OUT_OF_RANGE", # Blood flow is out of range - 9: "REQUEST_REJECT_REASON_DIAL_FLOW_OUT_OF_RANGE", # Dialysate flow is out of range - 10: "REQUEST_REJECT_REASON_DIAL_VOLUME_OUT_OF_RANGE", # Dialysate flow rate or treatment duration causes dialysate volume to exceed limit - 11: "REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE", # Ultrafiltration volume is out of range - 12: "REQUEST_REJECT_REASON_UF_RATE_OUT_OF_RANGE", # Ultrafiltration rate is out of range - 13: "REQUEST_REJECT_REASON_TREATMENT_TIME_LESS_THAN_MINIMUM", # Treatment time change is less than minimum treatment time - 14: "REQUEST_REJECT_REASON_UF_NOT_IN_PROGESS", # Ultrafiltration is not currently in progress - 15: "REQUEST_REJECT_REASON_UF_NOT_PAUSED", # Ultrafiltration is not currently paused - 16: "REQUEST_REJECT_REASON_SALINE_BOLUS_IN_PROGRESS", # A saline bolus is in progress - 17: "REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE", # A treatment parameter is out of range - 18: "REQUEST_REJECT_REASON_HEPARIN_PRESTOP_EXCEEDS_DURATION", # The Heparin pre-stop setting is greater than the treatment duration - 19: "REQUEST_REJECT_REASON_ARTERIAL_PRESSURE_LOW_VS_HIGH", # Arterial pressure low and high alarm limits are not inconsistent - 20: "REQUEST_REJECT_REASON_VENOUS_PRESSURE_LOW_VS_HIGH", # Venous pressure low and high alarm limits are inconsistent - 21: "REQUEST_REJECT_REASON_SALINE_MAX_VOLUME_REACHED", # Saline bolus volume maximum has been reached - no more saline allowed - 22: "REQUEST_REJECT_REASON_SALINE_BOLUS_NOT_IN_PROGRESS", # A saline bolus is not in progress - 23: "REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE", # Requested user action is disabled in current state - 24: "REQUEST_REJECT_REASON_ALARM_IS_ACTIVE", # Requested user action not allowed while alarm is active - 25: "REQUEST_REJECT_REASON_INVALID_COMMAND", # Requested user action invalid - 26: "REQUEST_REJECT_REASON_TREATMENT_IS_COMPLETED", # The treatment has been completed - 27: "REQUEST_REJECT_REASON_ADDL_RINSEBACK_MAX_VOLUME_REACHED", # Rinseback additional volume maximum has been reached - no more additional rinsebacks allowed - 28: "REQUEST_REJECT_REASON_UF_VOLUME_NOT_SET", # Ultrafiltration volume is not set yet - 29: "REQUEST_REJECT_REASON_NO_PATIENT_CONNECTION_CONFIRM", # The user has not confirmed patient connection - 30: "REQUEST_REJECT_REASON_HEPARIN_PAUSE_INVALID_IN_THIS_STATE", # Heparin cannot be paused if not currently deliverying Heparin - 31: "REQUEST_REJECT_REASON_HEPARIN_NOT_PAUSED", # Heparin cannot be resumed if not paused - 32: "REQUEST_REJECT_REASON_DG_COMM_LOST", # Treatment cannot initiate if DG comm is lost - 33: "REQUEST_REJECT_REASON_DRAIN_NOT_COMPLETE", # Post-treatment reservoirs drain not complete - 34: "REQUEST_REJECT_REASON_DG_NOT_IN_STANDBY_IDLE_STATE", # Treatment cannot initiate if DG is not in standby idle state - 35: "REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT", # Request message not formatted properly - 36: "REQUEST_REJECT_REASON_INVALID_DATE_OR_TIME", # Given date/time is invalid - 37: "REQUEST_REJECT_REASON____AVAILABLE_1", # Not used - available for use - 38: "REQUEST_REJECT_REASON_BATTERY_IS_NOT_CHARGED", # Battery does not have enough charge to start treatment - 39: "REQUEST_REJECT_REASON_RINSEBACK_NOT_COMPLETED", # Cannot move on to recirculate without completing full rinseback. - 40: "REQUEST_REJECT_REASON_RESERVOIR_ONE_IS_NOT_READY", # Reservoir one fill is not complete - 41: "REQUEST_REJECT_REASON_PUMP_TRACK_NOT_CLOSED", # Pump track is not ready / closed - 42: "REQUEST_REJECT_REASON_DOOR_NOT_CLOSED", # Door is not closed - 43: "REQUEST_REJECT_REASON_SYRINGE_NOT_PRESENT", # Syringe is not present - } -NUM_OF_REQUEST_REJECT_REASONS = 43 \ No newline at end of file Index: shared/scripts/configuration/strings.py =================================================================== diff -u -rb7f4fef664182ef9b8be312166923cf6d040bd76 -r2961accdbc24fa832a3c6fa3f12fa52ce7938124 --- shared/scripts/configuration/strings.py (.../strings.py) (revision b7f4fef664182ef9b8be312166923cf6d040bd76) +++ shared/scripts/configuration/strings.py (.../strings.py) (revision 2961accdbc24fa832a3c6fa3f12fa52ce7938124) @@ -1,35 +1,66 @@ # -*- coding: utf-8 -*- -BLOOD_PRIMING_TEXT = "Blood Priming" -SALINE_UNIT = "mL" -BLOOD_PRIMING_DEFAULT_VALUE = "0 mL" -RESET_BINARY = "0" -SET_BINARY = "1" #Message binaries appending with for easy identification -ACK_REQ_STATUS = 'Ack Req' -ACK_BAK_STATUS = 'Ack Bak' +#rinseback-setup +RINSE_BACK_SETUP_TEXT = "Rinseback Setup" +RINSEBACK_BUTTON_TEXT = "START RINSEBACK" +END_IMAGE_BUTTON_TEXT = "End" +DECELERATE_BUTTON_TEXT = "Decelerate" +ACCELERATE_BUTTON_TEXT = "Accelerate" +PAUSE_BUTTON_TEXT = "Pause" +RESUME_BUTTON_TEXT = "Resume" +RINSEBACK_TEXT = "Rinseback" +RINSEBACK_COMPLETE_TEXT = "Rinseback Complete" +END_TREATMENT_BUTTON_TEXT = "END TREATMENT" +ADDITIONAL_BUTTON_TEXT = "ADDITIONAL" +ADDITIONAL_RINSEBACK_TEXT = "Additional Rinseback" +RINSEBACK_UNIT = " mL" +RINSEBACK_UNIT_MIN = " mL/min" - -#Setting -CLEAR_ALARM_CONDITION_TEXT = "Clear Alarm Condition" -EXPORT_TEXT ="Export" -DEVICE_SETTINGS_TEXT = "Device Settings" -DEVICE_SETTINGS_SCREEN_PARAMETER = ["Information", "Volume And Brightness", "Wi-Fi", "Bluetooth Cuff", "Dialysate Generator Settings", "Services"] -SettingsHome_Treatment_Text = "Treatment" -SettingsHome_Manager_Text = "Manager" -SettingsHome_Settings_Text = "Settings" - -#Information - -INFORMATION_TITLES = ["Information", "Versions"] -INFORMATION_PARAMETERS = ["Information", "UI Version", "HD Version", "HD FPGA Version", "HD Serial Number", "DG Version", "DG FPGA Version", "DG Serial Number"] -SERIVCES_TITLE = "Services" -SERVICES_PARAMETERS = ["HD Last Service Date", "HD Next Service Date", "DG Last Service Date", "DG Next Service Date"] - -#volume and brightness -VOLUME_AND_BRIGHTNESS_TEXT = "Volume And Brightness" -BRIGHTNESS_TEXT = "Brightness" -ALARM_VOLUME_TEXT = "Alarm Volume" -BACK_TEXT = "BACK" -UNIT_OF_VOLUME_AND_BRIGHTNESS = "%" - - +# dictionary of rejection reason from application source code. +# message location -> denali-> Headers-> common-> MsgDefs.h +REJECTION_REASON = { + 0: "No Active Alarm List", + 1: "REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE", # Request is not allowed in the current operating mode + 2: "REQUEST_REJECT_REASON_TIMEOUT_WAITING_FOR_USER_CONFIRM", # Validated request was not confirmed by user in reasonable time + 3: "REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE", # Request is not allowed if not in treatment mode + 4: "REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE", # Request is not allowed in current treatment state + 5: "REQUEST_REJECT_REASON_TREATMENT_TOO_CLOSE_TO_FINISHED", # Request is not allowed so near end of treatment + 6: "REQUEST_REJECT_REASON_TREATMENT_TIME_OUT_OF_RANGE", # Treatment duration is out of range + 7: "REQUEST_REJECT_REASON_TREATMENT_TIME_LESS_THAN_CURRENT", # Treatment time change is less than currently elapsed treatment time + 8: "REQUEST_REJECT_REASON_BLOOD_FLOW_OUT_OF_RANGE", # Blood flow is out of range + 9: "REQUEST_REJECT_REASON_DIAL_FLOW_OUT_OF_RANGE", # Dialysate flow is out of range + 10: "REQUEST_REJECT_REASON_DIAL_VOLUME_OUT_OF_RANGE", # Dialysate flow rate or treatment duration causes dialysate volume to exceed limit + 11: "REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE", # Ultrafiltration volume is out of range + 12: "REQUEST_REJECT_REASON_UF_RATE_OUT_OF_RANGE", # Ultrafiltration rate is out of range + 13: "REQUEST_REJECT_REASON_TREATMENT_TIME_LESS_THAN_MINIMUM", # Treatment time change is less than minimum treatment time + 14: "REQUEST_REJECT_REASON_UF_NOT_IN_PROGESS", # Ultrafiltration is not currently in progress + 15: "REQUEST_REJECT_REASON_UF_NOT_PAUSED", # Ultrafiltration is not currently paused + 16: "REQUEST_REJECT_REASON_SALINE_BOLUS_IN_PROGRESS", # A saline bolus is in progress + 17: "REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE", # A treatment parameter is out of range + 18: "REQUEST_REJECT_REASON_HEPARIN_PRESTOP_EXCEEDS_DURATION", # The Heparin pre-stop setting is greater than the treatment duration + 19: "REQUEST_REJECT_REASON_ARTERIAL_PRESSURE_LOW_VS_HIGH", # Arterial pressure low and high alarm limits are not inconsistent + 20: "REQUEST_REJECT_REASON_VENOUS_PRESSURE_LOW_VS_HIGH", # Venous pressure low and high alarm limits are inconsistent + 21: "REQUEST_REJECT_REASON_SALINE_MAX_VOLUME_REACHED", # Saline bolus volume maximum has been reached - no more saline allowed + 22: "REQUEST_REJECT_REASON_SALINE_BOLUS_NOT_IN_PROGRESS", # A saline bolus is not in progress + 23: "REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE", # Requested user action is disabled in current state + 24: "REQUEST_REJECT_REASON_ALARM_IS_ACTIVE", # Requested user action not allowed while alarm is active + 25: "REQUEST_REJECT_REASON_INVALID_COMMAND", # Requested user action invalid + 26: "REQUEST_REJECT_REASON_TREATMENT_IS_COMPLETED", # The treatment has been completed + 27: "REQUEST_REJECT_REASON_ADDL_RINSEBACK_MAX_VOLUME_REACHED", # Rinseback additional volume maximum has been reached - no more additional rinsebacks allowed + 28: "REQUEST_REJECT_REASON_UF_VOLUME_NOT_SET", # Ultrafiltration volume is not set yet + 29: "REQUEST_REJECT_REASON_NO_PATIENT_CONNECTION_CONFIRM", # The user has not confirmed patient connection + 30: "REQUEST_REJECT_REASON_HEPARIN_PAUSE_INVALID_IN_THIS_STATE", # Heparin cannot be paused if not currently deliverying Heparin + 31: "REQUEST_REJECT_REASON_HEPARIN_NOT_PAUSED", # Heparin cannot be resumed if not paused + 32: "REQUEST_REJECT_REASON_DG_COMM_LOST", # Treatment cannot initiate if DG comm is lost + 33: "REQUEST_REJECT_REASON_DRAIN_NOT_COMPLETE", # Post-treatment reservoirs drain not complete + 34: "REQUEST_REJECT_REASON_DG_NOT_IN_STANDBY_IDLE_STATE", # Treatment cannot initiate if DG is not in standby idle state + 35: "REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT", # Request message not formatted properly + 36: "REQUEST_REJECT_REASON_INVALID_DATE_OR_TIME", # Given date/time is invalid + 37: "REQUEST_REJECT_REASON____AVAILABLE_1", # Not used - available for use + 38: "REQUEST_REJECT_REASON_BATTERY_IS_NOT_CHARGED", # Battery does not have enough charge to start treatment + 39: "REQUEST_REJECT_REASON_RINSEBACK_NOT_COMPLETED", # Cannot move on to recirculate without completing full rinseback. + 40: "REQUEST_REJECT_REASON_RESERVOIR_ONE_IS_NOT_READY", # Reservoir one fill is not complete + 41: "REQUEST_REJECT_REASON_PUMP_TRACK_NOT_CLOSED", # Pump track is not ready / closed + 42: "REQUEST_REJECT_REASON_DOOR_NOT_CLOSED", # Door is not closed + 43: "REQUEST_REJECT_REASON_SYRINGE_NOT_PRESENT", # Syringe is not present + } Index: shared/scripts/configuration/utility.py =================================================================== diff -u -r9498ba0c5cd12801de49e3eda26d9b3a8dfc4e55 -r2961accdbc24fa832a3c6fa3f12fa52ce7938124 --- shared/scripts/configuration/utility.py (.../utility.py) (revision 9498ba0c5cd12801de49e3eda26d9b3a8dfc4e55) +++ shared/scripts/configuration/utility.py (.../utility.py) (revision 2961accdbc24fa832a3c6fa3f12fa52ce7938124) @@ -13,92 +13,14 @@ ############################################################################ import names -import sys import test import squish -from configuration import config -from builtins import int as pyInt import object import time +from configuration.utility import * from configuration.config import * - -def scroll_to_zone(zone=None, screen_object=None): - - """ - scroll to the numeric if object is hidden - @param zone - UI object - @param screen_object - UI object (UI Home screen = waveforms + numerics) - @return boolean true/false - """ - counter = 0 - while counter <= 100: - try: - counter += 1 - squish.findObject(zone) - squish.snooze(0.5) - if check_if_object_is_within_the_container(obj=zone, container=screen_object): - return True - else: - raise RuntimeError - except RuntimeError: - ScreenObj = squish.waitForObject(screen_object) - screenHeight = pyInt(ScreenObj.height) - screenWidth = pyInt(ScreenObj.width) - squish.mouseWheel(ScreenObj, screenWidth-1000, screenHeight-10, 0, -50, squish.Qt.NoModifier) - - raise LookupError("zone object is not in view to the user after trying 100 times") - - -def check_if_object_is_within_the_container(obj=None, container=None): - """ - check if an object is inside a container - @param obj - child UI object - @param container - container UI object - @return boolean true/false - """ - container = squish.findObject(container) - containerPos = container.mapToGlobal(squish.QPoint(0, 0)) - container_x, container_y = pyInt(containerPos.x), pyInt(containerPos.y) - container_width, container_height = pyInt(container.width), pyInt(container.height) - - obj = squish.findObject(obj) - objPos = obj.mapToGlobal(squish.QPoint(0, 0)) - obj_x, obj_y = pyInt(objPos.x), pyInt(objPos.y) - obj_width, obj_height = pyInt(obj.width), pyInt(obj.height) - - if obj_x >= container_x and obj_y >= container_y: - if (obj_x + obj_width) <= (container_x + container_width) and (obj_y + obj_height) <= (container_y + container_height): - return True - - return False - -def scroll_to_zone(zone=None, screen_object=None): - """ - scroll to the numeric if object is hidden - @param zone - UI object - @param screen_object - UI object (UI Home screen = waveforms + numerics) - @return boolean true/false - """ - counter = 0 - while counter <= 100: - try: - counter += 1 - squish.findObject(zone) - squish.snooze(0.5) - if check_if_object_is_within_the_container(obj=zone, container=screen_object): - return True - else: - raise RuntimeError - except RuntimeError: - ScreenObj = squish.waitForObject(screen_object) - screenHeight = pyInt(ScreenObj.height) - screenWidth = pyInt(ScreenObj.width) - squish.mouseWheel(ScreenObj, screenWidth-1000, - screenHeight-10, 0, -50, squish.Qt.NoModifier) - - raise LookupError("zone object is not in view to the user after " + \ - "trying 100 times") - +from configuration import config + def get_bullet_object(screen_obj, num): """ To obtain a bullet object based on occurrence provided. @@ -123,83 +45,42 @@ test.passes("object is not present as expected") squish.testSettings.objectNotFoundDebugging = True + -def verify_countdown(screen_title, time_out, hd_simulator, dg_simulator): +def convert_seconds_into_min_and_sec(seconds, time_format="%M:%S"): """ - Method to verify the count down - time in application - @param screen_title - (str) current title of the screen - @param time_out - (int) time out duration in secs - @Param hd_simulator - Instance of class HDSimulator - @Param dg_simulator - Instance of class DGSimulator + Method to convert seconds into minute format. + @param seconds - time in seconds. + @param time_format (str) - time format. + @return (int) - minute time """ - test.startSection("Verify the count down time in application") - for count_down in range(COUNT_DOWN_TIME_100, MINIMUM_COUNTDOWN_TIME-1, -1): - if screen_title == BEGIN_PRIME_TITLE: - hd_simulator.cmd_send_pre_treatment_self_test_dry_progress_data(time_out, count_down) - elif screen_title == PRIMING_TITLE: - hd_simulator.cmd_send_pre_treatment_disposables_prime_progress_data(time_out, count_down) - elif screen_title == SYSTEM_SELF_TEST_TITLE: - hd_simulator.cmd_send_pre_treatment_self_test_no_cartridge_progress_data(time_out, count_down) - else: - dg_simulator.cmd_send_dg_pre_treatment_filter_flush_progress_data(time_out, count_down) - actual_time = get_time(screen_title) - expected_time = convert_seconds_into_min_and_sec(count_down) - test.compare(actual_time, expected_time, "Actual count down time: {} should be equal to expected count down time {}".format(actual_time, expected_time)) - verify_the_progress(count_down, screen_title, time_out) - test.endSection() - -def convert_seconds_into_min_and_sec(seconds): - min = time.strftime("%M", time.gmtime(seconds)) - sec = time.strftime("%S", time.gmtime(seconds)) - return min,sec + seconds = int(seconds) + min_and_sec = time.strftime(time_format, time.gmtime(seconds)) + return min_and_sec -def get_time(screen_title): - """ - Method to return the current count down - in the application - @param screen_title - (str) current title of the screen - """ - progress_circle_index = 4 - if screen_title == BEGIN_PRIME_TITLE or screen_title == PRIMING_TITLE: - parent_object = object.parent(squish.waitForObjectExists(self_test_dry_check_list_text(screen_title))) - elif screen_title == SYSTEM_SELF_TEST_TITLE: - parent_object = object.parent(squish.waitForObjectExists(names.o_system_self_test)) - else: - parent_object = object.parent(squish.waitForObjectExists(names.o_rinseack_title)) - progress_circle_index = 10 - time_parent_children = object.children(parent_object) - test.log(str(time_parent_children)) - progress_circle_parent = time_parent_children[progress_circle_index] - progress_circle_parent = object.children(progress_circle_parent) - test.log(str(progress_circle_parent)) - progress_circle_parent = progress_circle_parent[0] - test.log(str(progress_circle_parent)) - progress_circle_parent = object.children(progress_circle_parent) - progress_circle_children = object.children(progress_circle_parent[0]) - test.log(str(progress_circle_children)) - time_text = progress_circle_children[0] - test.log(str(time_text)) - return time_text.time -def verify_the_progress(count_down, screen_title, time_out): +def verify_bullet_navigation(num, num_of_instructions, screen_obj): """ - Method to verify the current progress - @param count_down - (int) current count down time - @param screen_title - (str) current title of the screen - @param time_out - (int) time out duration in secs + Method to verify status of bullets based + on number of instruction screen + @param num - (int) number of indicator + @param num_of_instructions- (int) count the number of instructions + @param object - screen_obj - (str) Screen object """ - test.startSection("Verifying the current progress") - if screen_title == BEGIN_PRIME_TITLE or screen_title == PRIMING_TITLE: - current_progress = (squish.waitForObjectExists(names.o_self_test_dry_progress)).progressValue - elif screen_title == SYSTEM_SELF_TEST_TITLE: - current_progress = (squish.waitForObjectExists(names.o_system_self_test_progress)).progressValue - else: - current_progress = (squish.waitForObjectExists(names.o_rinseback_setup_progress)).progressValue - #Since progress value is equal maximum count down value - current count down value - expected_progress = time_out - count_down - test.compare(current_progress, expected_progress, "{} should be the current progress".format(expected_progress)) - test.endSection() + test.startSection("instruction bullet verification for screens") + for instruction in range(1, num_of_instructions): + bullet_children = object.children(squish.waitForObjectExists(get_bullet_object(screen_obj,(0 + instruction) - 1))) + bullet_circle_color = bullet_children[0].color.name + bullet_border_color = bullet_children[0].border.color.name + if instruction <= num: + test.compare(bullet_circle_color, config.COMPLETE_COLOR) + test.compare(bullet_border_color,config.COMPLETE_COLOR) + test.log(str(instruction) + " Complete bullet") + else: + test.compare(bullet_circle_color, config.CURRENT_COLOR) + test.compare(bullet_border_color,config.INCOMPLETE_COLOR) + test.log(str(instruction) + " Incomplete bullet") + test.endSection() def rinseback_rejection_msg(text): names.o_rinseback_rejection_msg["text"] = text Index: shared/scripts/names.py =================================================================== diff -u -r9498ba0c5cd12801de49e3eda26d9b3a8dfc4e55 -r2961accdbc24fa832a3c6fa3f12fa52ce7938124 --- shared/scripts/names.py (.../names.py) (revision 9498ba0c5cd12801de49e3eda26d9b3a8dfc4e55) +++ shared/scripts/names.py (.../names.py) (revision 2961accdbc24fa832a3c6fa3f12fa52ce7938124) @@ -17,47 +17,14 @@ o_Gui_MainView = {"type": "Gui::MainView", "unnamed": 1, "visible": True} o_Overlay = {"container": o_Gui_MainView, "type": "Overlay", "unnamed": 1, "visible": True} o_borderRect_Rectangle = {"container": o_Overlay, "gradient": 0, "id": "_borderRect", "type": "Rectangle", "unnamed": 1, "visible": True} -o_minimizeButton_UpDownButton = {"container": o_Overlay, "gradient": 0, "id": "_minimizeButton", "type": "UpDownButton", "unnamed": 1, "visible": True} -o_shape_Shape = {"container": o_Gui_MainView, "id": "_shape", "type": "Shape", "unnamed": 1, "visible": True} -o_PreTreatmentCreateStack_PreTreatmentCreateStack = {"container": o_Gui_MainView, "objectName": "_PreTreatmentCreateStack", "type": "PreTreatmentCreateStack", "visible": True} -o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase = {"container": o_PreTreatmentCreateStack_PreTreatmentCreateStack, "objectName": "_PreTreatmentBase", "type": "TreatmentFlowBase", "visible": True} -o_PreTreatmentBase_titleBar_StepNavigationTitleBar = {"container": o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase, "gradient": 0, "id": "_titleBar", "type": "StepNavigationTitleBar", "unnamed": 1, "visible": True} -o_titleBar_Rectangle = {"container": o_Overlay, "gradient": 0, "id": "_titleBar", "type": "Rectangle", "unnamed": 1, "visible": True} -o_treatmentStack_TreatmentStack = {"container": o_Gui_MainView, "objectName": "TreatmentStack", "type": "TreatmentStack", "visible": True} -o_treatmentStack_TreatmentBloodPrime_ScreenItem = {"container": o_treatmentStack_TreatmentStack, "objectName": "_TreatmentBloodPrime", "type": "ScreenItem", "visible": True} -o_PreTreatmentBase_input_TextInput = {"container": o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase, "echoMode": 0, "id": "_input", "type": "TextInput", "unnamed": 1, "visible": True} -o_PreTreatmentBase_CONFIRM_Text = {"container": o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase, "text": "CONFIRM", "type": "Text", "unnamed": 1, "visible": True} -o_PreTreatmentCreateStack_PreTreatmentCreate_PreTreatmentCreate = {"container": o_PreTreatmentCreateStack_PreTreatmentCreateStack, "objectName": "_PreTreatmentCreate", "type": "PreTreatmentCreate", "visible": True} -o_PreTreatmentCreate_bloodFlowRate_SliderCreateTreatment = {"container": o_PreTreatmentCreateStack_PreTreatmentCreate_PreTreatmentCreate, "gradient": 0, "objectName": "_bloodFlowRate", "type": "SliderCreateTreatment", "visible": True} -o_PreTreatmentCreate_bloodFlowRateSlider_Slider = {"container": o_PreTreatmentCreateStack_PreTreatmentCreate_PreTreatmentCreate, "gradient": 0, "objectName": "_bloodFlowRateSlider", "type": "Slider", "visible": True} -o_PreTreatmentCreate_dialysateFlowRate_SliderCreateTreatment = {"container": o_PreTreatmentCreateStack_PreTreatmentCreate_PreTreatmentCreate, "gradient": 0, "objectName": "_dialysateFlowRate", "type": "SliderCreateTreatment", "visible": True} -o_PreTreatementCreateStack_PreTreatmentBase_TreatmentFlowBase = {"container":o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase,"objectName":"_PreTreatmentBase","type":"TreatmentFlowBase", "visible": True} -o_treatmentStack_treatmentHome_TreatmentHome = {"container": o_treatmentStack_TreatmentStack, "id": "_treatmentHome", "type": "TreatmentHome", "unnamed": 1, "visible": True} -o_confirmButton_TouchRect = {"container": o_Gui_MainView, "gradient": 0, "objectName": "_confirmButton", "type": "TouchRect", "visible": False} -o_backButton_BackButton = {"container": o_Gui_MainView, "gradient": 0, "objectName": "_backButton", "type": "BackButton", "visible": False} -o_NinePatchImage = {"container": o_Gui_MainView, "occurrence": 6, "type": "NinePatchImage", "unnamed": 1, "visible": False} -o_PreTreatmentBase_backgroundRect_Rectangle = {"container": o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase, "gradient": 0, "id": "_backgroundRect", "type": "Rectangle", "unnamed": 1, "visible": True} -o_PreTreatmentBase_confirmButton_TouchRect = {"container": o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase, "gradient": 0, "objectName": "_confirmButton", "type": "TouchRect", "visible": True} +# o_minimizeButton_UpDownButton = {"container": o_Overlay, "gradient": 0, "id": "_minimizeButton", "type": "UpDownButton", "unnamed": 1, "visible": True} +# o_shape_Shape = {"container": o_Gui_MainView, "id": "_shape", "type": "Shape", "unnamed": 1, "visible": True} +# o_PreTreatmentCreateStack_PreTreatmentCreateStack = {"container": o_Gui_MainView, "objectName": "_PreTreatmentCreateStack", "type": "PreTreatmentCreateStack", "visible": True} +# o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase = {"container": o_PreTreatmentCreateStack_PreTreatmentCreateStack, "objectName": "_PreTreatmentBase", "type": "TreatmentFlowBase", "visible": True} +# o_PreTreatmentBase_titleBar_StepNavigationTitleBar = {"container": o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase, "gradient": 0, "id": "_titleBar", "type": "StepNavigationTitleBar", "unnamed": 1, "visible": True} +# o_titleBar_Rectangle = {"container": o_Overlay, "gradient": 0, "id": "_titleBar", "type": "Rectangle", "unnamed": 1, "visible": True} +# o_treatmentStack_TreatmentStack = {"container": o_Gui_MainView, "objectName": "TreatmentStack", "type": "TreatmentStack", "visible": True} - -#standbymode -o_MainHome_MainHome = {"container": o_Gui_MainView, "objectName": "_MainHome", "type": "MainHome", "visible": True} -o_standby_page = {"container": o_MainHome_MainHome, "type": "Column", "unnamed": 1, "visible": True} - - -#in-treatment -o_blood_priming = {"container": o_treatmentStack_TreatmentBloodPrime_ScreenItem, "text": "Blood Priming", "type": "Text", "unnamed": 1, "visible": True} -o_blood_priming_value_by_default = {"container": o_treatmentStack_TreatmentBloodPrime_ScreenItem, "text": "0 mL", "type": "Text", "unnamed": 1, "visible": True} -o_uf_minimum_value = {"container": o_treatmentStack_treatmentHome_TreatmentHome, "text": "0.000", "type": "Text", "unnamed": 1, "visible": True} -o_uf_maximum_value = {"container": o_treatmentStack_treatmentHome_TreatmentHome, "text": "0.600", "type": "Text", "unnamed": 1, "visible": True} -o_uf_minimum_value_pop_up = {"container": o_Overlay, "text": "0.000", "type": "Text", "unnamed": 1, "visible": True} -o_uf_maximum_value_pop_up = {"container": o_Overlay, "text": "0.600", "type": "Text", "unnamed": 1, "visible": True} -o_edit_uf_value = {"container": o_Overlay, "text": "EDIT ULTRAFILTRATION VOLUME", "type": "Text", "unnamed": 1, "visible": True} -o_uf_back_button = {"container": o_Overlay, "text": "BACK", "type": "Text", "unnamed": 1, "visible": True} -o_uf_close_button = {"container": o_Overlay, "id": "_image", "source": "qrc:/images/iClose", "type": "Image", "unnamed": 1, "visible": True} -o_fluid_text = {"container": o_treatmentStack_treatmentHome_TreatmentHome, "text": "Volume Delivered", "type": "Text", "unnamed": 1, "visible": True} -o_cumulative_fluid_text = {"container": o_treatmentStack_treatmentHome_TreatmentHome, "text": "Cumulative Delivered", "type": "Text", "unnamed": 1, "visible": True} - #end-treatment screens o_text_object = {"type": "Text", "unnamed": 1, "visible": True} o_bullet_object = {"type": "StepBullet", "unnamed": 1, "visible": True} @@ -70,7 +37,6 @@ o_EndTreatmentEndStack_EndTreatmentBase_EndTreatmentBase = {"container": o_EndTreatmentEndStack_EndTreatmentEndStack, "objectName": "_EndTreatmentBase", "type": "EndTreatmentBase", "visible": True} o_rinse_back_text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinsebackInit_EndTreatmentRinsebackInit, "text": "Rinseback Setup", "type": "Text", "unnamed": 1, "visible": True} o_start_rinseback_button_text = {"container": o_EndTreatmentEndStack_EndTreatmentBase_EndTreatmentBase, "text": "START RINSEBACK", "type": "Text", "unnamed": 1, "visible": True} -o_rinseback_setup_rinseback_button = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinsebackInit_EndTreatmentRinsebackInit, "text": "START RINSEBACK", "type": "Text", "unnamed": 1, "visible": True} o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinsebackStack, "objectName": "_EndTreatmentRinseback", "type": "EndTreatmentRinseback", "visible": True} o_EndTreatmentRinseback_imageEnd_ImageText = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback, "id": "_imageEnd", "source": "qrc:/images/iRedCrossWCircle", "type": "ImageText", "unnamed": 1, "visible": True} o_EndTreatmentRinseback_imageDecelerate_ImageText = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback, "id": "_imageDecelerate", "source": "qrc:/images/iDecelerate", "type": "ImageText", "unnamed": 1, "visible": True} @@ -84,28 +50,20 @@ o_EndTreatmentRinsebackComplete_ADDITIONAL_Text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinsebackComplete_EndTreatmentRinsebackComplete, "text": "ADDITIONAL", "type": "Text", "unnamed": 1, "visible": True} o_EndTreatmentRinsebackStack_EndTreatmentAdditional_EndTreatmentBase = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinsebackStack, "objectName": "_EndTreatmentAdditional", "type": "EndTreatmentBase", "visible": True} o_EndTreatmentAdditional_Additional_Rinseback_Text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentAdditional_EndTreatmentBase, "text": "Additional Rinseback", "type": "Text", "unnamed": 1, "visible": True} -o_rinseback_timer_ml_min_text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback, "text": " mL/min", "type": "Text", "unnamed": 1, "visible": True} o_shape_Shape = {"container": o_Gui_MainView, "id": "_shape", "type": "Shape", "unnamed": 1, "visible": True} o_rinseback_setup_progress = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback, "id": "_Circle", "type": "ProgressCircle", "visible": True} - -o_EndTreatmentRinseback_0_mL_Text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback, "text": "0 mL", "type": "Text", "unnamed": 1, "visible": True} o_rinseback_title = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback, "text": "Rinseback", "type": "Text", "unnamed": 1, "visible": True} o_EndTreatmentRinsebackInit_TimeText_TimeText = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinsebackInit_EndTreatmentRinsebackInit, "gradient": 0, "objectName": "_TimeText", "type": "TimeText", "visible": True} o_EndTreatmentRinsebackInit_TimeText_minute_Text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinsebackInit_EndTreatmentRinsebackInit, "objectName": "_TimeText_minute", "type": "Text", "visible": True} o_EndTreatmentRinsebackInit_TimeText_hour_Text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinsebackInit_EndTreatmentRinsebackInit, "objectName": "_TimeText_hour", "type": "Text", "visible": True} -o_EndTreatmentRinseback_1_mL_Text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback, "text": "Text", "type": "Text", "unnamed": 1, "visible": True} o_EndTreatmentRinseback_1_mL_min_Text_2 = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback, "type": "Text", "unnamed": 1, "visible": True} o_EndTreatmentRinseback_1_mL_Text_2 = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback, "type": "Text", "unnamed": 1, "visible": True} -o_EndTreatmentAdditional_1_mL_Text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentAdditional_EndTreatmentBase, "type": "Text", "unnamed": 1, "visible": True} -o_EndTreatmentAdditional_1_mL_min_Text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentAdditional_EndTreatmentBase, "type": "Text", "unnamed": 1, "visible": True} o_EndTreatmentRinsebackComplete_TimeText_minute_Text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinsebackComplete_EndTreatmentRinsebackComplete, "objectName": "_TimeText_minute", "type": "Text", "visible": True} o_EndTreatmentRinsebackComplete_TimeText_hour_Text = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinsebackComplete_EndTreatmentRinsebackComplete,"objectName": "_TimeText_hour", "type": "Text", "visible": True} - o_text_volume_rinseback_state = {"type": "Text", "unnamed": 1, "visible": True} o_EndTreatmentRinseback_circle_Circle = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback, "id": "_circle", "type": "Circle", "unnamed": 1, "visible": True} o_EndTreatmentAdditional_circle_Circle = {"container": o_EndTreatmentRinsebackStack_EndTreatmentAdditional_EndTreatmentBase, "id": "_circle", "type": "Circle", "unnamed": 1, "visible": True} o_EndTreatmentRinseback_circle_ProgressCircle = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback, "id": "_circle", "type": "ProgressCircle", "unnamed": 1, "visible": True} o_EndTreatmentAdditional_circle_ProgressCircle = {"container": o_EndTreatmentRinsebackStack_EndTreatmentAdditional_EndTreatmentBase, "id": "_circle", "type": "ProgressCircle", "unnamed": 1, "visible": True} - o_rinseback_rejection_msg = {"container": o_EndTreatmentRinsebackStack_EndTreatmentRinsebackStack, "type": "Text", "unnamed": 1, "visible": True} Index: tst_rinseback_setup/test.py =================================================================== diff -u -r9498ba0c5cd12801de49e3eda26d9b3a8dfc4e55 -r2961accdbc24fa832a3c6fa3f12fa52ce7938124 --- tst_rinseback_setup/test.py (.../test.py) (revision 9498ba0c5cd12801de49e3eda26d9b3a8dfc4e55) +++ tst_rinseback_setup/test.py (.../test.py) (revision 2961accdbc24fa832a3c6fa3f12fa52ce7938124) @@ -17,27 +17,26 @@ # This test contradicts verification of post treatment section. import names -import builtins import test from dialin.ui import utils from dialin.ui.hd_simulator import HDSimulator from dialin.ui.dg_simulator import DGSimulator from configuration import config +from configuration.config import * from configuration import utility from dialin.common.hd_defs import HDOpModes, HDOpSubModes, TreatmentStates, TreatmentEndStates, TreatmentRinsebackStates dg_simulator = DGSimulator() hd_simulator = HDSimulator() SCREEN_OBJ1 = names.o_EndTreatmentRinsebackStack_EndTreatmentRinsebackInit_EndTreatmentRinsebackInit - -num_of_instructions = 3 rightarrow_obj_names = [names.o_EndTreatmentRinsebackInit_rightImage_Image] leftarrow_obj_names = [names.o_EndTreatmentRinsebackInit_leftImage_Image] container_run_state = names.o_EndTreatmentRinsebackStack_EndTreatmentRinseback_EndTreatmentRinseback container_additional_state = names.o_EndTreatmentRinsebackStack_EndTreatmentAdditional_EndTreatmentBase count_down_value = 121 count_down_default_value = 0 timer_default_value = 1 +num_of_instructions = 3 def set_custom_object_property_rinseback_ml(text,container): """ @@ -48,29 +47,6 @@ names.o_text_volume_rinseback_state["container"] = container return names.o_text_volume_rinseback_state -def verify_bullet_navigation(num, num_of_instructions, screen_obj): - """ - Method to verify status of bullets based - on number of instruction screen - @param num - (int) number of indicator - @param num_of_instructions- (int) count the number of instructions - @param object - screen_obj - (str) Screen object - """ - test.startSection("instruction bullet verification for screens") - for instruction in range(1, num_of_instructions): - bullet_children = object.children(waitForObjectExists(utility.get_bullet_object(screen_obj,(0 + instruction) - 1))) - bullet_circle_color = bullet_children[0].color.name - bullet_border_color = bullet_children[0].border.color.name - if instruction <= num: - test.compare(bullet_circle_color, config.COMPLETE_COLOR) - test.compare(bullet_border_color,config.COMPLETE_COLOR) - test.log(str(instruction) + " Complete bullet") - else: - test.compare(bullet_circle_color, config.CURRENT_COLOR) - test.compare(bullet_border_color,config.INCOMPLETE_COLOR) - test.log(str(instruction) + " Incomplete bullet") - test.endSection() - def verify_of_rinseback_stop_init_screen(): """ Method to navigate and verify to Rinseback Stop INIT state screens @@ -86,7 +62,8 @@ test.startSection("verifying count down value of timer") for num in range(timer_default_value,count_down_value): hd_simulator.cmd_send_treatment_rinseback_data(target_vol= count_down_default_value, current_vol= count_down_default_value, flow_rate= count_down_default_value, timeout= num,timeout_countdown= num, is_completed= 0) - min,sec = utility.convert_seconds_into_min_and_sec(num) + min = utility.convert_seconds_into_min_and_sec(num, time_format="%M") + sec = utility.convert_seconds_into_min_and_sec(num, time_format="%S") test.compare(str(waitForObject(names.o_EndTreatmentRinsebackInit_TimeText_minute_Text).text),str(sec),"Verifying seconds appearing on UI") test.compare(str(waitForObject(names.o_EndTreatmentRinsebackInit_TimeText_hour_Text).text),str(min),"Verifying minutes appearing on UI") test.endSection() @@ -174,7 +151,8 @@ test.startSection("verifying count down value of timer") for num in range(timer_default_value,count_down_value): hd_simulator.cmd_send_treatment_rinseback_data(target_vol= count_down_value, current_vol= count_down_default_value, flow_rate= count_down_default_value, timeout= num,timeout_countdown= num, is_completed= 0) - min,sec = utility.convert_seconds_into_min_and_sec(num) + min = utility.convert_seconds_into_min_and_sec(num, time_format="%M") + sec = utility.convert_seconds_into_min_and_sec(num, time_format="%S") test.compare(str(waitForObject(names.o_EndTreatmentRinsebackComplete_TimeText_minute_Text).text),str(sec), "Vrifying seconds apeearing on UI") test.compare(str(waitForObject(names.o_EndTreatmentRinsebackComplete_TimeText_hour_Text).text),str(min), "Vrifying minutes apeearing on UI") test.endSection() @@ -220,7 +198,7 @@ test.startSection("verifying right arrow functionality for rinseback setup state Screen") utility.verify_missing_object(leftarrow_obj_names) for indicator in range(1, num_of_instructions, 1): - verify_bullet_navigation(indicator, num_of_instructions, SCREEN_OBJ1) + utility.verify_bullet_navigation(indicator, num_of_instructions, SCREEN_OBJ1) if indicator != num_of_instructions: mouseClick(waitForObject(names.o_EndTreatmentRinsebackInit_rightImage_Image)) test.compare(str(waitForObjectExists(names.o_rinse_back_text).text), config.RINSE_BACK_SETUP_TEXT, "Rinseback Setup text must be {}".format(config.RINSE_BACK_SETUP_TEXT)) @@ -235,7 +213,7 @@ test.startSection("verifying left arrow functionality for rinseback setup state screens") utility.verify_missing_object(rightarrow_obj_names) for indicator in range(num_of_instructions, 0, -1): - verify_bullet_navigation(indicator, num_of_instructions, SCREEN_OBJ1) + utility.verify_bullet_navigation(indicator, num_of_instructions, SCREEN_OBJ1) if indicator != 1: mouseClick(waitForObject(names.o_EndTreatmentRinsebackInit_leftImage_Image)) test.compare(str(waitForObjectExists(names.o_rinse_back_text).text), config.RINSE_BACK_SETUP_TEXT, "Rinseback Setup text must be {}".format(config.RINSE_BACK_SETUP_TEXT))