Python + ADB
Recentemente, fiz um projeto para efetuar testes em dispositivos Android utilizando a linguagem Python. Esses testes, feitos em celular Samsung conectados via USB a um computador com Windows, onde os dispositivos eram testados utilizando comando chamado adb (Android Debug Bridge).
[ Hits: 8.918 ]
Por: Alisson Machado em 30/03/2017
C:\Users\alisson adb devices List of devices attached 4012e40b device
import subprocess import xml.etree.ElementTree as ET import time def get_devices(): output = subprocess.Popen('adb devices', shell=True, stdout=subprocess.PIPE).communicate()[0] output = str(output).split('attached')[1] output = output.split('device')[0] output = output.replace("\\n", "").replace("\\r", "") output = output.replace("\\t", "") return output def get_screen(serial): output = subprocess.Popen('adb -s %s shell uiautomator dump'%serial,shell=True,stdout=subprocess.PIPE).communicate()[0] print(output) output = subprocess.Popen('adb -s %s pull /storage/sdcard0/window_dump.xml'%serial,shell=True,stdout=subprocess.PIPE).communicate()[0] print(output) def tap_screen(app_name,x,y): print("Abrindo %s"%app_name) output = subprocess.Popen("adb shell input tap %s %s"%(x,y),shell=True,stdout=subprocess.PIPE) time.sleep(5) print("Voltando a tela anterior") output = subprocess.Popen("adb shell input keyevent 4",shell=True,stdout=subprocess.PIPE) def test_app(node,app_name): if node.attrib.get('text') == app_name: position = node.attrib.get('bounds').split(']')[0] position = position.replace("[","").split(",") print("Testando APP") tap_screen(app_name, position[0], position[1]) else: for n in node.findall('node'): test_app(n,app_name) def get_apps(): xml = ET.parse('window_dump.xml') root = xml.getroot() app = test_app(root,'Play Store') device = get_devices() get_screen(device) get_apps()
def get_devices(): output = subprocess.Popen('adb devices', shell=True, stdout=subprocess.PIPE).communicate()[0] output = str(output).split('attached')[1] output = output.split('device')[0] output = output.replace("\\n", "").replace("\\r", "") output = output.replace("\\t", "") return output
def get_screen(serial): output = subprocess.Popen('adb -s %s shell uiautomator dump'%serial,shell=True,stdout=subprocess.PIPE).communicate()[0] print(output) output = subprocess.Popen('adb -s %s pull /storage/sdcard0/window_dump.xml'%serial,shell=True,stdout=subprocess.PIPE).communicate()[0] print(output)
def get_apps(): xml = ET.parse('window_dump.xml') root = xml.getroot() app = test_app(root,'Play Store')
def test_app(node,app_name): if node.attrib.get('text') == app_name: position = node.attrib.get('bounds').split(']')[0] position = position.replace("[","").split(",") print("Testando APP") tap_screen(app_name, position[0], position[1]) else: for n in node.findall('node'): test_app(n,app_name)
def tap_screen(app_name,x,y): print("Abrindo %s"%app_name) output = subprocess.Popen("adb shell input tap %s %s"%(x,y),shell=True,stdout=subprocess.PIPE) time.sleep(5) print("Voltando a tela anterior") output = subprocess.Popen("adb shell input keyevent 4",shell=True,stdout=subprocess.PIPE)
Vault: SSH com OneTimePassword
Sincronizando Dados do PostgreSQL no Elasticsearch
PEP 8 - Guia de estilo para código Python
Varredura de PING Utilizando o Python
Como baixar fotos e vídeos do Instagram com Python
OAK: Câmera Open Source de Visão Computacional com AI
Python: automatizando a extração de informações na web com expressões regulares
Mamãe, quero descompactar e também compactar arquivos no terminal!
Deixando o Gnome bonitão em qualquer distribuição
Como ativar o módulo de cancelamento de ruído no Pipewire
Como escolher o melhor escalonador de CPU para melhorar o desempenho da máquina
Fazendo 100% no DOOM clássico sem tutorial
DSDA DOOM no Linux Mint 21.3 Virginia
Papagaiando (enfeitando) o KDE com efeitos do KWiN Burn My Windows
Como centralizar o widget Gerenciador de Tarefas Apenas Com Ícones do Painel do KDE
bc e calculos de horas - Duração de tempo (9)
Dúvidas com pacotes descontinuados (11)
Kernel pede para ser reinstalado (31)
O que eu faço com o pen drive de 200mb? [RESOLVIDO] (16)
Como Instalar Programas no computador remoto com GLPI Inventory (2)