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: 10.110 ]
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)
Sincronizando Dados do PostgreSQL no Elasticsearch
Breve Estudo Sobre Ransomwares e Análise Estática/Dinâmica do WannaCry
Como criar um keylogger em Python
Embutindo imagens nos scripts Python para aplicações Tkinter
Scikit Learn: Projetando o futuro de suas APIs e aplicativos usando machine learning
Como isolar seus projetos Python com virtualenv (ambiente virtual)
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Upscaling com imagem cortada no monitor secundário ao usar iGPU Multi ... (1)
Fiz uma pergunta no fórum mas não consigo localizar (13)
Quais os códigos mais dificeis que vcs sabem fazer? (2)
Não consigo instalar distro antiga no virtualbox nem direto no hd (7)
Servidor Ubuntu 24.04 HD 500 não tenho espaço na \home\adminis... [RES... (8)









