Appium appium 是否有转发 adb 命令的通道

stride83 · 2020年06月09日 · 最后由 极客先生 回复于 2021年04月20日 · 3048 次阅读

应用场景是这样的:
书写了单机版的 appium 并行控制几十部终端的程序,程序中伴随了一些原始的 adb 操作,现在手机的控制数目需要上好几个数量级,因此考虑进行分布式部署,本身 appium 是支持分布式的,无奈,原始的 adb 操作遇到执行机与手机宿主机的分离场景,想着是否有可以通过 appium server 支持 adb 命令,就不需要进行繁琐的更改了
目前没有找到方法,有具体实践或有过这方面经验的同仁不,多谢指导

最佳回复

试了下,感觉是处理的手机上的操作,看来是 appium 把整个通道封上了,不允许进行手机通道外的操作,比如 adb push 等的操作,真想好好看看 appium server 的源代码,可惜能力较弱,努力学习吧

共收到 8 条回复 时间 点赞
def adb_shell(self, command, args, includeStderr=False):
    """
    appium --relaxed-security appium需要以此方式启动才可使用shell
    adb_shell('ps',['|','grep','appium'])

    :param command:命令
    :param args:参数
    :param includeStderr: 为 True 则抛异常
    :return:
    """
    result = self.driver.execute_script('mobile: shell', {
        'command': command,
        'args': args,
        'includeStderr': includeStderr,
        'timeout': 5000
    })
    return result

谢谢,是否有更超前的,就是在获取 driver 前,比如,我可以直接通过这个获取手机的版本,然后这个时候才能进行 driver 的 desired apability 的设置,进而 driver 的创建
很感谢,已经基本满足了

试了下,感觉是处理的手机上的操作,看来是 appium 把整个通道封上了,不允许进行手机通道外的操作,比如 adb push 等的操作,真想好好看看 appium server 的源代码,可惜能力较弱,努力学习吧

建议自己封装 adb 命令,我之前就封装过一个,appium 只有在初始化了 driver 后才能操作手机

先剪裁了下,好在 adb 不多,尽量保持完整性,我感觉有能力还是完善下 appium 的功能

stride83 回复

Appium 没有和手机建立,实在想获取数据的话就这样
节点机器 adb kill-server
然后执行 adb nodaemon server -a 启动 server 模式
主机使用 adb -H={IP} -P={port} devices 就能获取到其他局域网上的节点手机数据了

还有其实 adb 启动 server 模式后
Appium 也可以使用 remoteAdbHost 的参数连接远程节点上的手机,执行自动化任务,节点不需要搭建 Appium 环境。

YueChen 回复

请问 IOS 端有没有类似 adb 远程执行的方式?

stride83 回复

我也是碰到这类问题,我认为最好的方式是二次开发 Appium server 的源代码,这样的方式是科学并且有效的,而且因为工作需要还需要实现镜像链接,订阅了此帖子,后面我会把我的一些研究成果分享出来!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册