# -*- coding:utf-8 -*- import os, sys, time # from ssat_sdk import getIsSendKeyTakePicture from ssat_sdk.device_manage.capturecard_manager import CCardManager from ssat_sdk.sat_environment import getIsSendKeyTakePicture, getIsSendKeyTakePictureTester from ssat_sdk.utils import LoggingUtil from ssat_sdk.device_manage import RedRatHub3 from ssat_sdk.device_manage import RedRatHub4 from ssat_sdk.uiautomator2.adb_keyevent import AdbKeyevent from ssat_sdk.utils import string_util from ssat_sdk.sat_environment import getRCUDeviceSelected # 导入测试精灵; #from ssat_sdk.device_manage.testWizardClient import TestWizardClient from ssat_sdk.device_manage import testWizardClient Operator_Device = "redrat2" if "redrat" == Operator_Device.lower(): from TST.Remote import * class TvOperator(): def __init__(self,isReStart = False): rcuDevice = getRCUDeviceSelected() if "redrat" == rcuDevice: self.operator = Remote() LoggingUtil.printLog(u"初始化TvOperator(深圳redrat3)") elif "redrat3" == rcuDevice or "redrat4" == rcuDevice: if isReStart: print u"重启红老鼠连接" self.operator = RedRatHub4.RedRat4() else: self.operator = RedRatHub4.redrat4_singleton LoggingUtil.printLog(u"初始化TvOperator(redrat3)") elif "tw" == rcuDevice: print u"当前红外设备:测试精灵" self.operator = testWizardClient.tw_singleton self.adbEvent = AdbKeyevent() # 创建视频采集对象 self.ccard = CCardManager() ''' 切换按键设备:deviceType:redrat2 代表红老鼠,adb 代表android adb keyevent机制。 ''' def setDeviceType(self, deviceType): if string_util.strcmp("redrat", deviceType): self.operator = Remote() LoggingUtil.printLog(u"初始化TvOperator(深圳redrat3)") elif string_util.strcmp("redrat2", deviceType): # self.operator = RedRatHub3.RedRat3() self.operator = RedRatHub3.redrat3_singleton LoggingUtil.printLog(u"初始化TvOperator(redrat3)") elif string_util.strcmp("adb", deviceType): self.operator = self.adbEvent elif string_util.strcmp("tw", deviceType): self.operator = testWizardClient.tw_singleton def sendKey(self, keyName, times=1, duration=1): try: self.operator.sendKey(keyName, times, duration) except Exception, e: LoggingUtil.sendKey(keyName, False) return False # 如果按键截图开关打开时,进行截图并打印出截图信息 if getIsSendKeyTakePicture() == "True" and getIsSendKeyTakePictureTester() == "True": CaseRunLogDirPath = LoggingUtil.getCaseRunLogDirPath() sendKeyTakePictureName = self.currentTime() + "_sendkey_takepicture.png" sendKeyTakePicturePath = os.path.join(CaseRunLogDirPath, sendKeyTakePictureName) self.ccard.takePicture(sendKeyTakePicturePath) LoggingUtil.printLog( u"执行sendKey!keyname:%s times:%s duration:%s 执行后截图:%s" % ( str(keyName), str(times), str(duration), str(sendKeyTakePicturePath))) # LoggingUtil.printLog(u"按键执行后的截图:%s" % str(sendKeyTakePicturePath)) else: try: LoggingUtil.printLog( u"执行sendKey!keyname:%s times:%s duration:%s" % (str(keyName), str(times), str(duration))) except Exception, e: LoggingUtil.printLog("Error:sendKey print Error") return True def currentTime(self): return time.strftime('%Y-%m-%d_%H_%M_%S', time.localtime(time.time())) def loadSignalDataSet(self, file): self.operator.loadSignalDataSet(file) def addSignalDataSet(self, file): self.operator.addSignalDataSet(file) ''' 发送连续按键,最后一个参数可以是按键,也可以是按键间隔时间,单位s。 ''' def sendKeys(self, *keyList): endKey = keyList[keyList.__len__() - 1] time = 0.1 keyNames = [] if type(endKey) is float or type(endKey) is int: time = endKey keyNames = keyList[0:keyList.__len__() - 1] else: keyNames = keyList[0:keyList.__len__()] # print "sendKey,keyNames:",keyNames,time self.operator.sendKeys(keyNames, time) # self.operator.sendKeys(*keyList) def getDeviceName(self): return self.operator.getDeviceName() def getScriptName(self): return self.operator.getScriptName() def getKeyName(self): return self.operator.getKeyName() def close(self): self.operator.close() def getCurrentDeviceName(self): return self.getCurrentDeviceName() ''' 启动android特定界面 :param activity:android activity全称。例如:"com.google.android.tvlauncher/.inputs.InputsPanelActivity" :return 返回启动界面结果,True成功,False失败。 ''' def startActivity(self, activity): return self.adbEvent.startActivity(activity) ''' 执行android shell下的指令,例如: ls ''' def excuteShell(self, command): return self.adbEvent.excuteShell(command) ''' 执行windows cmd的指令,例如:dir ''' def excuteCmd(self, cmd): self.adbEvent.excuteCmd(cmd) if __name__ == "__main__": operator = TvOperator() # operator.setDeviceType("adb") operator.sendKeys("left", "right", "down", "down", 2) # operator.sendKeys("up","up")