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: 9.320 ]
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
Esteganografia e Esteganálise: transmissão e detecção de informações ocultas em imagens digitais
Clicador automático de Tinder com Python
Trabalhando com permutações em ordem lexicográfica crescente
Interagindo com servidores HTTP com Python
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
xubuntu sem sons de eventos (3)
Erro ao iniciar serviço samba4 como novo dc em um ambiente com ad (9)
Dificuldade para renderizar vídeo no kdenlive (5)