tv_operator.py 5.5 KB

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