소스 검색

1、COptionAction新增函数:getPathLength,获取路径长度。
2、COptionAction getCurOptionInfo增加参数判断。
3、增强COptionExcel的各函数参数判断。
4、完成moveToOption接口。

scbc.sat2 5 년 전
부모
커밋
a6fa4351c6
3개의 변경된 파일108개의 추가작업 그리고 2개의 파일을 삭제
  1. 47 1
      ssat_sdk/MenuTree3/OptionAction.py
  2. 20 0
      ssat_sdk/MenuTree3/OptionExcel.py
  3. 41 1
      ssat_sdk/MenuTree3/TMenu.py

+ 47 - 1
ssat_sdk/MenuTree3/OptionAction.py

@@ -140,6 +140,39 @@ class COptionAction(CBaseLog):
             self.error(u"表格没有toparent_key字段,执行默认按键return")
             self.sendKey('return')
 
+    '''
+    函数:
+    参数:
+    返回:
+    '''
+    def inputUnlock(self, stdText, password=''):
+        # 如果锁住,按ok会弹出输入密码框;
+        self.sendKey("ok")
+        # 获取密码;
+        if password.__len__() == 0:
+            password = self.__optionConfig.getSuperPassword("Password", "super")
+        # 发送按键;
+        for key in list(password):
+            self.sendKey(key, 1, 0.2)
+        time.sleep(1)
+        # 发送ok键;
+        self.sendKey('ok')
+        # 判断是否成功输入密码;
+        textPic = self.takePicture()
+        # 遍历ocr类型;
+        found = False
+        ocrDict = [{"lan": "ChinesePRC+English", "type": 4}, {"lan": "ChinesePRC+English", "type": 253},
+                   {"lan": "ChinesePRC+English", "type": 10001}]
+        for item in ocrDict:
+            # 识别ocr;
+            ocrText = self.__optionOCR.getImageText(textPic, item, {})
+            ocrText = unicode(ocrText).lower()
+            self.info("lan=%s,type=%d,ocr=%s" % (item["lan"], item["type"], ocrText))
+            if ocrText in stdText or stdText == ocrText:
+                found = True
+                break
+        return not found
+
     '''
     函数:是否在父节点菜单上。一般在执行了callFirstOptionShortCutKey后调用;
     参数:无
@@ -456,7 +489,7 @@ class COptionAction(CBaseLog):
     '''
 
     def getCurOptionInfo(self):
-        if self.__optionPaths.__len__() == 0:
+        if self.__optionPaths is None or self.__optionPaths.__len__() == 0:
             self.error(u"paths路径空")
             return False
 
@@ -745,6 +778,19 @@ class COptionAction(CBaseLog):
                 index += 1
             return str1[:index]
 
+    '''
+    函数:获取路径长度。
+    参数:
+    返回:
+    '''
+    def getPathLength(self):
+        if self.__optionPaths is None:
+            self.error(u"路径空,返回0")
+            return 0
+
+        self.info(u"路径长度:%d" % self.__optionPaths.__len__())
+        return self.__optionPaths.__len__()
+
     '''
     函数:去掉字符串数组中每个字符串 左边或右边相同的部分
     参数:

+ 20 - 0
ssat_sdk/MenuTree3/OptionExcel.py

@@ -550,6 +550,9 @@ class COptionExcel(CBaseLog):
     测试:通过。对应UIT_tree中的getValueTextList。
     '''
     def getOptionValueText(self, optionName, value=""):
+        if optionName is None or optionName.__len__() == 0:
+            self.error(u"optionName空,退出执行")
+            return []
         valueTextList = []
         if optionName in self.__valueParams.values:
             valueDictList = self.valueParams.values[optionName]["value"]
@@ -590,6 +593,11 @@ class COptionExcel(CBaseLog):
         测试:通过。对应UIT_tree中的get_option
     '''
     def getOptionInfo(self, optionName, paths=None):
+        # 参数校验;
+        if optionName is None or optionName.__len__() == 0:
+            self.error(u"optionName空,退出执行")
+            return False, {}
+
         # 编码转换;
         if type(optionName) == str:
             option = unicode(optionName)
@@ -683,6 +691,10 @@ class COptionExcel(CBaseLog):
     测试:。
     '''
     def getOptionPaths(self, optionName):
+        # 对参数进行校验;
+        if optionName is None or optionName.__len__() == 0:
+            self.error('optionName空,执行退出')
+            return None
         # pp必须不排序;
         pp = OrderedDict()
         # 首先,字典不排序,需要倒序;
@@ -754,6 +766,10 @@ class COptionExcel(CBaseLog):
     测试:通过。
     '''
     def getOptionPathsAndValue(self, optionName, value):
+        # 对参数进行校验;
+        if optionName is None or optionName.__len__() == 0:
+            self.error('optionName空,执行退出')
+            return None, None
         if value.__len__() == 0:
             self.error('value空,执行退出')
             return {}, OrderedDict()
@@ -773,6 +789,10 @@ class COptionExcel(CBaseLog):
     '''
     def checkOptionPaths(self, optionNameOrPaths):
         optionPathResult = "Fail"
+        # 进行参数校验;
+        if optionNameOrPaths is None or optionNameOrPaths.__len__() == 0:
+            self.error('optionNameOrPaths空,执行退出')
+            return None, optionPathResult
         path_params = optionNameOrPaths
         if type(optionNameOrPaths) == str:
             path_params = self.getOptionPaths(optionNameOrPaths)

+ 41 - 1
ssat_sdk/MenuTree3/TMenu.py

@@ -288,6 +288,41 @@ class CTMenu(CBaseLog):
 
         return self.__focusOption(opa)
 
+    '''
+    函数:
+    参数:
+    返回:
+    '''
+    def inputUnlock(self, stdText, password=''):
+        opa = COptionAction(None, None, self.__optionConfig, self.__optionExcel)
+        return opa.inputUnlock(stdText, password)
+
+    '''
+    函数:当焦点已经在option层级上时,移动到指定的option上。
+    参数:
+        optionName      目标option.
+    返回:Boolean,成功移动到目标节点返回True。
+    
+    注意:该函数不是从根节点开始移动到目标节点,而是假定焦点已经在目标节点层级菜单上。
+    '''
+    def moveToOption(self, optionName):
+        opa = COptionAction(optionName, None, self.__optionConfig, self.__optionExcel)
+        # 已经在该层级上.
+        opa.setCurPos(opa.getPathLength()-1)
+
+        # 检测路径是否有效;
+        if opa.checkRunOptionPath() is False:
+            self.__back2Home(opa)
+            return False
+
+        # 遍历到目标option中;
+        if self.__move2TargetNode(opa, True)[0] is False:
+            if self.__move2TargetNode(opa, False)[0] is False:
+                self.__back2Home(opa)
+                return False
+
+        return True
+
 
 if __name__ == "__main__":
     ml = CTMenu()
@@ -428,7 +463,7 @@ if __name__ == "__main__":
         time.sleep(st)
         ml.focusOptionValue('picture_preset', 'movie')
 
-    if 1:
+    if 0:
         st = 2
         ml.getOptionValue('brightness')
         time.sleep(st)
@@ -443,3 +478,8 @@ if __name__ == "__main__":
         ml.getOptionValue('backlight')
         time.sleep(st)
         ml.getOptionValue('picture_preset')
+
+    if 1:
+        # ml.moveToOption('brightness')
+        # ml.moveToOption('picture_reset')
+        ml.moveToOption('picture_preset')