Appium系列分享
Appium自动化(七)通过脚本自动化获取apk的包名和对应启动activity
前言
我们在上节课,通过自动化获取了apk的包名和activity。那么我们设备的deviceName和platformName是否可以通过自动化获取吗?本文带你解密。
讲解
安卓设备,我们可以通过adb来获取一些安卓设备的一些信息。那么我们要查询的deviceName怎么获取呢,其实很简单。
adb devices
我们看下展示的结果:
那么我们要取出来的是192.168.56.104:5555,那么我们应该怎么通过自动化来获取呢,我们可以利用os模块来获取。
import os
我们可以用popen来获取 。
import osdef get_devices(): cmd="adb devices" reslut=os.popen(cmd).readlines() print(reslut)get_devices()
结果展示
那么我们可以取里面的值。去掉第一行,并且去掉\n的行,然后得到,我们用\t切割。取第一个就可以获取。代码实现如下:
import osdef get_devices(): cmd="adb devices" reslut=os.popen(cmd).readlines()[1:] for item in reslut: if item!="\n": return str(item).split("\t")[0]rselut=get_devices()print(rselut)
那么我们怎么获取platformVersion呢。我们直接使用adb获取。
adb shell getprop ro.build.version.release
同样我们可以用os模块来实现。
def getPlatForm(): cmd='adb shell getprop ro.build.version.release' reslut = os.popen(cmd).readlines()[0] print(str(reslut).split("\n")[0])getPlatForm()
结果展示如下:
那么我们最后应该怎么在之间的脚本实现呢,其实很简单。那么我们来看看具体的代码是怎么实现呢?
代码展示
from appium import webdriverfrom androguard.core.bytecodes.apk import APKimport os
apk_path="/Users/lileilei/Downloads/com.tencent.mobileqq_8.5.0_1596.apk"def get_devices(): cmd="adb devices" reslut=os.popen(cmd).readlines()[1:] for item in reslut: if item!="\n": return str(item).split("\t")[0]
def getPlatForm(): cmd='adb shell getprop ro.build.version.release' reslut = os.popen(cmd).readlines()[0] return str(reslut).split("\n")[0]
def get_apkname(apk): a = APK(apk, False, "r") return a.get_package()def get_apk_lautc(apk): a = APK(apk, False, "r") return a.get_main_activity()desired_caps = { 'platformName': 'Android', 'deviceName': get_devices(), 'platformVersion':getPlatForm(), 'appPackage': get_apkname(apk_path),#包名 'appActivity': get_apk_lautc(apk_path) ,# apk的launcherActivity 'skipServerInstallation':True }driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
后记
本文介绍的只是简单的一个设备的信息,后续要拓展到多个设备,多个系统,还需要对里面的内容进行调整。后续会持续分享。