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

stride83 · June 09, 2020 · Last by 极客先生 replied at April 20, 2021 · 3723 hits

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

最佳回复
stride83 #1 · June 09, 2020 Author

试了下,感觉是处理的手机上的操作,看来是 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
stride83 #2 · June 09, 2020 Author

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

stride83 #1 · June 09, 2020 Author

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

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

stride83 #5 · June 10, 2020 Author

先剪裁了下,好在 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 的源代码,这样的方式是科学并且有效的,而且因为工作需要还需要实现镜像链接,订阅了此帖子,后面我会把我的一些研究成果分享出来!

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up