# -*- coding: utf-8 -*-" ## # Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. # copyright # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, # IN PART OR IN WHOLE, # WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. # # file tst_settings_information # date 04/29/2022 # author Papiya Mandal # author Akshay Dhawan import builtins import datetime import names import squish from configuration import config, utility from builtins import int as pyInt from dialin.utils.conversions import unsigned_integer_to_bytearray from dialin.ui.hd_simulator import HDSimulator from dialin.ui.dg_simulator import DGSimulator from configuration.config import SERVICE_CONF_LOCATION from dialin.common.hd_defs import HDOpModes,HDStandbyStates from dialin.ui import utils from builtins import float as pyfloat hd_simulator = HDSimulator() dg_simulator = DGSimulator() DAY_3 = 3 DAY_25 = 25 DAY_12 = 12 DAY_30 = 30 MONTH_JAN = 1 MONTH_NOVEMBER = 11 MONTH_APRIL = 4 MONTH_AUGUST = 7 YEAR_2022 = 2022 YEAR_1977 = 1977 YEAR_2001 = 2001 YEAR_2045 = 2045 INTERVAL_DAYS_2_YEARS = 730 INTERVAL_DAYS_1_YEARS = 365 INTERVAL_DAYS_6_MONTHS = 180 INTERVAL_DAYS_10_MONTHS = 304 TOUCH_GRID_ITEM_NUMBER_5 = 5 GRID_ITEM_0 = 0 FIRST_PARAMETER_OBJECT_ITEM_POSITION_2 = 2 TITLE_ITEM_OBJECT_POSIITON_1 = 1 VERSION_ITEM_OBJECT_POSTION_3 = 3 BRIGHTNESS_BUFFER = 20 VOLUME_BUFFER = 20 VOLUME_RANGE = [80, 40, 20, 100, 60] SERVICES_TITLE_TEXT = "Service Password" INCORRECT_PASSWORD = "abcd" INCORRECT_PASSWORD_MSG = "Incorrect service password" IP_ADRESS_TEXT_INDEX = 1 GATEWAY_TEXT_INDEX = 1 SUBNET_MASK_TEXT_INDEX = 1 DNS_TEXT_INDEX = 1 def services_screen_text_obj(text): names.o_services_screen_text_obj["text"] = text return names.o_services_screen_text_obj def settings_text_obj(text): names.o_settings_home_text_obj["text"] = text return names.o_settings_home_text_obj def settings_base_text_obj(text): names.o_settings_base_text_obj["text"] = text return names.o_settings_base_text_obj def service_date_obj(text): names.o_service_date_obj["text"] = text return names.o_service_date_obj def volume_and_brightness_text_obj(text): names.o_SettingsBase_Volume_And_Brightness_Text["text"] = text return names.o_SettingsBase_Volume_And_Brightness_Text def verify_settings_parameters(): """ Method to verify the buttons and parameters of 'Device Settings screen """ test.startSection("Verify the buttons and parameters of 'Device Settings' screen") for parameter in config.DEVICE_SETTINGS_SCREEN_PARAMETER: parameter_text = waitForObjectExists(settings_text_obj(parameter)) test.compare(parameter_text.text, parameter, "{} should be available under 'Device Settings' screen".format(parameter)) test.endSection() def verify_parameters_under_information(): """ Method to verify the parameter under 'Information'\ and 'Services' """ test.startSection("Verify the parameter under 'Information' and 'Services'") test.log("Navigating to 'Information' screen") mouseClick(waitForObjectExists(names.o_arrow_btn)) for title in config.INFORMATION_TITLES: title_text = waitForObjectExists(settings_base_text_obj(title)) test.compare(title_text.text, title, "{} should be available".format(title)) for info_parameter in config.INFORMATION_PARAMETERS: info_parameter_text = waitForObjectExists(settings_base_text_obj(info_parameter)) test.compare(info_parameter_text.text, info_parameter, "{} should be available under 'Information'".format(info_parameter)) test.log("Verifying services title and parameters") services_text = waitForObjectExists(settings_base_text_obj(config.SERVICE_TEXT)) test.compare(services_text.text, config.SERVICE_TEXT, "Services title should be {}".format(config.SERVICE_TEXT)) for services_parameter in config.SERVICES_PARAMETERS: services_par_text = waitForObjectExists(settings_base_text_obj(services_parameter)) test.compare(services_par_text.text, services_parameter, "{} should be available under services".format(services_parameter)) test.endSection() 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) utils.waitForGUI(1) test.compare(str(waitForObjectExists(names.o_manager_Text).text), config.MANAGER_TEXT, "Manager text should be {}".format(config.MANAGER_TEXT)) mouseClick(waitForObjectExists(names.o_manager_Text)) test.compare(str(waitForObjectExists(names.o_treatment_management).text), config.TREATMENT_MANAGEMENT_TEXT, "Treatment Management text should be {}".format(config.TREATMENT_MANAGEMENT_TEXT)) 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_hd_and_dg_versions(hd_major, hd_minor, hd_micro, hd_build, hd_fpga_id, hd_fpga_major, hd_fpga_minor, hd_fpga_lab, hd_compatibility_rev, hd_serial, dg_major, dg_minor, dg_micro, dg_build, dg_fpga_id, dg_fpga_major, dg_fpga_minor, dg_fpga_lab, dg_compatibility_rev, dg_serial): """ Method to verify the 'hd' and 'dg' version @param hd_major: (uint) - HD Major version number @param hd_minor: (uint) - HD Minor version number @param hd_micro: (uint) - HD Micro version number @param hd_build: (uint) - HD Build version number @param hd_fpga_id: (int) - HD FPGA id version number @param hd_fpga_major: (int) - HD FPGA Major version number @param hd_fpga_minor: (int) - HD FPGA Minor version number @param hd_fpga_lab: (int) - HD FPGA Lab version number @param dg_major: (uint) - DG Major version number @param dg_minor: (uint) - DG Minor version number @param dg_micro: (uint) - DG Micro version number @param dg_build: (uint) - DG Build version number @param dg_fpga_id: (int) - DG FPGA id version number @param dg_pga_major: (int) - DG FPGA Major version number @param dg__fpga_minor: (int) - DG FPGA Minor version number @param dg_fpga_lab: (int) - DG FPGA Lab version number @param compatibility_rev: (uint) - The FWs/UI compatibility revision """ test.startSection("Set 'HD' and 'DG' version and verify") hd_simulator.cmd_send_version_hd_data(major=hd_major, minor=hd_minor, micro=hd_micro, build=hd_build, fpga_id=hd_fpga_id, fpga_major=hd_fpga_major, fpga_minor=hd_fpga_minor, fpga_lab=hd_fpga_lab, compatibility_rev=hd_compatibility_rev) hd_simulator.cmd_send_serial_hd_data(hd_serial) dg_simulator.cmd_send_version_dg_data(major=dg_major, minor=dg_minor, micro=dg_micro, build=dg_build, fpga_id=dg_fpga_id, fpga_major=dg_fpga_major, fpga_minor=dg_fpga_minor, fpga_lab=dg_fpga_lab, compatibility_rev=dg_compatibility_rev) dg_simulator.cmd_send_serial_dg_data(dg_serial) version_details = {"HD Version": None, "HD FPGA Version": None, "HD Serial Number": None, "DG Version": None, "DG FPGA Version": None, "DG Serial Number": None} version_details["HD Serial Number"] = hd_serial version_details["DG Serial Number"] = dg_serial hd_version = "{hd_major}.{hd_minor}.{hd_micro}.{hd_build}.{hd_compatibility_rev}".format(hd_major=hd_major, hd_minor=hd_minor, hd_micro=hd_micro, hd_build=hd_build, hd_compatibility_rev=hd_compatibility_rev) version_details["HD Version"] = hd_version hd_fpga_version = "{hd_fpga_id}.{hd_fpga_major}.{hd_fpga_minor}.{hd_fpga_lab}".format(hd_fpga_id=hd_fpga_id, hd_fpga_major=hd_fpga_major, hd_fpga_minor=hd_fpga_minor, hd_fpga_lab=hd_fpga_lab) version_details["HD FPGA Version"] = hd_fpga_version dg_version = "{dg_major}.{dg_minor}.{dg_micro}.{dg_build}.{dg_compatibility_rev}".format(dg_major=dg_major, dg_minor=dg_minor, dg_micro=dg_micro, dg_build=dg_build, dg_compatibility_rev=dg_compatibility_rev) version_details["DG Version"] = dg_version dg_fpga_version = "{dg_fpga_id}.{dg_fpga_major}.{dg_fpga_minor}.{dg_fpga_lab}".format(dg_fpga_id=dg_fpga_id, dg_fpga_major=dg_fpga_major, dg_fpga_minor=dg_fpga_minor, dg_fpga_lab=dg_fpga_lab) version_details["DG FPGA Version"] = dg_fpga_version screen_parent_obj = object.parent(waitForObjectExists(settings_base_text_obj(("Information")))) screen_children_objs = object.children(screen_parent_obj) touch_grid = screen_children_objs[TOUCH_GRID_ITEM_NUMBER_5] touch_grid_child_obj = object.children(touch_grid) touch_grid_children_obj = object.children(touch_grid_child_obj[GRID_ITEM_0]) touch_grid_children_obj = touch_grid_children_obj[FIRST_PARAMETER_OBJECT_ITEM_POSITION_2:] count = 0 for title, version in version_details.items(): item_childrens = object.children(touch_grid_children_obj[count]) title_obj = item_childrens[TITLE_ITEM_OBJECT_POSIITON_1] count +=1 version_detail = item_childrens[VERSION_ITEM_OBJECT_POSTION_3] if (title_obj.text) == title: test.compare(title_obj.text, title, "{} title should be {}".format(title, title)) test.compare(version_detail.text, version, "{}'s version detail should be {}".format(title, version)) else: continue test.endSection() def verify_service_date(hd_day, hd_month, hd_year, hd_interval_days, dg_day, dg_month, dg_year, dg_interval_days): """ Method to simulate the 'HD last service date', 'HD next service date', 'DG next service date' and 'DG next service date' and verify the same is displayed on UI screen """ test.startSection("Verify 'HD last service date', 'HD next service date', 'DG next service date' and 'DG next service date' is displayed on UI screen") hd_epoch = builtins.int(datetime.datetime(hd_year, hd_month, hd_day).timestamp()) hd_interval = hd_interval_days * 86400 payload = unsigned_integer_to_bytearray(hd_epoch) payload += unsigned_integer_to_bytearray(hd_interval) hd_simulator.cmd_send_hd_general_response(message_id=138, accepted=0, reason=1, is_pure_data=False, has_parameters=True, parameters_payload=payload) utils.waitForGUI(1) hd_last_service_date = datetime.datetime(hd_year, hd_month, hd_day) hd_last_service_date = str(hd_last_service_date.strftime("%Y/%m/%02d")) hd_last_service_date_text = waitForObjectExists(service_date_obj(hd_last_service_date)) test.compare(hd_last_service_date_text.text, hd_last_service_date, "'HD last service date' should be {}".format(hd_last_service_date)) hd_next_service_date = datetime.datetime(hd_year, hd_month, hd_day) + datetime.timedelta(days=hd_interval_days) hd_next_service_date = str(hd_next_service_date.strftime("%Y/%m/%02d")) hd_next_service_date_text = waitForObjectExists(service_date_obj(hd_next_service_date)) test.compare(hd_next_service_date_text.text, hd_next_service_date, "'HD next service date' should be {}".format(hd_next_service_date)) dg_epoch = builtins.int(datetime.datetime(dg_year, dg_month, dg_day).timestamp()) dg_interval = dg_interval_days * 86400 payload = unsigned_integer_to_bytearray(dg_epoch) payload += unsigned_integer_to_bytearray(dg_interval) dg_simulator.cmd_send_dg_general_response(message_id=140, accepted=0, reason=1, is_pure_data=False, has_parameters=True, parameters_payload=payload) utils.waitForGUI(1) dg_last_service_date = datetime.datetime(dg_year, dg_month, dg_day) dg_last_service_date = str(dg_last_service_date.strftime("%Y/%m/%02d")) dg_last_service_date_text = waitForObjectExists(service_date_obj(dg_last_service_date)) test.compare(dg_last_service_date_text.text, dg_last_service_date, "'DG last service date' should be {}".format(dg_last_service_date)) dg_next_service_date = datetime.datetime(dg_year, dg_month, dg_day) + datetime.timedelta(days=dg_interval_days) dg_next_service_date = str(dg_next_service_date.strftime("%Y/%m/%02d")) dg_next_service_date_text = waitForObjectExists(service_date_obj(dg_next_service_date)) test.compare(dg_next_service_date_text.text, dg_next_service_date, "'DG last service date' should be {}".format(dg_next_service_date)) test.endSection() def verify_volume_and_brightness_section(): """ Method to verify "Volume and Brightness" screen """ test.startSection("Verifying volume and brightness screen") test.log("Verifying the title text of 'Volume And Brightness' screen") volume_and_brightness_text = waitForObjectExists(volume_and_brightness_text_obj(config.VOLUME_AND_BRIGHTNESS_TEXT)) test.compare(volume_and_brightness_text.text, config.VOLUME_AND_BRIGHTNESS_TEXT, "Volume and Brightness text should be {}".format(config.VOLUME_AND_BRIGHTNESS_TEXT)) brightness_text = waitForObjectExists(volume_and_brightness_text_obj(config.BRIGHTNESS_TEXT)) test.compare(brightness_text.text, config.BRIGHTNESS_TEXT,"Brightness title text should be {}".format(config.BRIGHTNESS_TEXT)) notification_text = waitForObjectExists(volume_and_brightness_text_obj(config.NOTIFICATION_MESSAGE_TEXT)) test.compare(notification_text.text, config.NOTIFICATION_MESSAGE_TEXT, "{} notification message is displayed and should be The response value is incorrect. [1007]".format(config.NOTIFICATION_MESSAGE_TEXT)) #TODO: Brightness slider adjustment is not in proper mouseDrag(waitForObject(names.o_brightness_parent_obj), 325, 14, 415, 14, Qt.NoModifier, Qt.LeftButton) alarm_volume_text = waitForObjectExists(volume_and_brightness_text_obj(config.ALARM_VOLUME_TEXT)) test.compare(alarm_volume_text.text, config.ALARM_VOLUME_TEXT,"Alarm Volume text should be {}".format(config.ALARM_VOLUME_TEXT)) back_btn = waitForObjectExists(volume_and_brightness_text_obj(config.BACK_TEXT)) test.compare(back_btn.enabled , True, "Back button should be enabled") utils.waitForGUI(0.5) mouseClick(back_btn) utils.waitForGUI(0.5) mouseClick(waitForObjectExists(settings_text_obj(config.VOLUME_AND_BRIGHTNESS_TEXT))) utils.waitForGUI(1) test.endSection() def adjust_and_verify_alarm_volume(volume): """ Method to set the Alarm volume and verify the same @param volume - (int) User expected Alarm volume """ test.startSection("Set the Alarm Volume to {} and verify the current volume is {}".format(volume, volume)) alarm_volume_text = waitForObjectExists(volume_and_brightness_text_obj(config.ALARM_VOLUME_TEXT)) row_obj = object.parent(alarm_volume_text) alarm_volume_parent_object_index = 1 alarm_volume_parent_obj = object.children(row_obj) alarm_volume_parent_obj = alarm_volume_parent_obj[alarm_volume_parent_object_index] alarm_volume_parent_object = object.children(alarm_volume_parent_obj) MINIMUM_TEXT_INDEX = 0 MAXIMUM_TEXT_INDEX = 1 SLIDER_INDEX = -1 PROGRESS_OBJ_INDEX = 3 minimum_alarm_volume_value = alarm_volume_parent_object[MINIMUM_TEXT_INDEX] minimum_alarm_volume_value = minimum_alarm_volume_value.text maximum_alarm_volume_value = alarm_volume_parent_object[MAXIMUM_TEXT_INDEX] maximum_alarm_volume_value = maximum_alarm_volume_value.text slider_obj = alarm_volume_parent_object[SLIDER_INDEX] progress_parent = alarm_volume_parent_object[PROGRESS_OBJ_INDEX] progress_children = object.children(progress_parent) current_alarm_volume = progress_children[1] current_alarm_volume_val = builtins.int(str(current_alarm_volume.text)) width = pyInt(slider_obj.width) - 10 height = pyInt(slider_obj.height) - 20 if volume == current_alarm_volume_val: test.passes("Alarm volume value is already set to {}".format(volume)) elif volume < current_alarm_volume_val: while current_alarm_volume_val != volume: mouseDrag(slider_obj, -100, height, width, 0, Qt.NoModifier, Qt.LeftButton) current_alarm_volume_val -= VOLUME_BUFFER elif volume > current_alarm_volume_val: while current_alarm_volume_val != volume: mouseDrag(slider_obj, 50, height, width, 0, Qt.NoModifier, Qt.LeftButton) current_alarm_volume_val += VOLUME_BUFFER expected_alarm_volume = "{}{}".format(volume, config.UNIT_OF_VOLUME_AND_BRIGHTNESS) current_alarm_volume = progress_children[1] current_alarm_volume_val = "{}{}".format(current_alarm_volume.text, config.UNIT_OF_VOLUME_AND_BRIGHTNESS) test.compare(current_alarm_volume_val, expected_alarm_volume, "Current Alarm volume should be {}".format(expected_alarm_volume)) test.endSection() def verify_alarm_volume(): """ Method to loop through different alarm volume values and set the alarm volume in UI """ for volume in VOLUME_RANGE: adjust_and_verify_alarm_volume(volume) back_btn = waitForObjectExists(volume_and_brightness_text_obj(config.BACK_TEXT)) mouseClick(back_btn) def verify_wifi_setting(): """ Method to verify "Wi-Fi" screen """ test.startSection("Verifying Wi-Fi setting") utils.waitForGUI(0.5) mouseClick(waitForObjectExists(names.o_SettingsHome_wifi_Text)) test.compare(waitForObjectExists(names.o_SettingsBase_Wi_Fi_Text).text, config.WIFI_TITLE_TEXT,"Wi-Fi Title must be {}".format(config.WIFI_TITLE_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_IP_Address_Text).text, config.IP_ADDRESS_TEXT,"IP Address Text must be {}".format(config.IP_ADDRESS_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_Gateway_Text).text, config.GATEWAY_TEXT,"Gateway Text must be {}".format(config.GATEWAY_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_Subnet_Mask_Text).text, config.SUBNET_MASK_TEXT,"Subnet Mask Text must be {}".format(config.SUBNET_MASK_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_DNS_Text).text, config.DNS_TEXT,"DNS Text must be {}".format(config.DNS_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_SSID_Text).text, config.SSID_TEXT,"SSID Text must be {}".format(config.SSID_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_SCAN_Text).text, config.SCAN_TEXT,"SCAN Text must be {}".format(config.SCAN_TEXT)) test.compare(waitForObjectExists(names.o_back_button).text, config.BACK_BUTTON_TEXT,"BACK Button Text must be {}".format(config.BACK_BUTTON_TEXT)) test.verify(waitForObjectExists(names.o_SettingsBase_input_TextInput).enabled, "IP Address TEXT box must be enabled") test.verify(waitForObjectExists(names.o_SettingsBase_input_TextInput_2).enabled, "Gateway TEXT box must be enabled") test.verify(waitForObjectExists(names.o_SettingsBase_input_TextInput_3).enabled, "Subnet Mask TEXT box must be enabled") test.verify(waitForObjectExists(names.o_SettingsBase_input_TextInput_4).enabled, "DNS TEXT box must be enabled") test.verify(waitForObjectExists(names.o_SettingsBase_ssidText_Text).enabled, "SSID TEXT box must be enabled") test.log("Passing incorrect values to validate wifi parameters") verify_wifi_parameters("invalid") test.log("Passing correct values to validate wifi parameters") utils.waitForGUI(0.5) verify_wifi_parameters("valid") mouseClick(waitForObjectExists(names.o_SettingsBase_mouseArea_MouseArea_3)) test.compare(waitForObjectExists(names.o_SettingsBase_Scan_Finished_Text ).text, config.SCAN_FINISHED_TEXT,"Scan Finished Text must be {}".format(config.SCAN_FINISHED_TEXT)) mouseClick(waitForObjectExists(names.o_SettingsBase_mouseArea_MouseArea)) test.endSection() def enter_address_value(param,entry): """ Method to enter user desired value using keypad @param entry: (str) User expected value """ test.startSection("Entering {}".format(entry)) user_input_clear_option(param) for value in entry: utils.waitForGUI(0.2) if value.isalpha(): value = pyfloat(value) elif value == ("."): value = (value) else: value = pyInt(value) key_val = squish.waitForObject(utility.keyboard_input(value)) squish.mouseClick(key_val) utils.waitForGUI(0.1) type(waitForObject(param), "") utils.waitForGUI(0.1) test.endSection() def user_input_clear_option(param): """ Tests to clear retained inserted values @return: N/A """ utils.waitForGUI(0.2) parameter_input = waitForObjectExists(param) utils.waitForGUI(0.2) while (parameter_input.text != ""): #Loop for deleting the present values on ui type(waitForObject(param), "") utils.waitForGUI(0.1) type(waitForObject(param), "") utils.waitForGUI(0.1) def verify_wifi_parameters(parameter): """ Method to enter and verify "Wi-Fi" screen parameters such as ip address, gateway, subnet mask and dns """ test.startSection("Entering and Verifying Wi-Fi parameters") utils.waitForGUI(0.2) mouseClick(waitForObjectExists(names.o_ip_address_text_inut)) ip_adress = object.children(waitForObjectExists(names.o_ip_address_object)) enter_address_value(names.o_ip_address_text_inut,entry=str(config.IP_ADDRESS[parameter])) test.compare(ip_adress[IP_ADRESS_TEXT_INDEX].text, config.IP_ADDRESS[parameter], "IP address should be {}".format(config.IP_ADDRESS[parameter])) test.compare(waitForObject(names.o_SettingsBase_Failed_to_set_static_IP_Address_Text).text,config.IP_FAILED_MSG, "IP address error is verified") utils.waitForGUI(0.1) mouseClick(waitForObjectExists(names.o_gateway_text_inut)) gateway = object.children(waitForObjectExists(names.o_gateway_object)) enter_address_value(names.o_gateway_text_inut,entry=str(config.GATEWAY[parameter])) test.compare(gateway[GATEWAY_TEXT_INDEX].text, config.GATEWAY[parameter], "Gateway should be {}".format(config.GATEWAY[parameter])) test.compare(waitForObject(names.o_SettingsBase_Failed_to_set_gateway_Text).text,config.GATEWAY_FAILED_MSG, "IP address error is verified") utils.waitForGUI(0.1) mouseClick(waitForObjectExists(names.o_subnet_mask_text_input)) subnet_mask = object.children(waitForObjectExists(names.o_subnet_mask_object)) enter_address_value(names.o_subnet_mask_text_input,entry=str(config.SUBNET_MASK[parameter])) test.compare(subnet_mask[SUBNET_MASK_TEXT_INDEX].text, config.SUBNET_MASK[parameter], "Subnet mask should be {}".format(config.SUBNET_MASK[parameter])) test.compare(waitForObject(names.o_SettingsBase_Failed_to_set_subnet_mask_Text).text,config.SUBNET_FAILED_MSG, "IP address error is verified") utils.waitForGUI(0.1) mouseClick(waitForObjectExists(names.o_dns_text_input)) dns = object.children(waitForObjectExists(names.o_dns_object)) enter_address_value(names.o_dns_text_input,entry=str(config.DNS[parameter])) test.compare(dns[DNS_TEXT_INDEX].text, config.DNS[parameter], "DNS should be {}".format(config.DNS[parameter])) test.compare(waitForObject(names.o_SettingsBase_Failed_to_set_DNS_Text).text,config.DNS_FAILED_MSG, "IP address error is verified") mouseClick(waitForObjectExists(names.o_SettingsBase_mouseArea_MouseArea_3)) test.endSection() def verify_bluetooth_cuff_setting(): """ Method to verify "Bluetooth Cuff" screen """ test.startSection("Verifying Bluetooth Cuff Setting") utils.waitForGUI(0.5) mouseClick(waitForObjectExists(names.o_SettingsHome_mouseArea_MouseArea)) test.compare(waitForObjectExists(names.o_SettingsBase_Bluetooth_Cuff_Text).text, config.BLUETOOTH_CUFF_TITLE_TEXT,"Bluetooth Cuff Title must be {}".format(config.BLUETOOTH_CUFF_TITLE_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_Devices_Label).text, config.DEVICES_TEXT,"Devices must be {}".format(config.DEVICES_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_SCAN_Text_2).text, config.SCAN_TEXT,"SCAN Text must be {}".format(config.SCAN_TEXT)) test.compare(waitForObjectExists(names.o_back_button).text, config.BACK_BUTTON_TEXT,"BACK Button Text must be {}".format(config.BACK_BUTTON_TEXT)) utility.scroll_to_zone(zone=names.o_SettingsBase_ScrollBar, screen_object=names.o_SettingsBase_ScrollBar, direction = None) utils.waitForGUI(1) utility.scroll_to_zone(zone=names.o_SettingsBase_ScrollBar, screen_object=names.o_SettingsBase_ScrollBar, direction = "Top") utils.waitForGUI(1) mouseClick(waitForObjectExists(names.o_SettingsBase_mouseArea_MouseArea_4)) utils.waitForGUI(1) test.compare(waitForObjectExists(names.o_SettingsBase_bluetooth_cuff_notification_text_one).text, config.BLUETOOTH_CUFF_NOTIFICATION_MESSAGE_TEXT,"Notification Message Text must be {}".format(config.BLUETOOTH_CUFF_NOTIFICATION_MESSAGE_TEXT)) doubleClick(waitForObjectExists(names.o_SettingsBase_mouseArea_MouseArea_4)) utils.waitForGUI(1) mouseClick(waitForObjectExists(names.o_SettingsBase_mouseArea_MouseArea_2)) utils.waitForGUI(1) test.endSection() def verify_water_flush_heat_disinfection_dg_cleaning_setting(parameter): """ Method to enter and verify time and cycle (days) of water flush in DG cleaning """ test.startSection("Entering and Verifying time and cycle for water flush and heat disinfection") enter_address_value(names.o_SettingsBase_input_TextInput_5,entry=str(config.WATER_FLUSH_TIME_HOUR[parameter])) test.compare(waitForObjectExists(names.o_SettingsBase_input_TextInput_5).text, config.WATER_FLUSH_TIME_HOUR[parameter], "Water Flush Time Hour should be {}".format(config.WATER_FLUSH_TIME_HOUR[parameter])) enter_address_value(names.o_SettingsBase_input_TextInput_6,entry=str(config.WATER_FLUSH_TIME_MINUTE[parameter])) test.compare(waitForObjectExists(names.o_SettingsBase_input_TextInput_6).text, config.WATER_FLUSH_TIME_MINUTE[parameter], "Water Flush Time Minute should be {}".format(config.WATER_FLUSH_TIME_MINUTE[parameter])) enter_address_value(names.o_SettingsBase_input_TextInput_9,entry=str(config.WATER_FLUSH_CYCLE[parameter])) test.compare(waitForObjectExists(names.o_SettingsBase_input_TextInput_9).text, config.WATER_FLUSH_CYCLE[parameter], "Water Flush Cycle(Days) should be {}".format(config.WATER_FLUSH_CYCLE[parameter])) enter_address_value(names.o_SettingsBase_input_TextInput_7,entry=str(config.HEAT_DISINFECTION_TIME_HOUR[parameter])) test.compare(waitForObjectExists(names.o_SettingsBase_input_TextInput_7).text, config.HEAT_DISINFECTION_TIME_HOUR[parameter], "Heat Disinfection Time Hour should be {}".format(config.HEAT_DISINFECTION_TIME_HOUR[parameter])) enter_address_value(names.o_SettingsBase_input_TextInput_8,entry=str(config.HEAT_DISINFECTION_TIME_MINUTE[parameter])) test.compare(waitForObjectExists(names.o_SettingsBase_input_TextInput_8).text, config.HEAT_DISINFECTION_TIME_MINUTE[parameter], "Heat Disinfection Minute should be {}".format(config.HEAT_DISINFECTION_TIME_MINUTE[parameter])) enter_address_value(names.o_SettingsBase_input_TextInput_10,entry=str(config.HEAT_DISINFECTION_CYCLE[parameter])) test.compare(waitForObjectExists(names.o_SettingsBase_input_TextInput_10).text, config.HEAT_DISINFECTION_CYCLE[parameter], "Heat Disinfection Cycle(Days) should be {}".format(config.HEAT_DISINFECTION_CYCLE[parameter])) test.endSection() def verify_dg_cleaning_setting(): """ Method to verify "DG Cleaning" screen """ test.startSection("Verifying DG Cleaning setting") utils.waitForGUI(0.2) mouseClick(waitForObject(names.o_SettingsHome_DG_Cleaning_Text)) test.compare(waitForObjectExists(names.o_SettingsBase_DG_Cleaning_Text).text, config.DG_CLEANING_TITLE_TEXT,"DG Cleaning Title must be {}".format(config.DG_CLEANING_TITLE_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_Water_Flush_Text).text, config.WATER_FLUSH_TEXT,"Water Flush text must be {}".format(config.WATER_FLUSH_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_Heat_Disinfection_Text).text, config.HEAT_DISINFECTION_TEXT,"Heat Disinfection text must be {}".format(config.HEAT_DISINFECTION_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_Time_HH_MM_Label).text, config.WATER_FLUSH_TIME_TEXT,"Water Flush Time Text must be {}".format(config.WATER_FLUSH_TIME_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_Time_HH_MM_Label_2).text, config.HEAT_DISINFECTION_TIME_TEXT,"Heat Disinfection Time text must be {}".format(config.HEAT_DISINFECTION_TIME_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_Cycle_Days_Text).text, config.WATER_FLUSH_CYCLE_TEXT,"Water Flush Cycle text must be {}".format(config.WATER_FLUSH_CYCLE_TEXT)) test.compare(waitForObjectExists(names.o_SettingsBase_Cycle_Days_Text_2).text, config.HEAT_DISINFECTION_CYCLE_TEXT,"Heat Disinfection Cycle text must be {}".format(config.HEAT_DISINFECTION_CYCLE_TEXT)) test.log("Passing correct values to validate water flush and heat disinfection parameters") verify_water_flush_heat_disinfection_dg_cleaning_setting("valid") utils.waitForGUI(0.2) test.log("Passing incorrect values to validate water flush and heat disinfection parameters") verify_water_flush_heat_disinfection_dg_cleaning_setting("invalid") test.compare(waitForObjectExists(names.o_back_button).text, config.BACK_BUTTON_TEXT,"BACK Button Text must be {}".format(config.BACK_BUTTON_TEXT)) mouseClick(waitForObjectExists(names.o_dg_cleaning_back_button)) test.endSection() def verify_incorrect_password_response(): """ Method to verify message displayed on entering incorrect password in service screen """ test.startSection("Verifying the functionalities with Incorrect password") test.log("Clicking on password entry field") utils.waitForGUI(0.5) 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(names.o_service_confirm_btn)) incorrect_password_text = (waitForObjectExists(names.o_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() def verify_service_password_screen(): """         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     """ test.startSection("Navigating to 'services password' screen and enter password") utils.waitForGUI(1) hd_simulator.cmd_send_hd_operation_mode(op_mode=HDOpModes.MODE_STAN.value, sub_mode=HDStandbyStates.STANDBY_START_STATE.value) 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.compare(waitForObjectExists(names.o_service_text).text,config.SERVICE_TEXT, "{} screen is displayed".format(config.SERVICE_TEXT)) mouseClick(waitForObjectExists(names.o_service_text)) services_password_title = (waitForObjectExists(names.o_service_text_title).text) test.compare(services_password_title, SERVICES_TITLE_TEXT, "{} should display once user is navigated to services password screen".format(SERVICES_TITLE_TEXT)) utils.waitForGUI(0.5) verify_incorrect_password_response() utils.waitForGUI(0.5) mouseClick(waitForObjectExists(names.o_service_text)) 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" in line: services_password = lines[index+1][:-1] test.log(str(services_password)) password_line = (str(services_password)).split("= ") password = password_line[1] break else: continue utility.enter_keyboard_numeric_value(entry=str(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(password), "Entered password should be {}".format(str(password))) confirm_button = (waitForObjectExists(names.o_service_confirm_btn).text) test.compare(confirm_button, config.CONFIRM_TEXT, "Button text should be {}".format(config.CONFIRM_TEXT)) mouseClick(waitForObjectExists(names.o_service_confirm_btn)) utils.waitForGUI(0.5) mouseClick(waitForObjectExists(names.o_service_text)) utils.waitForGUI(0.5) mouseClick(waitForObjectExists(names.o_service_back_btn)) utils.waitForGUI(1) test.endSection() def verify_missing_path(): """" This function is for renaming the folder and check missing path errors. Inside this function we are renaming name of following folder which is required for execution. 1)application """ try: utility.rename_file(config.APPLICATION_FOLDER_LOCATION,"application") utils.waitForGUI(0.2) test.log("Navigating to 'Volume and Brightness' screen") mouseClick(waitForObjectExists(settings_text_obj(config.VOLUME_AND_BRIGHTNESS_TEXT))) utils.waitForGUI(0.5) mouseClick(waitForObjectExists(service_date_obj(config.BACK_TEXT))) utils.waitForGUI(0.5) test.log("Navigating to 'wifi' screen") mouseClick(waitForObjectExists(names.o_SettingsHome_wifi_Text)) utils.waitForGUI(0.5) mouseClick(waitForObjectExists(names.o_SettingsBase_mouseArea_MouseArea_3)) utils.waitForGUI(0.5) mouseClick(waitForObjectExists(names.o_SettingsBase_mouseArea_MouseArea)) test.log("Navigating to 'Bluetooth cuff' screen") utils.waitForGUI(0.5) mouseClick(waitForObjectExists(names.o_bluetooth_cuff_button_rect)) utils.waitForGUI(0.5) mouseClick(waitForObjectExists(names.o_SettingsBase_mouseArea_MouseArea_4)) utils.waitForGUI(0.5) mouseClick(waitForObjectExists(names.o_SettingsBase_mouseArea_MouseArea_2)) except: test.log(str("Failed to verify missing path scenario")) finally: utility.rename_old_name(config.APPLICATION_FOLDER_LOCATION,"application") def main(): """" Do not interrupt this script while it is executing. This script might create folder problems. Inside this script we are renaming name of following folder which is required for execution. 1)application """ utils.tstStart(__file__) startApplication(config.AUT_NAME) navigate_to_settings_screen() verify_settings_parameters() verify_parameters_under_information() verify_hd_and_dg_versions(hd_major=10, hd_minor=20, hd_micro=30, hd_build=4000, hd_fpga_id=50, hd_fpga_major=60, hd_fpga_minor=70, hd_fpga_lab=80, hd_compatibility_rev=9999, hd_serial="HD1234567890123", dg_major=100, dg_minor=95, dg_micro=105, dg_build=1000, dg_fpga_id=124, dg_fpga_major=75, dg_fpga_minor=65, dg_fpga_lab=125, dg_compatibility_rev=4000, dg_serial="DG1234567890123") utils.waitForGUI(0.5) verify_hd_and_dg_versions(hd_major=12, hd_minor=25, hd_micro=32, hd_build=4100, hd_fpga_id=53, hd_fpga_major=66, hd_fpga_minor=72, hd_fpga_lab=84, hd_compatibility_rev=8888, hd_serial="HD9876543210123", dg_major=101, dg_minor=92, dg_micro=115, dg_build=1001, dg_fpga_id=121, dg_fpga_major=72, dg_fpga_minor=62, dg_fpga_lab=124, dg_compatibility_rev=3000, dg_serial="DG9876543210123") utils.waitForGUI(0.5) verify_hd_and_dg_versions(hd_major=91, hd_minor=33, hd_micro=42, hd_build=4240, hd_fpga_id=10, hd_fpga_major=50, hd_fpga_minor=10, hd_fpga_lab=20, hd_compatibility_rev=1234, hd_serial="HD1234512345123", dg_major=101, dg_minor=85, dg_micro=115, dg_build=1240, dg_fpga_id=122, dg_fpga_major=71, dg_fpga_minor=66, dg_fpga_lab=122, dg_compatibility_rev=4290, dg_serial="DG1234512345123") utils.waitForGUI(0.5) verify_hd_and_dg_versions(hd_major=40, hd_minor=30, hd_micro=33, hd_build=3210, hd_fpga_id=55, hd_fpga_major=68, hd_fpga_minor=71, hd_fpga_lab=88, hd_compatibility_rev=2345, hd_serial="HD09876543210987", dg_major=100, dg_minor=95, dg_micro=105, dg_build=1000, dg_fpga_id=124, dg_fpga_major=75, dg_fpga_minor=65, dg_fpga_lab=125, dg_compatibility_rev=4000, dg_serial="DG9876543210987") utils.waitForGUI(0.5) verify_service_date(hd_day=DAY_3, hd_month=MONTH_NOVEMBER, hd_year=YEAR_2022, hd_interval_days=INTERVAL_DAYS_2_YEARS, dg_day=DAY_25, dg_month=MONTH_JAN, dg_year=YEAR_1977, dg_interval_days=INTERVAL_DAYS_1_YEARS) utils.waitForGUI(0.5) verify_service_date(hd_day=DAY_25, hd_month=MONTH_JAN, hd_year=YEAR_1977, hd_interval_days=INTERVAL_DAYS_1_YEARS, dg_day=DAY_12, dg_month=MONTH_APRIL, dg_year=YEAR_2001, dg_interval_days=INTERVAL_DAYS_6_MONTHS) utils.waitForGUI(0.5) verify_service_date(hd_day=DAY_12, hd_month=MONTH_APRIL, hd_year=YEAR_2001, hd_interval_days=INTERVAL_DAYS_6_MONTHS, dg_day=DAY_30, dg_month=MONTH_AUGUST, dg_year=YEAR_2045, dg_interval_days=INTERVAL_DAYS_10_MONTHS) utils.waitForGUI(0.5) verify_service_date(hd_day=DAY_30, hd_month=MONTH_AUGUST, hd_year=YEAR_2045, hd_interval_days=INTERVAL_DAYS_10_MONTHS, dg_day=DAY_3, dg_month=MONTH_NOVEMBER, dg_year=YEAR_2022, dg_interval_days=INTERVAL_DAYS_2_YEARS) test.log("Navigating to 'Settings' screen") mouseClick(waitForObjectExists(service_date_obj(config.BACK_TEXT))) utils.waitForGUI(0.5) test.log("Navigating to 'Volume and Brightness' screen") mouseClick(waitForObjectExists(settings_text_obj(config.VOLUME_AND_BRIGHTNESS_TEXT))) verify_volume_and_brightness_section() verify_alarm_volume() verify_wifi_setting() verify_bluetooth_cuff_setting() verify_dg_cleaning_setting() verify_service_password_screen() verify_missing_path() utils.tstDone()