UAT_menu.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. # -*- coding:utf-8 -*-
  2. from UAT_runner import UATRunner
  3. from UAT_tree import UATTree
  4. import os, sys, time
  5. from UAT_log import error,info,debug
  6. DEBUG = True
  7. INFO = True
  8. ERROR = True
  9. class UATMenu():
  10. def __init__(self):
  11. self.uatRunner = UATRunner()
  12. self.cls = "UATMenu"
  13. '''
  14. 在目标option所在菜单下,聚焦至目标option(单层操作)
  15. :param optionName 目标option名字
  16. '''
  17. def moveToOption(self, optionName):
  18. option = self.uatRunner.uatPathManage.uatData.getOption(optionName)
  19. if option is None:
  20. error(self.cls, "moveToOption","Option %s not found"%optionName, ERROR)
  21. return False
  22. return self.uatRunner.moveToOption(option)
  23. '''
  24. 在目标option所在菜单下,进入目标option(单层操作)
  25. :param optionName 目标option名字
  26. '''
  27. def openMoveOption(self, optionName):
  28. option = self.uatRunner.uatPathManage.uatData.getOption(optionName)
  29. if option is None:
  30. error(self.cls, "openMoveOption","Option %s not found"%optionName, ERROR)
  31. return False
  32. result = self.uatRunner.moveToOption(option)
  33. if result == False:
  34. return result
  35. return self.uatRunner.sendOptionEnterKey(option)
  36. '''
  37. 选中到目标option,如果在option所在页面,直接用moveToOption移动焦点选中,按路径执行选中步骤。
  38. :param optionName 目标option名字
  39. :param fromFirst 是否固定从firstparent到目标option
  40. '''
  41. def focusOption(self, optionName, fromFirst = False):
  42. option = self.uatRunner.uatPathManage.uatData.getOption(optionName)
  43. if option is None:
  44. error(self.cls, "focusOption","Option %s not found"%optionName, ERROR)
  45. return False
  46. return self.uatRunner.focusOption(option, fromFirst)
  47. '''
  48. 进入目标option,如果在option所在页面,直接用moveToOption移动焦点选中并进入,按路径执行选中步骤。
  49. :param optionName 目标option名字
  50. :param fromFirst 是否固定从firstparent到目标option
  51. '''
  52. def openOption(self, optionName, fromFirst = False, nextParentName=""):
  53. option = self.uatRunner.uatPathManage.uatData.getOption(optionName)
  54. if option is None:
  55. error(self.cls, "openOption","Option %s not found"%optionName, ERROR)
  56. return False
  57. nextParent = self.uatRunner.uatPathManage.uatData.getParentDict(nextParentName)
  58. if nextParent is None:
  59. info(self.cls, "openOption","nextParentName %s not found"%nextParentName, INFO)
  60. return self.uatRunner.openOption(option, fromFirst, nextParent)
  61. '''
  62. 进入目标parent,在openOption基础上,增加了后续路过弹窗的无option界面parent。例如:usb的视频播放界面,有弹出提示框,continue或者replay。
  63. 实际效果,和openOption一样。
  64. :param parentName 目标parent名字
  65. :param fromFirst 是否固定从firstparent到目标option
  66. '''
  67. def openParent(self, parentName, fromFirst=False):
  68. parent = self.uatRunner.uatPathManage.uatData.getParentDict(parentName)
  69. if parent is None:
  70. error(self.cls, "openParent","parent %s not found"%parentName, ERROR)
  71. return False
  72. return self.uatRunner.openParent(parent, fromFirst)
  73. '''
  74. 选中到目标option,如果在option所在页面,直接用moveToOption移动焦点选中,按路径执行选中步骤。
  75. :param optionName 目标option名字
  76. :param value 目标option所设的值,若为checkbox,值范围为[True,False],True表示勾选,False表示取消勾选
  77. :param exitMenu 执行完以后,是否退出当前菜单
  78. :param fromFirst 是否从第一层开始执行(菜单页面是否处于初始状态)
  79. '''
  80. def setOptionValue(self, optionName, value, exitMenu=True, fromFirst=True):
  81. option = self.uatRunner.uatPathManage.uatData.getOption(optionName)
  82. if option is None:
  83. error(self.cls, "setOptionValue","Option %s not found"%optionName, ERROR)
  84. return False
  85. return self.uatRunner.setOptionValue(option, value, exitMenu, fromFirst)
  86. '''
  87. 读取该option的infoView参数,找到infoView的组件信息,并根据传入参数决定对infoView信息的判断
  88. :param optionName 目标option名字
  89. :param cmpPic 传入的图片路径。 如果传入此参数,则会将infoView所在的坐标进行裁剪,并对传入路径的图片进行比对
  90. :param cmpText 传入的文字内容。在不传入图片路径时,如果传入文字内容,则会对infoView所在坐标的文字进行识别,与传入文字比对
  91. 倘若cmpPic和cmpText均不传入,则只对infoView是否存在做判断。
  92. :returns 返回三个参数。
  93. 返回第一个参数为结果状态,1为找到infoView,并且传入条件比对成功;
  94. 0为找到infoView,但传入条件比对不成功;
  95. -1为未找到infoView,需要检查页面是否存在infoView,或者UATree中infoView配置是否正确
  96. 返回的第二个参数为测试时的整张截图;
  97. 返回的第三个参数为目标infoView所在坐标的裁剪图。
  98. '''
  99. def checkOptionInfoView(self, optionName, cmpText = "", cmpPic = ""):
  100. option = self.uatRunner.uatPathManage.uatData.getOption(optionName)
  101. if option is None:
  102. error(self.cls, "checkOptionInfoView","Option %s not found"%optionName, ERROR)
  103. return False
  104. return self.uatRunner.checkOptionInfoView(option, cmpText = cmpText, cmpPic = cmpPic)
  105. '''
  106. 读取该option的infoView参数,并返回infoView组件信息。如果返回为None,则表示未找到infoView
  107. '''
  108. def getOptionInfoView(self, optionName):
  109. option = self.uatRunner.uatPathManage.uatData.getOption(optionName)
  110. if option is None:
  111. error(self.cls, "getOptionInfoView","Option %s not found"%optionName, ERROR)
  112. return None
  113. return self.uatRunner.getOptionInfoView(option)
  114. '''
  115. 检查当前页面是否存在该option
  116. '''
  117. def checkOptionExist(self, optionName):
  118. option = self.uatRunner.uatPathManage.uatData.getOption(optionName)
  119. if option is None:
  120. error(self.cls, "checkOptionExist","Option %s not found"%optionName, ERROR)
  121. return False
  122. return self.uatRunner.checkOptionExist(option)
  123. def getOptionObject(self, optionName):
  124. option = self.uatRunner.uatPathManage.uatData.getOption(optionName)
  125. if option is None:
  126. error(self.cls, "getOptionObject","Option %s not found"%optionName, ERROR)
  127. return None
  128. return self.uatRunner.getOptionObject(option)
  129. '''
  130. 获取该option的取值范围,返回一个元组,包含左起最小值和右起最大值两个元素。
  131. '''
  132. def getOptionValueRange(self, optionName):
  133. option = self.uatRunner.uatPathManage.uatData.getOption(optionName)
  134. if option is None:
  135. error(self.cls, "getOptionValueRange","Option %s not found"%optionName, ERROR)
  136. return None
  137. try:
  138. vRange = (option[UATTree.TAB_TEXT_VALUE][UATTree.ValueView_Min],
  139. option[UATTree.TAB_TEXT_VALUE][UATTree.ValueView_Max])
  140. except Exception,e:
  141. error(self.cls, "getOptionValueRange", "option %s 获取取值范围失败!!!将返回空值!!!"%optionName, ERROR)
  142. vRange = None
  143. return vRange
  144. '''
  145. 获取目标option的值并返回
  146. '''
  147. def getOptionValue(self, optionName):
  148. option = self.uatRunner.uatPathManage.uatData.getOption(optionName)
  149. if option is None:
  150. error(self.cls, "getOptionValue","Option %s not found"%optionName, ERROR)
  151. return False, None, ""
  152. ret = self.uatRunner.openOption(option, True)
  153. if ret is False:
  154. info(self.cls, "getOptionValue", "openOption %s Fail"%optionName, INFO)
  155. self.uatRunner.runnerCmd.exitMenuByPath(self.uatRunner.executedPath)
  156. return False, None, ""
  157. result, optionValue, curValue = self.uatRunner.runnerCmd.getValue(option)
  158. self.uatRunner.runnerCmd.exitMenuByPath(self.uatRunner.executedPath)
  159. return result, optionValue, curValue
  160. '''
  161. 检查option的值是否为目标value,返回boolean值
  162. '''
  163. def checkOptionValue(self, optionName, value):
  164. result, optionValue, curValue = self.getOptionValue(optionName)
  165. if optionValue == value:
  166. return True
  167. else:
  168. return False
  169. if __name__ == "__main__":
  170. uatMenu = UATMenu()
  171. # uatMenu.openOption("av_backlight_settings",nextParentName="av_backlight_settings")
  172. # uatMenu.openParent("av_backlight_settings")
  173. # uatMenu.focusOption("av_backlight_settings")
  174. # setResult = uatMenu.setOptionValue("hdmi_picture_mode", "hdmi_movie")
  175. # print "setResult:", setResult
  176. # print uatMenu.getOptionValue("hdmi_picture_mode")
  177. print uatMenu.checkOptionExist("sl_hdmi1")
  178. print uatMenu.getOptionInfoView("sl_hdmi1")
  179. # uatMenu.openOption("hdmi_picture_mode")
  180. # fsParam = {"focused":"true"}
  181. # print uatMenu.uatRunner.runnerCmd.focusCmd.moveToCheckedRedioButton(fsParam,findDirection="up",keyType="ir")
  182. # checkResult = uatMenu.checkOptionValue("hdmi_picture_mode", "hdmi_movie")
  183. # print "checkResult:", checkResult
  184. # uatMenu.setOptionValue("av_backlight",50, fromFirst=True)
  185. # uatMenu.setOptionValue("av_backlight",100, fromFirst=True)
  186. # uatMenu.setOptionValue("av_picture_mode","av_movie")
  187. # print uatMenu.getOptionValueRange("usb_Brightness")
  188. # obj1 = uatMenu.uatRunner.pyU.getChoosedUIObject("select")
  189. # print "input:"
  190. # input()
  191. # obj2 = uatMenu.uatRunner.pyU.getChoosedUIObject("select")
  192. # if obj1 is None:
  193. # print "obj1 is None!!!"
  194. # print "obj1.info:",obj1.info
  195. # print "obj1 == obj2 is ", obj1.info == obj2.info
  196. # print uatMenu.checkOptionInfoView("usb_mp3")
  197. #测试打开弹窗,选择弹窗按钮.场景:1 在弹窗前面界面;2 在弹窗后面界面;
  198. # print uatMenu.focusOption("usb_videoPlay_replay")
  199. # print uatMenu.openParent("usb_h264AC3_replay")
  200. # print uatMenu.openOption("usb_video_mpeg2-mp3")
  201. # print uatMenu.openOption("usb_video_h264-ac3")