Explorar el Código

COptionAction
1、添加dealPasswordBox处理函数。
2、getCurOptionInfo中,当到达value层级时,不置空self.__curOptionInfo。

CTMenu
1、对各enterNode前添加dealPasswordBox处理。

scbc.sat2 hace 5 años
padre
commit
00c1aa9840
Se han modificado 2 ficheros con 74 adiciones y 9 borrados
  1. 57 0
      ssat_sdk/MenuTree3/OptionAction.py
  2. 17 9
      ssat_sdk/MenuTree3/TMenu.py

+ 57 - 0
ssat_sdk/MenuTree3/OptionAction.py

@@ -173,6 +173,62 @@ class COptionAction(CBaseLog):
                 break
         return not found
 
+    '''
+    函数:处理弹出密码框.
+    参数:
+    返回:Boolean, Boolean。
+        如何没有密码框处理,返回False,False。
+        如果有,且成功输入密码后密码框消失,返回True, True
+    
+    注意:对应以前的dealOthers函数。
+    '''
+    def dealPasswordBox(self):
+        parentOption = ''
+        if self.isOnValueSheet():
+            if self.__optionValueInfo is None or self.__optionValueInfo.__len__() == 0:
+                self.error(u"当前value[%s]信息空" % str(self.__optionValue))
+                return False, False
+
+            others = self.__optionValueInfo['others']
+            if others is None or others.__len__() == 0:
+                self.info(u"[%s]others字段空" % str(self.__curOptionName))
+                return False, False
+            # 获取父节点
+            parentOption = self.__optionValueInfo['option']
+        else:
+            if self.__curOptionInfo is None or self.__curOptionInfo.__len__() == 0:
+                self.error(u"当前option[%s]信息空" % str(self.__curOptionName))
+                return False, False
+
+            others = self.__curOptionInfo['others']
+            if others is None or others.__len__() == 0:
+                self.info(u"[%s]others字段空" % str(self.__curOptionName))
+                return False, False
+            # 获取父节点;
+            parentOption = self.__curOptionInfo['parent']
+
+        # 转换为字典;
+        others = json.loads(others)
+        if "password" not in others:
+            self.info(u"[%s]others没有密码框处理" % str(self.__curOptionName))
+            return False, False
+
+        password = self.__optionConfig.get_value("Password", others["password"])
+        # 发送密码前,停2秒(因为像6586机芯响应很慢,密码框还没弹出就完成了密码输入的操作);
+        time.sleep(2)
+        # 发送按键;
+        for key in list(password):
+            self.sendKey(key, 1, 0.2)
+        time.sleep(1)
+        # 发送ok键;
+        if others["enter_key"] != "default":
+            self.sendKey(others["enter_key"])
+        # 判断是否成功输入密码;
+        current_uiPic = self.takePicture()
+        # 此处findRectByIcon参数3传递的不是first_parent,而是当前option的parent;
+        found, contourRect = self.__optionFocus.findFocusByIcon(current_uiPic, parentOption)
+        return True, not found
+
     '''
     函数:是否在父节点菜单上。一般在执行了callFirstOptionShortCutKey后调用;
     参数:无
@@ -494,6 +550,7 @@ class COptionAction(CBaseLog):
             return False
 
         if self.__pos >= self.__optionPaths.__len__():
+            # self.__curOptionInfo = None  # 是否需要在到达value层级后置空,可能保留值会有比较多用处!
             self.warn(u"已到达value节点,无法获取路径信息")
             return False
 

+ 17 - 9
ssat_sdk/MenuTree3/TMenu.py

@@ -56,6 +56,11 @@ class CTMenu(CBaseLog):
                     isOnTargetNode = True
                     break
 
+                # 先处理密码框;
+                hasBox, dealStatus = opa.dealPasswordBox()
+                if hasBox is True and dealStatus is False:
+                    break
+
                 # 未到目标,进入下一节点;
                 self.info(u"<进入下一节点>")
                 opa.enterNode()
@@ -114,6 +119,13 @@ class CTMenu(CBaseLog):
     def __openOption(self, opa):
         if self.__focusOption(opa) is False:
             return False
+
+        # 先处理密码框;
+        hasBox, dealStatus = opa.dealPasswordBox()
+        if hasBox is True and dealStatus is False:
+            self.error(u"密码框处理失败")
+            return False
+
         # 到达目标option后;
         self.info(u"进入option")
         opa.enterNode()
@@ -211,13 +223,9 @@ class CTMenu(CBaseLog):
         CTMenu.sourceInput.setPattern(11)
         opa = COptionAction(optionName, None, self.__optionConfig, self.__optionExcel)
 
-        if self.__focusOption(opa) is False:
+        if self.__openOption(opa) is False:
             return False
 
-        # 到达目标option后;
-        self.info(u"进入option")
-        opa.enterNode()
-
         # 聚焦状态就是结果;
         self.info(u"成功open指定option=%s" % optionName)
         return True
@@ -413,7 +421,7 @@ if __name__ == "__main__":
         ml.checkOptionValue('sharpness', value)
         time.sleep(st)
 
-    if 0:
+    if 1:
         st = 30
         ml.openOption('picture_preset')
         time.sleep(st)
@@ -477,7 +485,7 @@ if __name__ == "__main__":
         time.sleep(st)
         ml.getOptionValue('picture_preset')
 
-    if 1:
-        # ml.moveToOption('brightness')
-        # ml.moveToOption('picture_reset')
+    if 0:
+        ml.moveToOption('brightness')
+        ml.moveToOption('picture_reset')
         ml.moveToOption('picture_preset')