张长长 2017-08-30 01:49 采纳率: 0%
浏览 910

monkeyrunner中Device.shell()能否完全实现cmd中的adb命令?

主要是想获得APP启动时间,但实际上用am start -W (pak)获得的时间与人的体验时间有差距。有更好的方法吗?问题如下

代码如下,把要打开的apk包放到列表里了,再依次打开app。当设置b='am start -W %s ' %(Tactivity[i])时可以正常打开app,但是加上>>C:\COLD.xlsx,就不能打开APP了,如果不加这句又无法获得启动时间。是否不能实现,或者有没有什么更好的方法?

Tactivity=['com.android.email','com.tencent.news/.activity.SplashActivity','com.mobike.mobikeapp/.SplashActivity','com.sdu.didi.psnger/com.didi.sdk.splash.SplashActivity']

for i in range(0,4):
b='am start -W %s >>C:\COLD.xlsx' %(Tactivity[i])
print b
print Tactivity[i]
Device.shell(b)
MonkeyRunner.sleep(8)

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-06 09:52
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    Monkeyrunner的shell()函数是Android的Shell API的一部分,它允许你执行系统命令或操作,例如启动应用程序、发送消息等。

    然而,shell()函数并不是一个标准的Android Shell API,而是Monkeyrunner的一个内部API,主要用于模拟设备的行为。因此,虽然理论上shell()函数可能能够执行某些Android Shell API的功能,但其功能和行为可能会受到限制,并且不总是能像实际的Android Shell API那样工作。

    关于获取APP启动时间的问题,你可以尝试以下方法:

    1. 使用adb shell来查看进程信息:
      import subprocess
      
      process = subprocess.Popen(['adb', 'shell', 'ps'], stdout=subprocess.PIPE)
      output = process.communicate()[0].decode()
      for line in output.split('\n'):
          if 'com.android.email' in line:
              pid = int(line.split()[1])
              break
      
    2. 通过adb shell来获取进程ID(PID),然后使用adb shell来运行adb logcat命令以获取日志。
    3. 在日志中查找与你的APP相关的日志行,提取出包含时间戳的信息。

    注意:这些方法可能会导致一些兼容性问题,特别是对于一些特定的API或库。此外,它们也可能不会提供完整的控制台输出,因为Monkeyrunner并不直接支持所有Android Shell API。

    如果你希望更精确地获取启动时间,可能需要考虑使用更专业的自动化测试框架,如Appium或Selenium,它们提供了更多的API和工具来处理Android应用。

    评论

报告相同问题?