# -*- coding:utf-8 -*- from UAT_runner import UATRunner from UAT_tree import UATTree import os, sys, time from UAT_log import error,info,debug DEBUG = True INFO = True ERROR = True class UATMenu(): def __init__(self): self.uatRunner = UATRunner() self.cls = "UATMenu" ''' 在目标option所在菜单下,聚焦至目标option(单层操作) :param optionName 目标option名字 ''' def moveToOption(self, optionName): option = self.uatRunner.uatPathManage.uatData.getOption(optionName) if option is None: error(self.cls, "moveToOption","Option %s not found"%optionName, ERROR) return False return self.uatRunner.moveToOption(option) ''' 在目标option所在菜单下,进入目标option(单层操作) :param optionName 目标option名字 ''' def openMoveOption(self, optionName): option = self.uatRunner.uatPathManage.uatData.getOption(optionName) if option is None: error(self.cls, "openMoveOption","Option %s not found"%optionName, ERROR) return False result = self.uatRunner.moveToOption(option) if result == False: return result return self.uatRunner.sendOptionEnterKey(option) ''' 选中到目标option,如果在option所在页面,直接用moveToOption移动焦点选中,按路径执行选中步骤。 :param optionName 目标option名字 :param fromFirst 是否固定从firstparent到目标option ''' def focusOption(self, optionName, fromFirst = False): option = self.uatRunner.uatPathManage.uatData.getOption(optionName) if option is None: error(self.cls, "focusOption","Option %s not found"%optionName, ERROR) return False return self.uatRunner.focusOption(option, fromFirst) ''' 进入目标option,如果在option所在页面,直接用moveToOption移动焦点选中并进入,按路径执行选中步骤。 :param optionName 目标option名字 :param fromFirst 是否固定从firstparent到目标option ''' def openOption(self, optionName, fromFirst = False, nextParentName=""): option = self.uatRunner.uatPathManage.uatData.getOption(optionName) if option is None: error(self.cls, "openOption","Option %s not found"%optionName, ERROR) return False nextParent = self.uatRunner.uatPathManage.uatData.getParentDict(nextParentName) if nextParent is None: info(self.cls, "openOption","nextParentName %s not found"%nextParentName, INFO) return self.uatRunner.openOption(option, fromFirst, nextParent) ''' 进入目标parent,在openOption基础上,增加了后续路过弹窗的无option界面parent。例如:usb的视频播放界面,有弹出提示框,continue或者replay。 实际效果,和openOption一样。 :param parentName 目标parent名字 :param fromFirst 是否固定从firstparent到目标option ''' def openParent(self, parentName, fromFirst=False): parent = self.uatRunner.uatPathManage.uatData.getParentDict(parentName) if parent is None: error(self.cls, "openParent","parent %s not found"%parentName, ERROR) return False return self.uatRunner.openParent(parent, fromFirst) ''' 选中到目标option,如果在option所在页面,直接用moveToOption移动焦点选中,按路径执行选中步骤。 :param optionName 目标option名字 :param value 目标option所设的值,若为checkbox,值范围为[True,False],True表示勾选,False表示取消勾选 :param exitMenu 执行完以后,是否退出当前菜单 :param fromFirst 是否从第一层开始执行(菜单页面是否处于初始状态) ''' def setOptionValue(self, optionName, value, exitMenu=True, fromFirst=True): option = self.uatRunner.uatPathManage.uatData.getOption(optionName) if option is None: error(self.cls, "setOptionValue","Option %s not found"%optionName, ERROR) return False return self.uatRunner.setOptionValue(option, value, exitMenu, fromFirst) ''' 读取该option的infoView参数,找到infoView的组件信息,并根据传入参数决定对infoView信息的判断 :param optionName 目标option名字 :param cmpPic 传入的图片路径。 如果传入此参数,则会将infoView所在的坐标进行裁剪,并对传入路径的图片进行比对 :param cmpText 传入的文字内容。在不传入图片路径时,如果传入文字内容,则会对infoView所在坐标的文字进行识别,与传入文字比对 倘若cmpPic和cmpText均不传入,则只对infoView是否存在做判断。 :returns 返回三个参数。 返回第一个参数为结果状态,1为找到infoView,并且传入条件比对成功; 0为找到infoView,但传入条件比对不成功; -1为未找到infoView,需要检查页面是否存在infoView,或者UATree中infoView配置是否正确 返回的第二个参数为测试时的整张截图; 返回的第三个参数为目标infoView所在坐标的裁剪图。 ''' def checkOptionInfoView(self, optionName, cmpText = "", cmpPic = ""): option = self.uatRunner.uatPathManage.uatData.getOption(optionName) if option is None: error(self.cls, "checkOptionInfoView","Option %s not found"%optionName, ERROR) return False return self.uatRunner.checkOptionInfoView(option, cmpText = cmpText, cmpPic = cmpPic) ''' 读取该option的infoView参数,并返回infoView组件信息。如果返回为None,则表示未找到infoView ''' def getOptionInfoView(self, optionName): option = self.uatRunner.uatPathManage.uatData.getOption(optionName) if option is None: error(self.cls, "getOptionInfoView","Option %s not found"%optionName, ERROR) return None return self.uatRunner.getOptionInfoView(option) ''' 检查当前页面是否存在该option ''' def checkOptionExist(self, optionName): option = self.uatRunner.uatPathManage.uatData.getOption(optionName) if option is None: error(self.cls, "checkOptionExist","Option %s not found"%optionName, ERROR) return False return self.uatRunner.checkOptionExist(option) def getOptionObject(self, optionName): option = self.uatRunner.uatPathManage.uatData.getOption(optionName) if option is None: error(self.cls, "getOptionObject","Option %s not found"%optionName, ERROR) return None return self.uatRunner.getOptionObject(option) ''' 获取该option的取值范围,返回一个元组,包含左起最小值和右起最大值两个元素。 ''' def getOptionValueRange(self, optionName): option = self.uatRunner.uatPathManage.uatData.getOption(optionName) if option is None: error(self.cls, "getOptionValueRange","Option %s not found"%optionName, ERROR) return None try: vRange = (option[UATTree.TAB_TEXT_VALUE][UATTree.ValueView_Min], option[UATTree.TAB_TEXT_VALUE][UATTree.ValueView_Max]) except Exception,e: error(self.cls, "getOptionValueRange", "option %s 获取取值范围失败!!!将返回空值!!!"%optionName, ERROR) vRange = None return vRange ''' 获取目标option的值并返回 ''' def getOptionValue(self, optionName): option = self.uatRunner.uatPathManage.uatData.getOption(optionName) if option is None: error(self.cls, "getOptionValue","Option %s not found"%optionName, ERROR) return False, None, "" ret = self.uatRunner.openOption(option, True) if ret is False: info(self.cls, "getOptionValue", "openOption %s Fail"%optionName, INFO) self.uatRunner.runnerCmd.exitMenuByPath(self.uatRunner.executedPath) return False, None, "" result, optionValue, curValue = self.uatRunner.runnerCmd.getValue(option) self.uatRunner.runnerCmd.exitMenuByPath(self.uatRunner.executedPath) return result, optionValue, curValue ''' 检查option的值是否为目标value,返回boolean值 ''' def checkOptionValue(self, optionName, value): result, optionValue, curValue = self.getOptionValue(optionName) if optionValue == value: return True else: return False if __name__ == "__main__": uatMenu = UATMenu() # uatMenu.openOption("av_backlight_settings",nextParentName="av_backlight_settings") # uatMenu.openParent("av_backlight_settings") # uatMenu.focusOption("av_backlight_settings") # setResult = uatMenu.setOptionValue("hdmi_picture_mode", "hdmi_movie") # print "setResult:", setResult print uatMenu.getOptionValue("hdmi_picture_mode") # uatMenu.openOption("hdmi_picture_mode") # fsParam = {"focused":"true"} # print uatMenu.uatRunner.runnerCmd.focusCmd.moveToCheckedRedioButton(fsParam,findDirection="up",keyType="ir") # checkResult = uatMenu.checkOptionValue("hdmi_picture_mode", "hdmi_movie") # print "checkResult:", checkResult # uatMenu.setOptionValue("av_backlight",50, fromFirst=True) # uatMenu.setOptionValue("av_backlight",100, fromFirst=True) # uatMenu.setOptionValue("av_picture_mode","av_movie") # print uatMenu.getOptionValueRange("usb_Brightness") # obj1 = uatMenu.uatRunner.pyU.getChoosedUIObject("select") # print "input:" # input() # obj2 = uatMenu.uatRunner.pyU.getChoosedUIObject("select") # if obj1 is None: # print "obj1 is None!!!" # print "obj1.info:",obj1.info # print "obj1 == obj2 is ", obj1.info == obj2.info # print uatMenu.checkOptionInfoView("usb_mp3") #测试打开弹窗,选择弹窗按钮.场景:1 在弹窗前面界面;2 在弹窗后面界面; # print uatMenu.focusOption("usb_videoPlay_replay") # print uatMenu.openParent("usb_h264AC3_replay") # print uatMenu.openOption("usb_video_mpeg2-mp3") # print uatMenu.openOption("usb_video_h264-ac3")