tv_operator.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. # -*- coding:utf-8 -*-
  2. import os, sys, time
  3. # from ssat_sdk import getIsSendKeyTakePicture
  4. from ssat_sdk.device_manage.capturecard_manager import CCardManager
  5. from ssat_sdk.sat_environment import getIsSendKeyTakePicture, getIsSendKeyTakePictureTester
  6. from ssat_sdk.utils import LoggingUtil
  7. from ssat_sdk.device_manage import RedRatHub3
  8. from ssat_sdk.device_manage import RedRatHub4
  9. from ssat_sdk.uiautomator2.adb_keyevent import AdbKeyevent
  10. from ssat_sdk.utils import string_util
  11. from ssat_sdk.sat_environment import getRCUDeviceSelected
  12. # 导入测试精灵;
  13. #from ssat_sdk.device_manage.testWizardClient import TestWizardClient
  14. from ssat_sdk.device_manage import testWizardClient
  15. Operator_Device = "redrat2"
  16. if "redrat" == Operator_Device.lower():
  17. from TST.Remote import *
  18. class TvOperator():
  19. def __init__(self,isReStart = False):
  20. rcuDevice = getRCUDeviceSelected()
  21. if "redrat" == rcuDevice:
  22. self.operator = Remote()
  23. LoggingUtil.printLog(u"初始化TvOperator(深圳redrat3)")
  24. elif "redrat3" == rcuDevice or "redrat4" == rcuDevice:
  25. if isReStart:
  26. print u"重启红老鼠连接"
  27. self.operator = RedRatHub4.RedRat4()
  28. else:
  29. self.operator = RedRatHub4.redrat4_singleton
  30. LoggingUtil.printLog(u"初始化TvOperator(redrat3)")
  31. elif "tw" == rcuDevice:
  32. print u"当前红外设备:测试精灵"
  33. self.operator = testWizardClient.tw_singleton
  34. self.adbEvent = AdbKeyevent()
  35. # 创建视频采集对象
  36. self.ccard = CCardManager()
  37. '''
  38. 切换按键设备:deviceType:redrat2 代表红老鼠,adb 代表android adb keyevent机制。
  39. '''
  40. def setDeviceType(self, deviceType):
  41. if string_util.strcmp("redrat", deviceType):
  42. self.operator = Remote()
  43. LoggingUtil.printLog(u"初始化TvOperator(深圳redrat3)")
  44. elif string_util.strcmp("redrat2", deviceType):
  45. # self.operator = RedRatHub3.RedRat3()
  46. self.operator = RedRatHub3.redrat3_singleton
  47. LoggingUtil.printLog(u"初始化TvOperator(redrat3)")
  48. elif string_util.strcmp("adb", deviceType):
  49. self.operator = self.adbEvent
  50. elif string_util.strcmp("tw", deviceType):
  51. self.operator = testWizardClient.tw_singleton
  52. def sendKey(self, keyName, times=1, duration=1):
  53. try:
  54. self.operator.sendKey(keyName, times, duration)
  55. except Exception, e:
  56. LoggingUtil.sendKey(keyName, False)
  57. return False
  58. # 如果按键截图开关打开时,进行截图并打印出截图信息
  59. if getIsSendKeyTakePicture() == "True" and getIsSendKeyTakePictureTester() == "True":
  60. CaseRunLogDirPath = LoggingUtil.getCaseRunLogDirPath()
  61. sendKeyTakePictureName = self.currentTime() + "_sendkey_takepicture.png"
  62. sendKeyTakePicturePath = os.path.join(CaseRunLogDirPath, sendKeyTakePictureName)
  63. self.ccard.takePicture(sendKeyTakePicturePath)
  64. LoggingUtil.printLog(
  65. u"执行sendKey!keyname:%s times:%s duration:%s 执行后截图:%s" % (
  66. str(keyName), str(times), str(duration), str(sendKeyTakePicturePath)))
  67. # LoggingUtil.printLog(u"按键执行后的截图:%s" % str(sendKeyTakePicturePath))
  68. else:
  69. try:
  70. LoggingUtil.printLog(
  71. u"执行sendKey!keyname:%s times:%s duration:%s" % (str(keyName), str(times), str(duration)))
  72. except Exception, e:
  73. LoggingUtil.printLog("Error:sendKey print Error")
  74. return True
  75. def currentTime(self):
  76. return time.strftime('%Y-%m-%d_%H_%M_%S', time.localtime(time.time()))
  77. def loadSignalDataSet(self, file):
  78. self.operator.loadSignalDataSet(file)
  79. def addSignalDataSet(self, file):
  80. self.operator.addSignalDataSet(file)
  81. '''
  82. 发送连续按键,最后一个参数可以是按键,也可以是按键间隔时间,单位s。
  83. '''
  84. def sendKeys(self, *keyList):
  85. endKey = keyList[keyList.__len__() - 1]
  86. time = 0.1
  87. keyNames = []
  88. if type(endKey) is float or type(endKey) is int:
  89. time = endKey
  90. keyNames = keyList[0:keyList.__len__() - 1]
  91. else:
  92. keyNames = keyList[0:keyList.__len__()]
  93. # print "sendKey,keyNames:",keyNames,time
  94. self.operator.sendKeys(keyNames, time)
  95. # self.operator.sendKeys(*keyList)
  96. def getDeviceName(self):
  97. return self.operator.getDeviceName()
  98. def getScriptName(self):
  99. return self.operator.getScriptName()
  100. def getKeyName(self):
  101. return self.operator.getKeyName()
  102. def close(self):
  103. self.operator.close()
  104. def getCurrentDeviceName(self):
  105. return self.getCurrentDeviceName()
  106. '''
  107. 启动android特定界面
  108. :param activity:android activity全称。例如:"com.google.android.tvlauncher/.inputs.InputsPanelActivity"
  109. :return 返回启动界面结果,True成功,False失败。
  110. '''
  111. def startActivity(self, activity):
  112. return self.adbEvent.startActivity(activity)
  113. '''
  114. 执行android shell下的指令,例如: ls
  115. '''
  116. def excuteShell(self, command):
  117. return self.adbEvent.excuteShell(command)
  118. '''
  119. 执行windows cmd的指令,例如:dir
  120. '''
  121. def excuteCmd(self, cmd):
  122. self.adbEvent.excuteCmd(cmd)
  123. if __name__ == "__main__":
  124. operator = TvOperator()
  125. # operator.setDeviceType("adb")
  126. operator.sendKeys("left", "right", "down", "down", 2)
  127. # operator.sendKeys("up","up")