123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- # -*- 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
- # 测试使用到
- import random
- 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)
- '''
- 函数:判断两值(for_ocr与ocr识别结果)是否相等;
- 参数:
- srcValue 源值,excel表格中读取的value值。
- tagValue 目标值,ocr识别的结果值。
- 返回:相同返回True。
- '''
- def __isValueEqual(self, srcValue, tagValue):
- self.info(u"源值=%s, 目标值=%s" % (str(srcValue), str(tagValue)))
- '''
- 函数:移动到目标节点上(路径节点和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
- # 目标节点聚焦状态;
- targetFocus = False
- # 目标文本或数值;
- targetText = None
- # 移动到目标节点;
- while True:
- # 判断是否移动成功;
- targetFocus, targetText = opa.isOnTargetNode()
- if targetFocus 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, targetText
- '''
- 函数:返回到主页(不一定就是Home页,一般指返回运行前的那个画面)
- 参数:
- opa COptionAction对象;
- 返回:
-
- '''
- def __back2Home(self, opa):
- self.info(u"返回主页")
- while opa.pos > 0:
- opa.back2ParentNode()
- self.info(u"【如果设置value时,会自动回退到上一层父节点,此处操作正常。否则要多返回一层。】")
- '''
- 函数:设置指定的option的值为optionValue。
- 参数:
- optionName 要设置的option;
- optionValue option要设置的值;
- 返回: Boolean。
- '''
- def setOptionValue(self, optionName, optionValue):
- self.info(u"【%s】【%s】" % (optionName, optionValue))
- CMenuLogic.sourceInput.setPattern(11)
- opa = COptionAction(optionName, optionValue, self.__optionConfig, self.__optionExcel)
- # 检测路径是否有效;
- if opa.checkRunOptionPath() is False:
- self.__back2Home(opa)
- return False
- # 首先,调用根菜单;
- opa.callFirstOptionShortCutKey()
- time.sleep(1)
- if opa.isOnFirstOption() is False:
- self.error(u"未聚焦到根节点上,退出")
- 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
- # 到达目标option后,进入value表;
- self.info(u"进入value表")
- opa.enterNode()
- # 遍历到value节点中;
- if self.__move2TargetNode(opa, True)[0] is False:
- if self.__move2TargetNode(opa, False)[0] is False:
- self.__back2Home(opa)
- return False
- # 找到value节点,设置值;
- self.info(u"设置value值:一般只适用于Number类型或Input类型,不适合选择类型。但都必须调用,因为里面有enterkey操作")
- opa.setOptionValue()
- # 返回主页;
- self.__back2Home(opa)
- '''
- 函数:移动到目标option后,读取该option的value值,与optionValue进行比较,相等表示检测值与目标值一致;
- 参数:
- optionName 要设置的option;
- optionValue option要设置的值;
- 返回: Boolean。
- '''
- def checkOptionValue(self, optionName, optionValue):
- self.info(u"【%s】【%s】" % (optionName, optionValue))
- CMenuLogic.sourceInput.setPattern(11)
- opa = COptionAction(optionName, optionValue, self.__optionConfig, self.__optionExcel)
- # 检测路径是否有效;
- if opa.checkRunOptionPath() is False:
- self.__back2Home(opa)
- return False
- # 首先,调用根菜单;
- opa.callFirstOptionShortCutKey()
- time.sleep(1)
- if opa.isOnFirstOption() is False:
- self.error(u"未聚焦到根节点上,退出")
- 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
- # 到达目标option后,进入value表;
- self.info(u"进入value表")
- opa.enterNode()
- isValueEqual = False
- # 获取value节点值;
- valueFocus, valueText = opa.isOnTargetNode()
- self.info(u"===当前捕获的文本内容=%s,目标文本=%s,状态:%d===" % (str(valueText), str(optionValue), valueFocus))
- # 如果是数值,则判断获取的值是否相等;否则,只判断是否聚焦.
- if type(optionValue) == int or type(optionValue) == float:
- isValueEqual = True if float(optionValue) == float(valueText) else False
- else:
- isValueEqual = valueFocus
- # 因为只是查看值,没有设置值,所以需要再手动返回一层。
- opa.back2ParentNode(False)
- # 返回主页;
- self.__back2Home(opa)
- # 聚焦状态就是结果;
- self.info(u"checkOptionValue结果:optionValue=%s, ocrValue=%s, 结果=%d" % (str(optionValue), str(valueText), isValueEqual))
- return isValueEqual
- if __name__ == "__main__":
- ml = CMenuLogic()
- if 0:
- ml.setOptionValue('picture_preset', 'personal')
- time.sleep(2)
- ml.setOptionValue('picture_preset', 'dynamic')
- time.sleep(2)
- ml.setOptionValue('picture_preset', 'stadium')
- time.sleep(2)
- ml.setOptionValue('picture_preset', 'standard')
- time.sleep(2)
- ml.setOptionValue('picture_preset', 'natural')
- time.sleep(2)
- ml.setOptionValue('picture_preset', 'movie')
- if 1:
- value = random.randint(0, 100)
- ml.setOptionValue('backlight', value)
- time.sleep(8)
- ml.checkOptionValue('backlight', value + 10)
- time.sleep(8)
- ml.checkOptionValue('backlight', value)
- time.sleep(8)
- ml.checkOptionValue('backlight', value+20)
- # time.sleep(2)
- # ml.setOptionValue('brightness', value)
- # time.sleep(2)
- # ml.setOptionValue('contrast', value)
- # time.sleep(2)
- # ml.setOptionValue('saturation', value)
- # time.sleep(2)
- # ml.setOptionValue('tint', value)
- # time.sleep(2)
- # ml.setOptionValue('sharpness', value)
- if 0:
- ml.setOptionValue('picture_preset', 'stadium')
- time.sleep(5)
- print "personal", ml.checkOptionValue('picture_preset', 'personal')
- time.sleep(8)
- print "dynamic", ml.checkOptionValue('picture_preset', 'dynamic')
- time.sleep(8)
- print "stadium", ml.checkOptionValue('picture_preset', 'stadium')
- time.sleep(8)
- print "standard", ml.checkOptionValue('picture_preset', 'standard')
- time.sleep(8)
- print "natural", ml.checkOptionValue('picture_preset', 'natural')
- time.sleep(8)
- print "movie", ml.checkOptionValue('picture_preset', 'movie')
|