def __init__(self, serialno=None, **kwargs): """Initial AndroidDevice Args: serialno: string specify which device Returns: AndroidDevice object Raises: EnvironmentError """ self.__display = None serialno = serialno or getenvs('ATX_ADB_SERIALNO', 'ANDROID_SERIAL') self._host = kwargs.get('host') or getenvs( 'ATX_ADB_HOST', 'ANDROID_ADB_SERVER_HOST') or '127.0.0.1' self._port = int( kwargs.get('port') or getenvs('ATX_ADB_PORT', 'ANDROID_ADB_SERVER_PORT') or 5037) self._adb_client = adbkit.Client(self._host, self._port) self._adb_device = self._adb_client.device(serialno) self._adb_shell_timeout = 30.0 # max adb shell exec time kwargs['adb_server_host'] = kwargs.pop('host', self._host) kwargs['adb_server_port'] = kwargs.pop('port', self._port) UiaDevice.__init__(self, serialno, **kwargs) DeviceMixin.__init__(self) self._randid = base.id_generator(5) self._uiauto = super( AndroidDevice, self) # also will call DeviceMixin method, not very good self.screen_rotation = None self.screenshot_method = consts.SCREENSHOT_METHOD_AUTO
def main(host=None, port=None, serial=None, scale=1.0, out='screenshot.png', method='minicap'): """ If minicap not avaliable then use uiautomator instead Disable scale for now. Because -s scale is conflict of -s serial """ print('Started screencap') start = time.time() client = adbkit.Client(host=host, port=port) device = client.device(serial) im = device.screenshot(scale=scale) im.save(out) print('Time spend: %.2fs' % (time.time() - start)) print('File saved to "%s"' % out) try: import win32clipboard output = StringIO() im.convert("RGB").save(output, "BMP") data = output.getvalue()[14:] output.close() win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data) win32clipboard.CloseClipboard() print('Copied to clipboard') except: pass # ignore
def main(host=None, port=None, serial=None, scale=1.0, out='screenshot.png', method='minicap'): """ If minicap not avaliable then use uiautomator instead Disable scale for now. Because -s scale is conflict of -s serial """ start = time.time() client = adbkit.Client(host=host, port=port) device = client.device(serial) im = device.screenshot(scale=scale) im.save(out) print 'Time spend: %.2fs' % (time.time() - start) print 'File saved to "%s"' % out
def __init__(self, serial=None, **kwargs): """Initial AndroidDevice Args: serial: string specify which device Returns: AndroidDevice object Raises: EnvironmentError """ self.__display = None serial = serial or getenvs('ATX_ADB_SERIALNO', 'ANDROID_SERIAL') self._host = kwargs.get('host') or getenvs( 'ATX_ADB_HOST', 'ANDROID_ADB_SERVER_HOST') or '127.0.0.1' self._port = int( kwargs.get('port') or getenvs('ATX_ADB_PORT', 'ANDROID_ADB_SERVER_PORT') or 5037) self._adb_client = adbkit.Client(self._host, self._port) self._adb_device = self._adb_client.device(serial) self._adb_shell_timeout = 30.0 # max adb shell exec time kwargs['adb_server_host'] = kwargs.pop('host', self._host) kwargs['adb_server_port'] = kwargs.pop('port', self._port) self._uiauto = UiaDevice(serial, **kwargs) DeviceMixin.__init__(self) self._randid = base.id_generator(5) self.screen_rotation = None self.screenshot_method = consts.SCREENSHOT_METHOD_AUTO # inherts from atx-uiautomator self.swipe = self._uiauto.swipe self.drag = self._uiauto.drag self.press = self._uiauto.press self.long_click = self._uiauto.long_click self.dump = self._uiauto.dump
def __init__(self, serial=None, **kwargs): """Initial AndroidDevice Args: serial (str): serial or wlan ip Returns: AndroidDevice object Raises: EnvironmentError """ self.__display = None serial = serial or getenvs('ATX_ADB_SERIALNO', 'ANDROID_SERIAL') self._host = kwargs.get('host') or getenvs( 'ATX_ADB_HOST', 'ANDROID_ADB_SERVER_HOST') or '127.0.0.1' self._port = int( kwargs.get('port') or getenvs('ATX_ADB_PORT', 'ANDROID_ADB_SERVER_PORT') or 5037) self._adb_client = adbkit.Client(self._host, self._port) self._adb_device = self._adb_client.device(serial) # self._adb_shell_timeout = 30.0 # max adb shell exec time # uiautomator2 self._uiauto = uiautomator2.connect_usb(serial) if not self._uiauto.alive: self._uiauto.healthcheck(unlock=False) DeviceMixin.__init__(self) self._randid = base.id_generator(5) self.screen_rotation = None # inherts from atx-uiautomator self.swipe = self._uiauto.swipe self.drag = self._uiauto.drag self.press = self._uiauto.press self.long_click = self._uiauto.long_click self.dump = self._uiauto.dump_hierarchy
def main(path, serial=None, host=None, port=None, start=False): adb = adbkit.Client(host, port).device( serial) # adbutils.Adb(serial, host, port) # use qiniu paths if __apks.get(path): path = __apks.get(path) if re.match(r'^https?://', path): tmpdir = tempfile.mkdtemp(prefix='atx-install-') log.info("Create temp directory: %s", tmpdir) # FIXME(ssx): will not called when Ctrl+C pressed in windows git-bash atexit.register(clean, tmpdir) urlpath = path target = os.path.join(tmpdir, '_tmp.apk') path = target log.info("Download from: %s", urlpath) utils.http_download(urlpath, target) import atx.apkparse as apkparse manifest = apkparse.parse_apkfile(path) log.info("APK package name: %s", manifest.package_name) log.info("APK main activity: %s", manifest.main_activity) log.info("Push file to android device") adb_pushfile(adb, path, DEFAULT_REMOTE_PATH) log.info("Install ..., will take a few seconds") adb_must_install(adb, DEFAULT_REMOTE_PATH, manifest.package_name) log.info("Remove _tmp.apk") adb_remove(adb, DEFAULT_REMOTE_PATH) if start: log.info("Start app '%s'" % manifest.package_name) adb.raw_cmd('shell', 'am', 'start', '-n', manifest.package_name + '/' + manifest.main_activity).wait() log.info("Success")