appium+python实战二:在远程设备执行shell命令

直接使用adb shell命令是可以实现一些步骤,在无法调用appium的api实现某些操作时我们可以通过执行adb命令实现,比如某些点击事件,打开指定的文件等。但是若在appium服务器内穿插使用adb shell命令,adb命令可正常执行,但是后续的appium的api调用会出现问题,具体报错如下:

[debug] [WD Proxy] Proxying [GET /source] to [GET http://127.0.0.1:8200/wd/hub/session/e8d74fb1-890f-4f66-8484-23941f00cf1b/source] with body: {}
[WD Proxy] Got an unexpected response with status undefined: {"errno":"ECONNREFUSED","code":"ECONNREFUSED","syscall":"connect","address":"127.0.0.1","port":8200}
[debug] [W3C (1919ed43)] Encountered internal error running command: UnknownError: An unknown server-side error occurred while processing the command. Original error: Could not proxy command to remote server. Original error: Error: connect ECONNREFUSED 127.0.0.1:8200
[debug] [W3C (1919ed43)]     at JWProxy.command (E:\node_modules\_appium-base-driver@5.2.1@appium-base-driver\lib\jsonwp-proxy\proxy.js:270:13)
[HTTP] <-- POST /wd/hub/session/1919ed43-ef90-4a9d-ab7f-52c4eef0e6b5/element 500 4101 ms - 571

原因:
新版本的appium服务器在默认情况下禁用了adb shell 等shell命令执行,必须在启动服务器时提供命令行参数--relaxed-security,以启用远程Shell命令执行(以及其他不安全的功能,默认情况下已禁用)。如果未在服务器开启时启用该参数,并且直接在客户端执行shell语句,则会引发异常。

appium --session-override --relaxed-security

在被测设备上执行给定的shell命令,并返回其stdout或两者stdout,stderr如果将其includeStderr设置为true。如果命令的返回码不为零,则将引发异常。该命令的作用方式与adb shell在主机上执行该命令的方式相同。

支持的参数
command:远程命令的名称。例如,它也可以是可执行文件的完整路径/bin/ls。(必须指定)
args:以字符串表示的命令参数列表。如果提供单个字符串,则它将自动转换为单项数组。可选参数。
includeStderr:将此参数设置为true,以便将stderr输出与stdout一起包括到返回的结果中。如果启用,则返回的结果将地图stdout和stderr包含相应的字符串键,否则它只是一个简单的字符串。false默认。
timeout:shell命令超时(以毫秒为单位)。如果该命令需要更多时间来完成执行,则将引发异常。默认为20000毫秒。

示例代码:

result = driver.execute_script('mobile: shell', {
    'command': 'echo',
    'args': ['arg1', 'arg2'],
    'includeStderr': True,
    'timeout': 5000
})
assert result['stdout'] == 'arg1 arg2'

实现代码:

opts = {
            'command':'am start',
            'args':['-n','cn.wps.moffice_eng/'
                      'cn.wps.moffice.documentmanager.PreStartActivity2','-d','file://mnt/sdcard/documents/test.doc']
        }
        result = self.page.execute_script('mobile:shell',opts)

注:command内就不用写adb shell 了,AppiumDriver执行时会自带adb shell。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值