|
@@ -55,7 +55,6 @@ class COptionAction(CBaseLog):
|
|
|
# 图片切割对象
|
|
|
__imgCMP = ImageCMP()
|
|
|
|
|
|
-
|
|
|
def __init__(self, optionName, optionValue, optionConfig, optionExcel):
|
|
|
CBaseLog.__init__(self)
|
|
|
# 层级位置;
|
|
@@ -102,9 +101,9 @@ class COptionAction(CBaseLog):
|
|
|
return self.__optionValueText
|
|
|
|
|
|
'''
|
|
|
- 函数:截图;
|
|
|
+ 函数:截图并返回截图路径;
|
|
|
参数:无
|
|
|
- 返回:无
|
|
|
+ 返回:截图路径;
|
|
|
'''
|
|
|
def takePicture(self):
|
|
|
img = os.path.join(getSATTmpDIR(), "menutree_runpath.png")
|
|
@@ -115,8 +114,8 @@ class COptionAction(CBaseLog):
|
|
|
|
|
|
'''
|
|
|
函数:调用根节点快捷键(中间节点不需要快捷键;);
|
|
|
- 参数:
|
|
|
- 返回:
|
|
|
+ 参数:无
|
|
|
+ 返回:无
|
|
|
'''
|
|
|
|
|
|
def callFirstOptionShortCutKey(self):
|
|
@@ -127,9 +126,10 @@ class COptionAction(CBaseLog):
|
|
|
self.warn(u"表格没有shortcut_key字段,执行默认的parent按键:%s" % self.__optionPaths['First']['parent'])
|
|
|
|
|
|
'''
|
|
|
- 函数:调用当前结点的toparent_key
|
|
|
+ 函数:调用当前结点的toparent_key(叫back_key会简单点)
|
|
|
参数:
|
|
|
- 返回:
|
|
|
+ curOptionName 当前层级的目标节点.
|
|
|
+ 返回:无
|
|
|
'''
|
|
|
|
|
|
def callCurOptionBackKey(self, curOptionName):
|
|
@@ -142,12 +142,9 @@ class COptionAction(CBaseLog):
|
|
|
|
|
|
'''
|
|
|
函数:是否在父节点菜单上。一般在执行了callFirstOptionShortCutKey后调用;
|
|
|
- 参数:
|
|
|
- 返回:
|
|
|
+ 参数:无
|
|
|
+ 返回:Boolean, 数组(坐标)。 如:True, [0,0,1920,1080]
|
|
|
注意:由于所有父节点上的子项都共用一个图片定位参数,所以只要随意一个父节点的子项option即可获取定位参数;
|
|
|
- 示例:
|
|
|
-
|
|
|
-
|
|
|
测试:。
|
|
|
'''
|
|
|
|
|
@@ -161,11 +158,9 @@ class COptionAction(CBaseLog):
|
|
|
每次移动到下一目标节点(option)上时,self.__pos + 1,表示移动到下一层路径。
|
|
|
当self.__pos >= self.__optionPaths.__len__()时,表示到达value表格;
|
|
|
所以,该类的重点在self.__pos的移动;
|
|
|
- 参数:
|
|
|
+ 参数:无
|
|
|
返回:Boolean, 识别的文本/数字;
|
|
|
示例:
|
|
|
-
|
|
|
- 测试:。
|
|
|
'''
|
|
|
|
|
|
def isOnTargetNode(self):
|
|
@@ -230,7 +225,7 @@ class COptionAction(CBaseLog):
|
|
|
|
|
|
'''
|
|
|
函数:是否移到目标节点上(在isOnOption后,判断__pos位置是否在__paths最后);
|
|
|
- 参数:
|
|
|
+ 参数:无
|
|
|
返回:Boolean.
|
|
|
|
|
|
'''
|
|
@@ -301,7 +296,9 @@ class COptionAction(CBaseLog):
|
|
|
|
|
|
'''
|
|
|
函数:返回到父节点
|
|
|
- 参数:无
|
|
|
+ 参数:
|
|
|
+ isReduce 是否需要自减层级。
|
|
|
+ 一般用于value节点返回时,才需要用到该参数(如果value节点设置值后,不是自动返回,要设置False)。
|
|
|
返回:无
|
|
|
|
|
|
注意:
|
|
@@ -311,7 +308,7 @@ class COptionAction(CBaseLog):
|
|
|
如果不截图,可以不考虑sendKey的等待时间.
|
|
|
'''
|
|
|
|
|
|
- def back2ParentNode(self):
|
|
|
+ def back2ParentNode(self, isReduce=True):
|
|
|
# 获取当前option信息;
|
|
|
if self.getCurOptionInfo():
|
|
|
backKey = self.__curOptionInfo['back_key']
|
|
@@ -323,7 +320,8 @@ class COptionAction(CBaseLog):
|
|
|
else:
|
|
|
self.sendKey(backKey, 1, 1)
|
|
|
# 返回,自减;
|
|
|
- self.__pos -= 1
|
|
|
+ if isReduce:
|
|
|
+ self.__pos -= 1
|
|
|
|
|
|
'''
|
|
|
函数:进入当前节点,只对路径节点有效,value节点不处理;
|
|
@@ -367,13 +365,14 @@ class COptionAction(CBaseLog):
|
|
|
|
|
|
'''
|
|
|
函数:设置目标option的值, 只设置数值型value和输入型value(选择型value不需要此步骤).
|
|
|
- 参数:
|
|
|
- 返回:
|
|
|
+ 参数:无
|
|
|
+ 返回:无
|
|
|
|
|
|
注意:此函数必须是已聚焦在目标value节点上,否则无效。
|
|
|
重要:
|
|
|
在此函数enter后,UI是否返回到上一层父节点上,还是停留在本层节点不返回。
|
|
|
建议在excel中配置这个关键信息,以便此函数可以正确更改self.__pos的值。
|
|
|
+
|
|
|
'''
|
|
|
|
|
|
def setOptionValue(self):
|
|
@@ -394,11 +393,18 @@ class COptionAction(CBaseLog):
|
|
|
# 是否有按键延时值;
|
|
|
duration = float(others['duration']) if "duration" in others else 0.1
|
|
|
|
|
|
+ # 值类型:
|
|
|
+ # 0 表示默认选择类型.
|
|
|
+ # 1 表示输入类型(有些输入完了,正确值会自动进入).
|
|
|
+ # 2 表示进度条数据型.
|
|
|
+ valueType = 0
|
|
|
# 是否为数字文本(特指:range(0, 100));
|
|
|
isNumberText = self.isNumberText(valueText)
|
|
|
# 数值型value;
|
|
|
if isNumberText:
|
|
|
if moveKey[0] == 'input':
|
|
|
+ # 标记值类型;
|
|
|
+ valueType = 1
|
|
|
# 将数值转成字符;
|
|
|
optionValue = self.__optionValue
|
|
|
if type(optionValue) == int or type(optionValue) == float:
|
|
@@ -407,23 +413,46 @@ class COptionAction(CBaseLog):
|
|
|
chList = list(optionValue)
|
|
|
self.sendKey(chList, 1, duration)
|
|
|
else:
|
|
|
+ # 标记值类型;
|
|
|
+ valueType = 2
|
|
|
# 相差值;
|
|
|
num = int(self.__optionValue) - int(self.__optionValueText)
|
|
|
# 正->往右或下,负->往左或上;
|
|
|
self.sendKey(moveKey[1] if num > 0 else moveKey[0], abs(num), duration)
|
|
|
elif moveKey[0] == 'input':
|
|
|
+ # 标记值类型;
|
|
|
+ valueType = 1
|
|
|
# 将字符转成list;
|
|
|
chList = list(self.__optionValue)
|
|
|
self.sendKey(chList, 1, duration)
|
|
|
|
|
|
# 最后,如果有进入键执行;
|
|
|
if enterKey != 'default':
|
|
|
+ self.info(u"value节点具有enter key")
|
|
|
self.sendKey(enterKey, 1, 0.1)
|
|
|
-
|
|
|
- '''
|
|
|
- 函数:
|
|
|
- 参数:
|
|
|
- 返回:
|
|
|
+ # enter之后,可能会返回上层菜单,也可能不返回.
|
|
|
+ # if autoBackFlag is False:
|
|
|
+ # self.back2ParentNode(False)
|
|
|
+ else:
|
|
|
+ if valueType == 0:
|
|
|
+ # 如果是选择型数据,没有enter键;
|
|
|
+ self.back2ParentNode(False)
|
|
|
+ elif valueType == 1:
|
|
|
+ pass
|
|
|
+ # 如果是输入型数据,没有enter键;
|
|
|
+ # 可能输入后,自动进入。需要根据autoBackFlag来判断;
|
|
|
+ # if autoBackFlag is False:
|
|
|
+ # self.back2ParentNode(False)
|
|
|
+ # else:
|
|
|
+ # self.__pos -= 1
|
|
|
+ elif valueType == 2:
|
|
|
+ # 如果是进度条数据,没有enter键;
|
|
|
+ self.back2ParentNode(False)
|
|
|
+
|
|
|
+ '''
|
|
|
+ 函数:获取当前层级的目标option详细信息.
|
|
|
+ 参数:无
|
|
|
+ 返回:Boolean, 获取成功返回True
|
|
|
'''
|
|
|
|
|
|
def getCurOptionInfo(self):
|
|
@@ -447,8 +476,8 @@ class COptionAction(CBaseLog):
|
|
|
|
|
|
'''
|
|
|
函数:检测路径是否有效;
|
|
|
- 参数:
|
|
|
- 返回:Boolean
|
|
|
+ 参数:无
|
|
|
+ 返回:Boolean, 检测正常返回True
|
|
|
'''
|
|
|
def checkRunOptionPath(self):
|
|
|
outData = self.__optionExcel.checkOptionPaths(self.__optionPaths)
|
|
@@ -463,9 +492,10 @@ class COptionAction(CBaseLog):
|
|
|
return True
|
|
|
|
|
|
'''
|
|
|
- 函数:
|
|
|
+ 函数:指定的value_for_ocr或option_for_ocr数组是否为range(xx,xx)类型。
|
|
|
参数:
|
|
|
- 返回:
|
|
|
+ textList value_for_ocr或option_for_ocr数组
|
|
|
+ 返回:Boolean, 如果是range(xx,xx)类型返回True.
|
|
|
'''
|
|
|
def isNumberText(self, textList):
|
|
|
# 是否获取数值文本;
|
|
@@ -481,11 +511,9 @@ class COptionAction(CBaseLog):
|
|
|
|
|
|
'''
|
|
|
函数:获取静态图片文本内容
|
|
|
- 参数:
|
|
|
+ 参数:(略,请看调用函数)
|
|
|
注意:
|
|
|
- 返回:Boolean、文本识别内容
|
|
|
-
|
|
|
- 测试:。
|
|
|
+ 返回:Boolean、文本识别内容。成功识别出文本,返回True及文本内容。
|
|
|
'''
|
|
|
|
|
|
def __getStaticPicText(self, pic, optionName, optionTextList, siblingTextList, ocrConfigList, ocrThreshold,
|
|
@@ -578,8 +606,9 @@ class COptionAction(CBaseLog):
|
|
|
|
|
|
'''
|
|
|
函数:获取动态图片文本内容
|
|
|
- 参数:
|
|
|
- 返回:返回:Boolean、文本识别内容
|
|
|
+ 参数:(略,请看调用函数)
|
|
|
+ 注意:
|
|
|
+ 返回:Boolean、文本识别内容。成功识别出文本,返回True及文本内容。
|
|
|
'''
|
|
|
|
|
|
def __getDynamicPicText(self, optionName, optionTextList, siblingTextList, ocrConfigList, ocrThreshold, marqueeDict,
|
|
@@ -664,15 +693,21 @@ class COptionAction(CBaseLog):
|
|
|
return False, 0 if isNumberText else None
|
|
|
|
|
|
'''
|
|
|
- 函数:
|
|
|
+ 函数:获取option名称数组内所有option的详细信息.
|
|
|
参数:
|
|
|
- 返回:
|
|
|
+ optionNameList option名称数组。
|
|
|
+ 返回:字典。
|
|
|
+ {
|
|
|
+ "option1": {self.__optionExcel.getOptionInfo(option1)[1]},
|
|
|
+ "option2": {self.__optionExcel.getOptionInfo(option2)[1]},
|
|
|
+ "option3": {self.__optionExcel.getOptionInfo(option3)[1]},
|
|
|
+ }
|
|
|
'''
|
|
|
|
|
|
def __getOptionInfoDict(self, optionNameList):
|
|
|
OptionInfoDict = {}
|
|
|
for optionName in optionNameList:
|
|
|
- found, optionDict = self.__optionExcel(optionName)
|
|
|
+ found, optionDict = self.__optionExcel.getOptionInfo(optionName)
|
|
|
if found:
|
|
|
OptionInfoDict[optionName] = optionDict
|
|
|
# endif
|
|
@@ -682,6 +717,9 @@ class COptionAction(CBaseLog):
|
|
|
'''
|
|
|
函数:找到两个字符串左边或者右边相同的部分
|
|
|
参数:
|
|
|
+ str1:
|
|
|
+ str2:
|
|
|
+ direction 方向,默认为right
|
|
|
返回:
|
|
|
'''
|
|
|
|
|
@@ -710,6 +748,7 @@ class COptionAction(CBaseLog):
|
|
|
'''
|
|
|
函数:去掉字符串数组中每个字符串 左边或右边相同的部分
|
|
|
参数:
|
|
|
+ strList
|
|
|
返回:
|
|
|
'''
|
|
|
|