教你用10行Python 代码实现自动化群控( 二 )

5、区分设备
为了保证群控脚本执行不会产生干扰 , 在每个步骤执行之前 , 都应该将设备 ID 作为参数进行区分
比如:将控件的界面控件树按照设备保存为不同的名称、点击界面和输入的命令传相应设备 ID 作为入参
def save_ui_tree_to_local(dName):"""获取当前Activity控件树 , 保存到本地文件名固定为:uidump.xml:param dName: 设备id:return:"""exec_cmd("adb-s %s shell uiautomator dump /data/local/tmp/%s.xml" % (dName, dName))sleep(2)exec_cmd("adb -s %s pull /data/local/tmp/%s.xml ./../" % (dName, dName))6、执行步骤
从 YAML 文件中读取执行步骤 , 遍历步骤集合 , 内部遍历设备列表 , 以保证每一个步骤 , 分别执行到每台设备上
# 执行步骤for step in self.steps:# 设备for device in devices:pass接着 , 通过步骤名称匹配不同的操作 , 即可操作设备了
# 操作名称step_name = list(step)[0]if step_name == 'save_ui_tree_to_local':# 保存UI数到本地method = step.get(step_name).get('method')save_ui_tree_to_local(device)elif step_name == 'find_element_and_click':element_id = step.get(step_name).get('id')# 获取元素的坐标bound_search_input = get_element_position(element_id, device)# 点击元素exec_cmd('adb -s %s shell input tap %s %s' % (device, bound_search_input[0], bound_search_input[1]))elif step_name == 'input_content':input_content = step.get(step_name).get('content')# 模拟输入exec_cmd('adb -s %s shell input text %s' % (device, input_content))else:print('其他操作步骤')7、关闭应用
当所有的操作完成之后 , 同样是遍历设备 , 利用 adb 命令去关闭 App 即可
def stop_all(self):"""关闭应用:return:"""for device in devices:os.popen("adb -s " + device + " shell am force-stop%s" % self.packageName)最后 , 这一招你学会了吗?

【教你用10行Python 代码实现自动化群控】


推荐阅读