python启动手机相机
获取设备名称
通过adb命令”adb devices“获取设备信息
def getuuid(): # shell命令内容 cmd = "adb devices" # 创建一个shell命令的线程 with subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) as p1: p1.wait() # 等待子进程终止 data = p1.stdout.read().decode('utf-8') # 进程的输出内容 datas = data.strip("List of devices attached").split("\r\n") # strip去掉开头的字符,split分隔成列表 arr = [] # 创建一个空列表用于存放设备的名称 for s in datas: if s is not None and s.strip().endswith('device'): # 列表中不为空的字符串 arr.append(s.split("\t")[0]) # 字符串内容分隔后,去第一个值 if len(arr) == 0: # 获取设备名称失败 print('no devices') exit(-1) return arr # 返回获得的设备名称,列表类型
定义端口号
可能是多太设备同时进行测试 所以我们可以创建一个数量相同于设备列表的列表
def port(): port = [] for s in range(len(uuid)): l = 4723 + s * 2 # 4723是appium默认的端口号 port.append(l) return port
杀死node服务
为了防止我们在多次运行过程中出问题,我们在每次启动的时候都关闭一下之前的进程
node是appium的运行环境,杀死这个程序就可以保证appium程序关闭了
def kill_server(): # 结束node服务 server_list = os.popen('tasklist | find "node.exe"').readlines() # 获取当前的node是否在运行中 if len(server_list) > 0: os.system("taskkill -F -PID node.exe") # 运行状态就停止node
启动appium服务方法
def start_appium_server(j): # 启动appium服务,并设置每个设备的端口号和对应的设备名 os.system("appium -a 127.0.0.1 -p {} -U {} --session-override".format(port[j], uuid[j]))
尝试着启动吧。线程这个库我会另外写一个文档,我被这个东西困了两天,哭了
if __name__ == '__main__': uuid = getuuid() # 获取设备号成列表 port = port() # 设置端口号成列表 kill_server() # 杀死node进程 for j in range(len(uuid)): # 运行所有接入的的设备对应端口 th = threading.Thread(target=start_appium_server, args=(0, )) # 调用的方法别加括号啊,加了就成了主线程。不会往下运行了 th.start() # 启用线程 time.sleep(10)
运行结果如下:
这个线程是一直启动着的,所以需要我们手动结束代码。
启用相机
设置一个方法来存放我们的参数
def cap(uuid): # 设置传入方法的参数 capabilities = { 'newCommandTimeout': '5000', # 等待新命令的最长时间,超时后退出。默认是60s 'platformName': 'Android', # 手机类型,ios或android 'udid': uuid, # 设备名称 'deviceName': 'device', # 好像没啥用 'platformVersion': '10', # 系统版本 'appPackage': 'com.huawei.camera', # 运行程序包名 'appActivity': 'com.huawei.camera', # 运行程序名称com.huawei.camera 'noReset': 'true', # 是否清除session信息,不要重置App,如果为False的话,执行完脚本后,app的数据会清空 'automationName': 'UiAutomator2' # Appium使用automationName框架为uiautomator2识别元素 } return capabilities
打开相机吧!
driver = webdriver.Remote('http://127.0.0.1:{}/wd/hub'.format(port),cap(uuid)) # 打开相机 time.sleep(10) driver.quit() # 退出相机
我们的手机设备就会自动打开相机了,不过启动时间有点慢,我觉得应该是启动服务时间太多 并不是我们的代码问题,运行结果如下:
好了,以上就是启动app了。