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.210 ]
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
Monitorando produtos no ML com Python 3 via BeautifulSoup
Qu1cksc0pe - All-in-One Static Malware Analysis Tool
Scikit Learn: Projetando o futuro de suas APIs e aplicativos usando machine learning
Download de Arquivos com Verificação do Hash SHA 256
RapidScan - Multi-Tool WEB Vulnerability Scanner
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Apagar Todo o Histórico do Terminal
Linux Mint: Zram + Swapfile em Btrfs
Internet não funciona corretamente no Linux (3)
Pendrive do Ubuntu 24.04 travando ao tentar fazer a instalação dual bo... (4)
Instalar Dual Boot, Linux+Windows. (14)
queria saber de uma coisa sobre o steam e derivados (3)
tentei instalar o steam pelo terminal, agora ele não abre (3)









