tv_operator.py 5.6 KB

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