Index: shared/scripts/configuration/config.py =================================================================== diff -u -raf803314536a5a1468deb3e9cc4309e124dba421 -r76fdc8bb69841df3df89e211fabb333aa6d48dc0 --- shared/scripts/configuration/config.py (.../config.py) (revision af803314536a5a1468deb3e9cc4309e124dba421) +++ shared/scripts/configuration/config.py (.../config.py) (revision 76fdc8bb69841df3df89e211fabb333aa6d48dc0) @@ -34,7 +34,9 @@ EXPECTED_IMAGE_LOCATION = "/home/denali/Projects/application/resources/settings/Instructions/" SERVICE_CONF_LOCATION = os.environ['HOME']+"/Projects/application/resources/settings/Service.conf" TREATMENT_LOG_LOCATION = '/home/denali/Desktop/sd-card/treatment/*.log' +SERVICE_CONF_LOCATION = os.environ['HOME']+"/Projects/application/resources/settings/Service.conf" + BLOOD_PRIMING_TEXT = "Blood Priming" SALINE_UNIT = "mL" @@ -166,8 +168,11 @@ DIALYSATE_FLOW_BUFFER = 50 DIALYSATE_FLOW_SLIDER_WIDTH_BUFFER = 60 + #main treatment screen OUT_OF_RANGE_COLOR = "#c53b33" +RED_COLOR = "#ff0000" +GREEN_COLOR = "#008000" IN_RANGE_COLOR = "#fcfcfc" SYSTOLIC_LOWER_LIMIT = 60 SYSTOLIC_UPPER_LIMIT = 250 @@ -352,10 +357,6 @@ #pre-treatment_priming -NOT_VISIBLE = False -VISIBLE = True -FOCUS = True -NOT_IN_FOCUS = False ACCEPTED = True REJECTED = False @@ -425,3 +426,8 @@ GOODEVENING_START_TIME_SEC = 43200 NUM_OF_REQUEST_REJECT_REASONS = 46 #Number of settings change reject codes +VALID = True +INVALID = False + + + Index: shared/scripts/configuration/strings.py =================================================================== diff -u -r98dedc96e8192ecb00fc180475b455ec5cdf1665 -r76fdc8bb69841df3df89e211fabb333aa6d48dc0 --- shared/scripts/configuration/strings.py (.../strings.py) (revision 98dedc96e8192ecb00fc180475b455ec5cdf1665) +++ shared/scripts/configuration/strings.py (.../strings.py) (revision 76fdc8bb69841df3df89e211fabb333aa6d48dc0) @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- - ########################################################################### # # Copyright (c) 2019-2021 Diality Inc. - All Rights Reserved. @@ -13,6 +12,7 @@ # @author (last) LTTS # @date (last) 14-June-2022 ############################################################################ + BLOOD_PRIMING_TEXT = "Blood Priming" SALINE_UNIT = "mL" BLOOD_PRIMING_UNIT = "mL" @@ -184,12 +184,28 @@ 3 : 'ALARM_PRIORITY_HIGH', } + +BLOOD_PRIMING_UNIT = "mL" +BLOOD_PRIMING_VALUE_0 = "0" +BLOOD_PRIMING_DEFAULT_VALUE = BLOOD_PRIMING_VALUE_0 + " " + BLOOD_PRIMING_UNIT + #Setting DEVICE_SETTINGS_TEXT = "Device Settings" DEVICE_SETTINGS_SCREEN_PARAMETER = ["Information", "Volume And Brightness", "Wi-Fi", "Bluetooth Cuff", "DG Cleaning", "Service", "Export Logs"] +CLEAR_ALARM_CONDITION_TEXT = "Clear Alarm Condition" +EXPORT_LOGS ="Export Logs" +SHUTDOWN_BUTTON_TEXT = "SHUTDOWN" +BACK_BUTTON_TEXT = "BACK" +EXPORT_LOGS_OPTIONS = ["Application", "Treatment", "Service"] +SD_CARD_DETAILS =["SD-Card (MB)", "Free : 0.000","Total: 0.000"] +USB_DRIVE_DETAILS = ["USB Drive (MB)","Free : 0.000","Total: 0.000"] +EXPORT_BUTTON_TEXT = "Export" +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" +SERVICE_SCREEN_TITLE_TEXT = "Service" +SERVICE_SCREEN_PARAMETER = ["Information", "Volume And Brightness", "Wi-Fi", "Bluetooth Cuff", "Dialysate Generator Settings", "Services"] #create custom treatment TREATMENT_TITLE = "Create a Custom Treatment" @@ -351,12 +367,14 @@ "Heparin Concentration" : "IU/mL", } + #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 = "Service" 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" @@ -835,3 +853,10 @@ SYSTEM_SELF_TEST_TITLE = "System Self Test" FILTER_FLUSH_TITLE = "Filter Flush" +#service +BACK_TEXT = "BACK" +CONFIRM_TEXT = "CONFIRM" +SHUTDOWN_TEXT = "SHUTDOWN" + + + Index: shared/scripts/configuration/utility.py =================================================================== diff -u -r98dedc96e8192ecb00fc180475b455ec5cdf1665 -r76fdc8bb69841df3df89e211fabb333aa6d48dc0 --- shared/scripts/configuration/utility.py (.../utility.py) (revision 98dedc96e8192ecb00fc180475b455ec5cdf1665) +++ shared/scripts/configuration/utility.py (.../utility.py) (revision 76fdc8bb69841df3df89e211fabb333aa6d48dc0) @@ -126,6 +126,7 @@ squish.mouseWheel(ScreenObj, screenWidth//2, screenHeight//2, 0, -50, squish.Qt.NoModifier) raise LookupError("value object is not in view to the user after trying 100 times") + def pressure_pop_up_text_obj(text): names.o_pop_up_pressure_text_obj["text"] = text return names.o_pop_up_pressure_text_obj @@ -861,6 +862,7 @@ except: test.fail("Log file is not created or log file is not created based on standard log naming format.") + def get_current_log_details(message_ack = False, message_text = None): """ This function is capable to perform data analysis from application log folder. Index: shared/scripts/names.py =================================================================== diff -u -r01b99651cb78e316dc6dbd5164b9c420aaa419ad -r76fdc8bb69841df3df89e211fabb333aa6d48dc0 --- shared/scripts/names.py (.../names.py) (revision 01b99651cb78e316dc6dbd5164b9c420aaa419ad) +++ shared/scripts/names.py (.../names.py) (revision 76fdc8bb69841df3df89e211fabb333aa6d48dc0) @@ -214,10 +214,15 @@ o_blood_flow_slider = {"container": o_Overlay, "id": "_bloodFlowSlider", "type": "Slider", "unnamed": 1, "visible": True} o_treatmentHome_NotificationBar_NotificationBarSmall = {"container": o_treatmentStack_treatmentHome_TreatmentHome, "objectName": "NotificationBar", "type": "NotificationBarSmall", "visible": True} + #settings_Home -o_settings_Text = {"container": o_Gui_MainView, "text": "Settings", "type": "Text", "unnamed": 1, "visible": True} -o_SettingsHome_SettingsHome = {"container": o_Gui_MainView, "objectName": "_SettingsHome", "type": "SettingsHome", "visible": True} -o_settings_home_text_obj = {"container": o_SettingsHome_SettingsHome, "type": "Text", "unnamed": 1, "visible": True} +o_service_text = {"container": o_Gui_MainView, "text": "Service", "type": "Text", "unnamed": 1, "visible": True} +o_SettingsHome_SettingsHome_2 = {"container": o_Gui_MainView, "objectName": "_SettingsHome", "type": "SettingsHome", "visible": True} +o_service_home_text_obj = {"container": o_SettingsHome_SettingsHome_2, "type": "Text", "unnamed": 1, "visible": True} +o_set_date_and_time_text = {"container": o_Gui_MainView, "text": "Set Date And Time", "type": "Text", "unnamed": 1, "visible": True} +o_SettingsHome_SettingsHome = {"container": o_Gui_MainView, "objectName": "_SettingsBase", "type": "SettingsDateTime", "visible": True} +o_set_date_and_time_text_obj = {"container": o_SettingsHome_SettingsHome, "type": "Text", "unnamed": 1, "visible": True} +o_back_btn = {"container": o_SettingsHome_SettingsHome, "id": "_image", "source": "qrc:/images/iBack", "type": "Image", "unnamed": 1, "visible": True} o_eject_btn = {"container": o_SettingsHome_SettingsHome, "id": "_image", "source": "qrc:/images/iEject", "type": "Image", "unnamed": 1, "visible": True} o_arrow_btn = {"container": o_SettingsHome_SettingsHome, "id": "_image", "source": "qrc:/images/iArrowRight", "type": "Image", "unnamed": 1, "visible": True} o_SettingsBase_SettingsBase = {"container": o_Gui_MainView, "objectName": "_SettingsBase", "type": "SettingsBase", "visible": True} @@ -796,6 +801,7 @@ o_password_text_field = {"container": o_userConfirmation_UserConfirmation, "echoMode": 2, "id": "_input", "passwordCharacter": "•", "type": "TextInput", "unnamed": 1, "visible": True} o_show_password = {"container": o_userConfirmation_UserConfirmation, "id": "_showPassword", "source": "qrc:/images/iEye", "type": "Image", "unnamed": 1, "visible": True} #object on keyboard to switch to keypad + o_switch_keyboard_to_keypad = {"container": o_Gui_MainView, "text": "&123", "type": "Text", "unnamed": 1, "visible": True} o_keyboard_object = {"container": o_Gui_MainView, "type": "Text", "unnamed": 1, "visible": True} o_SettingsBase_SettingsDateTime = {"container": o_Gui_MainView, "objectName": "_SettingsBase", "type": "SettingsDateTime", "visible": True} @@ -912,4 +918,31 @@ o_recirculate_rejection_msg = {"container": o_EndTreatmentRecirculateStack_EndTreatmentRecirculateStack, "type": "Text", "unnamed": 1, "visible": True} o_postModeScreen_ScreenItem = {"container": o_Gui_MainView, "id": "_postModeScreen", "type": "ScreenItem", "unnamed": 1, "visible": True} +#alarm minimize button +o_minimize_button = {"container": o_Overlay, "id": "_image", "source": "qrc:/images/iChevronDown", "type": "Image", "unnamed": 1, "visible": True} +o_SettingsHome_SettingsHome = {"container": o_Gui_MainView, "objectName": "_SettingsHome", "type": "SettingsHome", "visible": True} +o_settings_home_text_obj = {"container": o_SettingsHome_SettingsHome, "type": "Text", "unnamed": 1, "visible": True} + + +# service screen +o_SettingsBase_SettingsBase = {"container": o_Gui_MainView, "objectName": "_SettingsBase", "type": "SettingsBase", "visible": True} +o_services_screen_text_obj = {"container": o_SettingsBase_SettingsBase, "type": "Text", "unnamed": 1, "visible": True} +o_export_logs_text = {"container": o_SettingsBase_SettingsBase, "text": "Export Logs", "type": "Text", "unnamed": 1, "visible": True} +o_combo_box= {"container": o_SettingsBase_SettingsBase, "id": "_logTypeCombo", "type": "ComboBox", "unnamed": 1, "visible": True} +o_option_combo_box={"container": o_Overlay, "type": "Text", "unnamed": 1, "visible": True} +# #Export button +o_export_btns = {"container": o_SettingsBase_SettingsBase,"id": "_logTypeExportButton", "type": "ExportButton", "unnamed": 1, "visible": True} +o_export_btn = {"container": o_export_btns, "text": "Export", "type": "Text", "unnamed": 1, "visible": True} +#USB drive Information +o_usb_folder_file = {"container": o_SettingsBase_SettingsBase, "type": "Text", "unnamed": 1, "visible": True} +o_usb_folder_id = {"container": o_SettingsBase_SettingsBase, "type": "Text", "unnamed": 1, "visible": True} +o_usb_folder_slider = {"container": o_SettingsBase_SettingsBase, "id": "_usbFolderView", "type": "ListView", "unnamed": 1, "visible": True} +#device log objects +o_SettingsBase_progressCircle_ProgressCircle = {"container": o_SettingsBase_SettingsBase, "id": "_progressCircle", "type": "ProgressCircle", "unnamed": 1, "visible": True} +o_SettingsBase_usbFolderRectangle_Rectangle = {"container": o_SettingsBase_SettingsBase, "gradient": 0, "id": "_usbFolderRectangle", "type": "Rectangle", "unnamed": 1, "visible": True} +o_SettingsBase_progressCircle_ProgressCircle_2 = {"container": o_SettingsBase_SettingsBase, "id": "_progressCircle", "occurrence": 2, "type": "ProgressCircle", "unnamed": 1, "visible": True} +o_SettingsBase_image_Image = {"container": o_SettingsBase_SettingsBase, "id": "_image", "source": "qrc:/images/iEject", "type": "Image", "unnamed": 1, "visible": True} + + + Index: tst_service_screen/test.py =================================================================== diff -u -r3840a7480f702f48ccfab1d624c3700527ec1ab2 -r76fdc8bb69841df3df89e211fabb333aa6d48dc0 --- tst_service_screen/test.py (.../test.py) (revision 3840a7480f702f48ccfab1d624c3700527ec1ab2) +++ tst_service_screen/test.py (.../test.py) (revision 76fdc8bb69841df3df89e211fabb333aa6d48dc0) @@ -11,114 +11,145 @@ # author Papiya Mandal # author Amrita Debnath -import builtins import names -from configuration import config, utility -from configuration.config import SERVICE_CONF_LOCATION +from configuration import config from dialin.ui.hd_simulator import HDSimulator -from dialin.common.hd_defs import HDOpModes +from dialin.common.hd_defs import HDOpModes, HDOpSubModes from dialin.ui import utils -SERVICES_TITLE_TEXT = "Please Enter The Service Password" -SET_DATE_AND_TIME_TEXT = "Set Date And Time" -INCORRECT_PASSWORD = "abcd" -INCORRECT_PASSWORD_MSG = "Incorrect service password" -SERVICE_SCREEN_OPTIONS = ["Information", "Volume And Brightness", "Wi-Fi", "Bluetooth Cuff", "Dialysate Generator Settings", "Set Date And Time", "Set Language", "Software Update", "Factory Reset", "Calibration ", ] + +EXPORT_LOGS = "Export Logs" + +SERVICE_SCREEN_OPTIONS = ["Information", "Volume And Brightness", "Wi-Fi", "Bluetooth Cuff", "DG Cleaning", "Service", "Export Logs"] + hd_simulator = HDSimulator() + +def custom_object_for_export_log(text): + """ + Method to set custom object property for export option + @param text : (string) parameter text + """ + names.o_option_combo_box["text"] = text + return names.o_option_combo_box + def settings_text_obj(text): + """ + Method to set custom object property for settings screen. + @param text : (string) parameter text + """ names.o_settings_home_text_obj["text"] = text return names.o_settings_home_text_obj -def services_screen_text_obj(text): - names.o_services_screen_text_obj["text"] = text - return names.o_services_screen_text_obj def navigate_to_settings_screen(): """ Method to navigate to "Settings" screen """ - test.startSection("Navigating to 'Device Settings' screen") - hd_simulator.cmd_send_hd_operation_mode(op_mode=HDOpModes.MODE_STAN.value, sub_mode=HDOpModes.MODE_FAUL.value) + test.startSection("Navigating to 'Service' screen") + hd_simulator.cmd_send_hd_operation_mode(op_mode=HDOpModes.MODE_SERV.value, sub_mode=HDOpSubModes.STANDBY_START_STATE.value) + utils.waitForGUI(1) + device_settings_text = waitForObjectExists(settings_text_obj(config.SERIVCES_TITLE)) + test.compare(device_settings_text.text, config.SERIVCES_TITLE, "{} screen is displayed".format(config.SERIVCES_TITLE)) + test.endSection() + + +def verify_export_logs_screen(): + """ + Method to verify the export logs screen + """ + test.startSection("Verifying the the export logs screen") + test.log("Navigating to service screen to export log screen") + mouseClick(waitForObjectExists(settings_text_obj(EXPORT_LOGS))) + test.compare(waitForObjectExists(names.o_export_logs_text).text,config.EXPORT_LOGS,"{} should be under export logs screen ".format(config.EXPORT_LOGS)) + + for option in range(len(config.EXPORT_LOGS_OPTIONS)): + + utils.waitForGUI(1) + mouseClick(waitForObjectExists(names.o_combo_box )) + export_option = waitForObjectExists(custom_object_for_export_log(config.EXPORT_LOGS_OPTIONS[option])) + + utils.waitForGUI(1) + mouseClick(export_option) + test.compare(config.EXPORT_LOGS_OPTIONS[option], waitForObjectExists(names.o_combo_box ).displayText, "User should able to select {}".format(config.EXPORT_LOGS_OPTIONS[option])) utils.waitForGUI(1) - mouseClick(waitForObjectExists(names.o_settings_Text)) - device_settings_text = waitForObjectExists(settings_text_obj(config.DEVICE_SETTINGS_TEXT)) - test.compare(device_settings_text.text, config.DEVICE_SETTINGS_TEXT, "{} screen is displayed".format(config.DEVICE_SETTINGS_TEXT)) + test.endSection() -def verify_incorrect_password_msg(): + +def get_storage_data_status(): """ - Method to verify the message displayed - upon entering wrong password + Method to verify the storage data exported or not exported. + @return: (bool) - True - if export data list is present in dash board, else return False """ - test.startSection("Verifying the functionalities with Incorrect password") - test.log("Clicking on password entry field") - utils.waitForGUI(0.3) - mouseClick(waitForObjectExists(names.o_password_text_field)) - utility.enter_keyboard_numeric_value(entry=str(INCORRECT_PASSWORD)) - mouseClick(waitForObjectExists(names.o_show_password)) - test.log("Verifying the entered password") - password = str((waitForObjectExists(names.o_password_text_field)).text) - test.compare(password, INCORRECT_PASSWORD, "Entered password should be {}".format(str(INCORRECT_PASSWORD))) - mouseClick(waitForObjectExists(services_screen_text_obj(config.CONFIRM_TEXT))) - incorrect_password_text = waitForObjectExists(settings_text_obj(INCORRECT_PASSWORD_MSG)) - test.compare(incorrect_password_text.text, INCORRECT_PASSWORD_MSG, "{} message should display upon entering wrong password".format(INCORRECT_PASSWORD_MSG)) - test.endSection() + test.log("verification of storage data before exporting the data") + export_list_count = 0 + export_list = object.children(waitForObjectExists(names.o_usb_folder_slider))[0] + for child in object.children(export_list): + export_list_count += 1 + if export_list_count >= 1: + return True + else: + return False -def navigate_to_services_password_screen_and_enter_password(): + +def verify_export_functionality(): """ - Method to navigate to services screen - and verify the "Please Enter The Service Password" - title is displayed and enter password, verify the - password and click on confirm button + verify export log section before and after export button click. """ - test.startSection("Navigating to 'services password' screen and enter password") - mouseClick(waitForObjectExists(settings_text_obj(config.SERIVCES_TITLE))) - services_password_title = waitForObjectExists(services_screen_text_obj(SERVICES_TITLE_TEXT)) - test.compare(services_password_title.text, SERVICES_TITLE_TEXT, "{} should display once user is navigated to services password screen".format(SERVICES_TITLE_TEXT)) - utils.waitForGUI(0.5) - verify_incorrect_password_msg() - utils.waitForGUI(0.5) - mouseClick(waitForObjectExists(settings_text_obj(config.SERIVCES_TITLE))) - utils.waitForGUI(0.5) - test.log("Clicking on password entry field") - utils.waitForGUI(0.5) - mouseClick(waitForObjectExists(names.o_switch_keyboard_to_keypad)) - mouseClick(waitForObjectExists(names.o_password_text_field)) - with open(SERVICE_CONF_LOCATION, "r") as file: - lines = file.readlines() - for index, line in enumerate(lines): - if "Service Password" in line: - services_password = lines[index+1][:-1] - break - else: - continue - utility.enter_keyboard_numeric_value(entry=str(services_password)) - mouseClick(waitForObjectExists(names.o_show_password)) - test.log("Verifying the entered password") - password = str((waitForObjectExists(names.o_password_text_field)).text) - test.compare(password, str(services_password), "Entered password should be {}".format(str(services_password))) - mouseClick(waitForObjectExists(services_screen_text_obj(config.CONFIRM_TEXT))) - utils.waitForGUI(0.5) - test.log("Verifying the 'Export' button") - test.compare(str(waitForObjectExists(settings_text_obj(config.EXPORT_TEXT)).text), config.EXPORT_TEXT,"'Export' button text should be {}".format(config.EXPORT_TEXT)) - utils.waitForGUI(0.1) - test.compare(waitForObjectExists(settings_text_obj(config.EXPORT_TEXT)).enabled , True, "'Export' button should be enabled") - test.log("Verifying the 'Shutdown' button enabled") - test.compare(str(waitForObjectExists(names.o_shutdown_text).text), config.SHUTDOWN_TEXT,"'SHUTDOWN' button text should be {}".format(config.SHUTDOWN_TEXT)) - test.compare(waitForObjectExists(names.o_shutdown_text).enabled , True, "'SHUTDOWN' button should be enabled") - for option in SERVICE_SCREEN_OPTIONS: - option_text = waitForObjectExists(settings_text_obj(option)) - test.compare(option_text.text, option, "{} should be available under services screen".format(option)) - test.endSection() + test.startSection("Verifying the the export button functionality") + test.log("verification of progress bar color before exporting data") + test.compare(waitForObjectExists(names.o_SettingsBase_progressCircle_ProgressCircle).color.name, config.RED_COLOR,"{} color progress bar is displayed for sd-card".format(config.RED_COLOR)) + test.compare(waitForObjectExists(names.o_SettingsBase_progressCircle_ProgressCircle_2).color.name, config.GREEN_COLOR,"{} color progress bar is displayed for usb-drive".format(config.GREEN_COLOR)) + log_status = get_storage_data_status() + test.verify(log_status == True, "export data rectangles should be filled with contents.") + + mouseClick(waitForObjectExists(names.o_export_btn )) + utils.waitForGUI(2) + + log_status = get_storage_data_status() + test.verify(log_status == False, "export data rectangles should be empty after export button click.") + + test.compare(waitForObjectExists(names.o_SettingsBase_progressCircle_ProgressCircle).color.name, config.RED_COLOR,"{} color progress bar is displayed for sd-card".format(config.RED_COLOR)) + test.compare(waitForObjectExists(names.o_SettingsBase_progressCircle_ProgressCircle_2).color.name, config.GREEN_COLOR,"{} color progress bar is displayed for usb-drive".format(config.GREEN_COLOR)) + mouseClick(waitForObjectExists(names.o_SettingsBase_image_Image )) + test.compare(waitForObjectExists(names.o_export_btn).text, config.EXPORT_BUTTON_TEXT,"{} screen is displayed".format(config.EXPORT_BUTTON_TEXT)) + + test.log("verification of progress bar color after exporting data") + test.compare(waitForObjectExists(names.o_SettingsBase_progressCircle_ProgressCircle).color.name, config.RED_COLOR,"{} color progress bar is displayed for sd-card".format(config.RED_COLOR)) + test.compare(waitForObjectExists(names.o_SettingsBase_progressCircle_ProgressCircle_2).color.name, config.RED_COLOR,"{} color progress bar is displayed for usb-drive".format(config.RED_COLOR)) + + test.endSection() + + +def verify_device_shutdown(): + """ + verify shutdown button after clicking export button + """ + test.startSection("verification of system shutdown option") + mouseClick(waitForObjectExists(names.o_keyboard_object)) + test.compare(waitForObjectExists(names.o_keyboard_object).text, config.SHUTDOWN_BUTTON_TEXT, "User should able to click {}".format(config.SHUTDOWN_BUTTON_TEXT)) + + utils.waitForGUI(1.5) + mouseClick(waitForObjectExists(names.o_keyboard_object)) + + test.endSection() + + + def main(): utils.tstStart(__file__) startApplication(config.AUT_NAME) - navigate_to_settings_screen() - navigate_to_services_password_screen_and_enter_password() + + verify_export_logs_screen() + verify_export_functionality() + verify_device_shutdown() + utils.tstDone() + +