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.120 ]
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
Introdução ao clib (Command Line Book)
Pydev - Preparando o Eclipse para o Python
Monitorando produtos no ML com Python 3 via BeautifulSoup
Download de Arquivos com Verificação do Hash SHA 256
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
Como quebrar senha usando john the ripper
[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?
Não consigo instalar distro antiga no virtualbox nem direto no hd (25)
queria saber como posso alterar a frequencia do meu ryzen 2300u pro (3)









