Wie kann man mehrere Android -Geräte parallel zu Python effizient steuern?Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Wie kann man mehrere Android -Geräte parallel zu Python effizient steuern?

Post by Anonymous »

Ich arbeite an einem Projekt, das gleichzeitig mehrere Android -Geräte aus einem Python -Skript beinhaltet. Während des Tests stelle ich Herausforderungen bei der Implementierung effektiver Multithreading mit Android Studio -Emulatoren, die ich zunächst verwende, bevor ich mich mit echten Geräten verbinde. Ich habe Lösungen wie Appium und Selenium Server untersucht, aber es ist schwierig, klare Informationen und einfache Workflows zu finden, die meinen Anforderungen entsprechen. Meine Experimente mit Appium und Selenium Server waren eine Herausforderung, und ich habe Schwierigkeiten, klare Informationen oder einfache Workflows für diese Aufgabe zu finden. Jeder Emulator sollte nicht die gleichen Aufgaben ausführen. Sie sollten einen vom Python -Skript beschriebenen Verfahrenspfad befolgen. Ich bin offen, den Workflow, den ich zu implementieren wollte

Code: Select all

# Function to get connected devices
def get_connected_devices():

devices_configs = []
try:
output = subprocess.check_output([adb_path, 'devices']).decode('utf-8')
devices = output.strip().split('\n')[1:]

for device in devices:
ud_id = device.split('\t')[0]
os_version = (
subprocess.check_output(
[
adb_path,
'-s',
ud_id,
'shell',
'getprop',
'ro.build.version.release',
]
)
.decode('utf-8')
.strip()
)
platform = "Android"
system_port = str(8200 + len(devices_configs))
chrome_driver_port = str(8100 + len(devices_configs))
device_details = {
"device": ud_id,
"os_version": os_version,
"ud_id": ud_id,
"platform": platform,
"systemPort": system_port,
}
devices_configs.append(device_details)
return devices_configs
except subprocess.CalledProcessError as e:
print(f"Error executing ADB command: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")

# Retrieve connected devices
connected_devices = get_connected_devices()

# Start Appium servers for each device
processes = []
for i in range(len(connected_devices)):
port = 4724 + i
cmd = ["start", "appium", "-p", str(port)]
process = subprocess.Popen(cmd, shell=True)
processes.append(process)

< /code>
Trotzdem habe ich auf Probleme mit dem Erzwingen gestoßen, dass Appium bestimmte Geräteports verwendet hat, da es denselben Port für alle Geräte verwendet hat: < /p>
# Pair each connected device with a server
device_server_pairs = list(zip(connected_devices, servers))

# Start Appium sessions using threads
with concurrent.futures.ThreadPoolExecutor() as executor:
executor.map(start_appium_session, device_server_pairs)

# Function to start Appium session for each device
def start_appium_session(device_config_server_tuple):
device_config, server = device_config_server_tuple
capabilities = {
'platformName': device_config['platform'],
'platformVersion': device_config['os_version'],
'deviceName': device_config['ud_id'],
'systemPort': device_config['systemPort'],
'app': APP_PATH,
}

driver = webdriver.Remote(server, options=UiAutomator2Options().load_capabilities(capabilities))
Ich schätze alle Erkenntnisse oder Verbesserungen, die Sie bereitstellen können.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post