123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- # -*- coding:utf-8 -*-
- import os, time
- from BaseLog import CBaseLog
- from ExtraData import CExtraData
- from OptionExcel import COptionExcel
- from OptionConfig import COptionConfig
- from OptionFocus import COptionFocus
- from OptionOCR import COptionOCR
- from OptionAction import COptionAction
- from ssat_sdk.source_input import SourceGenInput
- class CMenuLogic(CBaseLog):
- sourceInput = SourceGenInput()
- def __init__(self):
- CBaseLog.__init__(self)
- self.__exData = CExtraData()
- self.__optionExcel = COptionExcel(self.__exData)
- self.__optionConfig = COptionConfig(self.__exData, self.__optionExcel)
- '''
- 函数:移动到目标节点上(路径节点和value节点)
- 参数:
- opa COptionAction对象;
- moveDirection 移动方向,True表示调用move_key[1](向下或向右), False表示调用move_key[0]。
- maxTry 最大移动次数,防止死循环。
- 返回:Boolean。
- '''
- def __move2TargetNode(self, opa, moveDirection, maxTry=15):
- tryCount = 0
- # 是否到目标结点了;
- isOnTargetNode = False
- # 移动到目标节点;
- while True:
- # 判断是否移动成功;
- if opa.isOnTargetNode()[0] is True:
- # 如果已在目标结点,退出循环;
- if opa.isOnTargetOption() or opa.isOnValueSheet():
- self.info(u"<到达目标路径节点或value节点>")
- isOnTargetNode = True
- break
- # 未到目标,进入下一节点;
- self.info(u"<进入下一节点>")
- opa.enterNode()
- continue
- # endif
- # 移动到下/上一节点;
- if moveDirection:
- opa.move2NextSiblingNode()
- else:
- opa.move2PrevSiblingNode()
- tryCount += 1
- if tryCount > maxTry:
- self.warn(u"已%s遍历超过%d次,仍未找到焦点" % ("正向" if moveDirection else "逆向", maxTry))
- break
- # end-while
- return isOnTargetNode
- '''
- 函数:返回到主页(不一定就是Home页,一般指返回运行前的那个画面)
- 参数:
- opa COptionAction对象;
- 返回:
-
- '''
- def __back2Home(self, opa):
- self.info(u"返回主页")
- while opa.pos > 0:
- opa.back2ParentNode()
- self.info(u"【如果设置value时,会自动回退到上一层父节点,此处操作正常。否则要多返回一层。】")
- '''
- 函数:设置option的值。
- 参数:
- 返回:
- '''
- def setOptionValue(self, optionName, optionValue):
- CMenuLogic.sourceInput.setPattern(11)
- opa = COptionAction(optionName, optionValue, self.__optionConfig, self.__optionExcel)
- # 检测路径是否有效;
- if opa.checkRunOptionPath() is False:
- return False
- # 首先,调用根菜单;
- opa.callFirstOptionShortCutKey()
- time.sleep(1)
- if opa.isOnFirstOption() is False:
- self.error(u"未聚焦到根节点上,退出")
- return False
- # 遍历到目标option中;
- if self.__move2TargetNode(opa, True) is False:
- if self.__move2TargetNode(opa, False) is False:
- return False
- # 到达目标option后,进入value表;
- self.info(u"进入value表")
- opa.enterNode()
- # 遍历到value节点中;
- if self.__move2TargetNode(opa, True) is False:
- if self.__move2TargetNode(opa, False) is False:
- return False
- # 找到value节点,设置值;
- self.info(u"设置value值:一般只适用于Number类型或Input类型,不适合选择类型。但都必须调用,因为里面有enterkey操作")
- opa.setOptionValue()
- # 返回主页;
- self.__back2Home(opa)
- '''
- 函数:检测option的值;
- 参数:
- 返回:
- '''
- def checkOptionValue(self, optionName, optionValue):
- CMenuLogic.sourceInput.setPattern(11)
- opa = COptionAction(optionName, optionValue, self.__optionConfig, self.__optionExcel)
- # 检测路径是否有效;
- if opa.checkRunOptionPath() is False:
- return False
- # 首先,调用根菜单;
- opa.callFirstOptionShortCutKey()
- if opa.isOnFirstOption() is False:
- self.error(u"未聚焦到根节点上,退出")
- return False
- # 遍历到目标option中;
- if self.__move2TargetNode(opa, True) is False:
- if self.__move2TargetNode(opa, False) is False:
- return False
- # 到达目标option后,进入value表;
- opa.enterNode()
- # 遍历到value节点中;
- if self.__move2TargetNode(opa, True) is False:
- if self.__move2TargetNode(opa, False) is False:
- return False
- # 找到value节点,设置值;
- opa.setOptionValue()
- if __name__ == "__main__":
- ml = CMenuLogic()
- ml.setOptionValue('picture_preset', 'movie')
|