def test_adb_cmd_server_host(self): adb = Adb(adb_server_host="localhost", adb_server_port=5037) adb.adb = MagicMock() adb.adb.return_value = "adb" adb.device_serial = MagicMock() adb.device_serial.return_value = "ANDROID_SERIAL" args = ["a", "b", "c"] with patch("subprocess.Popen") as Popen: os.name = "nt" adb.raw_cmd(*args) Popen.assert_called_once_with([adb.adb()] + args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) adb = Adb(adb_server_host="test.com", adb_server_port=1000) adb.adb = MagicMock() adb.adb.return_value = "adb" adb.device_serial = MagicMock() adb.device_serial.return_value = "ANDROID_SERIAL" args = ["a", "b", "c"] with patch("subprocess.Popen") as Popen: os.name = "posix" adb.raw_cmd(*args) Popen.assert_called_once_with([ " ".join([adb.adb()] + ["-H", "test.com", "-P", "1000"] + args) ], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def test_adb_from_find(self): with patch.dict('os.environ', {}, clear=True): with patch("distutils.spawn.find_executable") as find_executable: find_executable.return_value = "/usr/bin/adb" with patch("os.path.realpath") as realpath: realpath.return_value = "/home/user/android/platform-tools/adb" self.assertEqual(realpath.return_value, Adb().adb()) find_executable.assert_called_once_with("adb") # find_exectable should be called once realpath.assert_called_once_with(find_executable.return_value) realpath.return_value = find_executable.return_value self.assertEqual(find_executable.return_value, Adb().adb()) find_executable.return_value = None call_count = find_executable.call_count with self.assertRaises(EnvironmentError): Adb().adb() self.assertEqual(call_count + 1, find_executable.call_count)
def test_devices(self): adb = Adb() adb.raw_cmd = MagicMock() adb.raw_cmd.return_value.communicate.return_value = ( b"List of devices attached \r\n014E05DE0F02000E\tdevice\r\n489328DKFL7DF\tdevice", b"") self.assertEqual(adb.devices(), { "014E05DE0F02000E": "device", "489328DKFL7DF": "device" }) adb.raw_cmd.assert_called_once_with("devices") adb.raw_cmd.return_value.communicate.return_value = ( b"List of devices attached \n\r014E05DE0F02000E\tdevice\n\r489328DKFL7DF\tdevice", b"") self.assertEqual(adb.devices(), { "014E05DE0F02000E": "device", "489328DKFL7DF": "device" }) adb.raw_cmd.return_value.communicate.return_value = ( b"List of devices attached \r014E05DE0F02000E\tdevice\r489328DKFL7DF\tdevice", b"") self.assertEqual(adb.devices(), { "014E05DE0F02000E": "device", "489328DKFL7DF": "device" }) adb.raw_cmd.return_value.communicate.return_value = ( b"List of devices attached \n014E05DE0F02000E\tdevice\n489328DKFL7DF\tdevice", b"") self.assertEqual(adb.devices(), { "014E05DE0F02000E": "device", "489328DKFL7DF": "device" }) adb.raw_cmd.return_value.communicate.return_value = (b"not match", "") with self.assertRaises(EnvironmentError): adb.devices()
def test_adb_cmd(self): adb = Adb() adb.device_serial = MagicMock() adb.device_serial.return_value = "ANDROID_SERIAL" adb.raw_cmd = MagicMock() args = ["a", "b", "c"] adb.cmd(*args) adb.raw_cmd.assert_called_once_with("-s", "'%s'" % adb.device_serial(), *args)
def test_serial(self): serial = "abcdef1234567890" adb = Adb(serial) self.assertEqual(adb.default_serial, serial) adb.devices = MagicMock() adb.devices.return_value = [serial, "123456"] self.assertEqual(adb.device_serial(), serial)
def test_forward_list(self): adb = Adb() os.name = 'posix' adb.raw_cmd = MagicMock() adb.raw_cmd.return_value.communicate.return_value = (b"014E05DE0F02000E tcp:9008 tcp:9008\r\n489328DKFL7DF tcp:9008 tcp:9008", b"") self.assertEqual(adb.forward_list(), [['014E05DE0F02000E', 'tcp:9008', 'tcp:9008'], ['489328DKFL7DF', 'tcp:9008', 'tcp:9008']]) os.name = 'nt' self.assertEqual(adb.forward_list(), [])
def __init__(self): ''' Constructor ''' self.instAdb = Adb() self.devSerialNoms = self.instAdb.devices().keys() self.devcount = len(self.devSerialNoms) self.devSerial = self.instAdb.device_serial()
def check_current_activity(self, activity_name): ret = Adb().shell('dumpsys activity |grep mFocusedActivity') ret = str(ret).strip().replace("\n", "").replace("\r", "") self.logger.info("get current activity name: %s" % str(ret)) if activity_name in str(ret): result = True else: result = False return result
def __init__(self, serial=None): """ """ logger.info('<p>Device=%s>' % serial, html=True) print '<p>Device=%s>' % serial self._result = '' self.starttime = 0 self.d = Device(serial) self.adb = Adb(serial) self.debug = 'True'
def test_adb_cmd_server_host(self): adb = Adb(adb_server_host="localhost", adb_server_port=5037) adb.device_serial = MagicMock() adb.device_serial.return_value = "ANDROID_SERIAL" adb.raw_cmd = MagicMock() args = ["a", "b", "c"] adb.cmd(*args) adb.raw_cmd.assert_called_once_with("-H", "localhost", "-P", "5037", "-s", "%s" % adb.device_serial(), *args) adb = Adb(adb_server_host="localhost") adb.device_serial = MagicMock() adb.device_serial.return_value = "ANDROID_SERIAL" adb.raw_cmd = MagicMock() args = ["a", "b", "c"] adb.cmd(*args) adb.raw_cmd.assert_called_once_with("-H", "localhost", "-s", "%s" % adb.device_serial(), *args)
def test_forward_list(self): adb = Adb() adb.version = MagicMock() adb.version.return_value = ['1.0.31', '1', '0', '31'] adb.raw_cmd = MagicMock() adb.raw_cmd.return_value.communicate.return_value = (b"014E05DE0F02000E tcp:9008 tcp:9008\r\n489328DKFL7DF tcp:9008 tcp:9008", b"") self.assertEqual(adb.forward_list(), [['014E05DE0F02000E', 'tcp:9008', 'tcp:9008'], ['489328DKFL7DF', 'tcp:9008', 'tcp:9008']]) adb.version.return_value = ['1.0.29', '1', '0', '29'] with self.assertRaises(EnvironmentError): adb.forward_list()
def dismiss_soft_keyboard(self): """ Used to dismiss the soft keyboard on the screen """ time.sleep(1) if "mInputShown=true" in \ Adb(self._device.retrieve_serial_number()).cmd("shell dumpsys input_method").communicate()[ 0].decode("utf-8"): self.d.press.back() time.sleep(1)
def test_device_serial(self): with patch.dict('os.environ', {'ANDROID_SERIAL': "ABCDEF123456"}): adb = Adb() adb.devices = MagicMock() adb.devices.return_value = {"ABCDEF123456": "device"} self.assertEqual(adb.device_serial(), "ABCDEF123456") with patch.dict('os.environ', {'ANDROID_SERIAL': "ABCDEF123456"}): adb = Adb() adb.devices = MagicMock() adb.devices.return_value = {"ABCDEF123456": "device", "123456ABCDEF": "device"} self.assertEqual(adb.device_serial(), "ABCDEF123456") with patch.dict('os.environ', {'ANDROID_SERIAL': "HIJKLMN098765"}): adb = Adb() adb.devices = MagicMock() adb.devices.return_value = {"ABCDEF123456": "device", "123456ABCDEF": "device"} with self.assertRaises(EnvironmentError): adb.device_serial() with patch.dict('os.environ', {}, clear=True): adb = Adb() adb.devices = MagicMock() adb.devices.return_value = {"ABCDEF123456": "device", "123456ABCDEF": "device"} with self.assertRaises(EnvironmentError): adb.device_serial() with patch.dict('os.environ', {}, clear=True): adb = Adb() adb.devices = MagicMock() adb.devices.return_value = {"ABCDEF123456": "device"} print(adb.devices()) self.assertEqual(adb.device_serial(), "ABCDEF123456") with self.assertRaises(EnvironmentError): adb = Adb() adb.devices = MagicMock() adb.devices.return_value = {} adb.device_serial()
def test_adb_from_env(self): home_dir = '/android/home' with patch.dict('os.environ', {'ANDROID_HOME': home_dir}): with patch('os.path.exists') as exists: exists.return_value = True os.name = "posix" # linux adb_obj = Adb() adb_path = os.path.join(home_dir, "platform-tools", "adb") self.assertEqual(adb_obj.adb(), adb_path) exists.assert_called_once_with(adb_path) self.assertEqual(adb_obj.adb(), adb_path) exists.assert_called_once_with(adb_path) # the second call will return the __adb_cmd directly os.name = "nt" # linux adb_obj = Adb() adb_path = os.path.join(home_dir, "platform-tools", "adb.exe") self.assertEqual(adb_obj.adb(), adb_path) exists.return_value = False with self.assertRaises(EnvironmentError): Adb().adb()
def test_adb_raw_cmd(self): import subprocess adb = Adb() adb.adb = MagicMock() adb.adb.return_value = "adb" args = ["a", "b", "c"] with patch("subprocess.Popen") as Popen: os.name = "posix" adb.raw_cmd(*args) Popen.assert_called_once_with(["%s %s" % (adb.adb(), " ".join(args))], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) with patch("subprocess.Popen") as Popen: os.name = "nt" adb.raw_cmd(*args) Popen.assert_called_once_with([adb.adb()] + list(args), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def __init__(self, **kwargs): adb_step.__init__(self, **kwargs) # parse kwargs if "timeout" in kwargs: self.timeout = kwargs["timeout"] else: self.timeout = 10000 if "serial" in kwargs: self.serial = kwargs["serial"] else: self.serial = None if "no_log" in kwargs: self.no_log = kwargs["no_log"] else: self.no_log = False # constants for pass and error messages if self.serial: self._PASSM = "[ {} ] ".format( self.serial) + self.__class__.__name__ + " - [PASSED]" self._ERRORM = "[ {} ] ".format( self.serial) + self.__class__.__name__ + " - [FAILED]" else: self._PASSM = self.__class__.__name__ + " - [PASSED]" self._ERRORM = self.__class__.__name__ + " - [FAILED]" # defaults pass and error messages self.passm = self._PASSM self.errorm = self._ERRORM # replacing old uidevice available in testlib/external with standard # uiautomator device class self.uidevice = Device(serial=self.serial) # initialize adb connection with below to have backward compatibility self.adb_connection = Adb(serial=self.serial) # Add Common ADB API to use instead of above hereafter self.adb_connection_common = connection_adb(**kwargs) if "version" in kwargs: self.version = kwargs["version"] else: self.version = self.adb_connection_common.get_prop( 'ro.build.version.release')
def __init__(self, serial=None, local_port=None): self.uiautomator_process = None self.adb = Adb(serial=serial) self.device_port = 9008 if local_port: self.local_port = local_port else: try: # first we will try to use the local port already adb forwarded for s, lp, rp in self.adb.forward_list(): if s == self.adb.device_serial( ) and rp == 'tcp:%d' % self.device_port: self.local_port = int(lp[4:]) break else: self.local_port = next_local_port() except: self.local_port = next_local_port()
def initWifiADB(self): ''' 通过wifi方式建立adb连接,避免了通过usb连接adb繁琐的设置以及无法使用user版本 环境:PC与车机同一个局域网 adb.exe需要同一个进程调用,不然会被打断,所以统一用uiautomator方法初始化 ''' adb = Adb() try: line = adb.raw_cmd("connect", self.get_conf_value("deviceIPaddress").strip()+":5578").communicate()[0].decode("utf-8") if "connected to" in line: return True else: raise Exception('Connect to adb fail via wifi ') except IOError as e: return False
def set_serial(self, serial): """Specify given *serial* device to perform test. or export ANDROID_SERIAL=CXFS42343 if you have many devices connected but you don't use this interface When you need to use multiple devices, do not use this keyword to switch between devices in test execution. And set the serial to each library. Using different library name when importing this library according to http://robotframework.googlecode.com/hg/doc/userguide/RobotFrameworkUserGuide.html?r=2.8.5. Examples: | Setting | Value | Value | Value | | Library | UiTestLib | WITH NAME | Mobile1 | | Library | UiTestLib | WITH NAME | Mobile2 | And set the serial to each library. | Test Case | Action | Argument | | Multiple Devices | Mobile1.Set Serial | device_1's serial | | | Mobile2.Set Serial | device_2's serial | """ self.d = Device(serial) self.adb = Adb(serial)
''' Created on 2015. 10. 22. @author: User ''' import os, sys from Libs import ClsActivity as CLS from uiautomator import Device, Adb, AutomatorDevice from Libs import SaveToLog as saveLog from Libs import ModelInfo import Libs.ClsKeyCode instAdb=Adb() devSerials= instAdb.devices().keys() print(type(devSerials)) osType = sys.platform sndLog = saveLog() #sndLog = CLS("test", "test") if len(devSerials) == 1: devSerials = instAdb.device_serial() mstrDevice = Device(devSerials) mstrInfo = mstrDevice.info else: mstrDevSerial, slavDevSerial = devSerials mstrDevice = Device(mstrDevSerial) slvDevice = Device(slavDevSerial)
def test_forward(self): adb = Adb() adb.cmd = MagicMock() adb.forward(90, 91) adb.cmd.assert_called_once_with("forward", "tcp:90", "tcp:91") adb.cmd.return_value.wait.assert_called_once_with()
def allDevices(): devices = Adb().devices().keys() return devices