【问题标题】:takeScreenshot always returns false for uiautomatortakeScreenshot 总是为 uiautomator 返回 false
【发布时间】:2013-12-18 20:21:37
【问题描述】:

我正在尝试在 Galaxy S4 和 Kindle HDX 8.9 上自动“截屏”,我正在使用以下代码。

if(!(getUiDevice().takeScreenshot(new File("ANYPATH"))))
         System.out.println("False: Screenshot not taken!!");
     else
         System.out.println("Gangnam Style...");

ANYPATH 我试过的值:

  • /data/local/tmp/(适用于两种设备)。不知道在设备上哪里可以找到这个文件夹,我试过这个是因为我把我的罐子推到了这个位置。
  • /sdcard/pictures/(适用于 Kindle HDX)
  • /storage/emulated/0(适用于 Galaxy S4)

无论我尝试何种路径,条件总是返回 false 并且不会在任何设备(实际设备而不是模拟器)上截取屏幕截图。我不确定我在这里错过了什么?

我只是遵循http://developer.android.com/tools/help/uiautomator/UiDevice.html#takeScreenshot(java.io.File)的语法

问候, 反刍

【问题讨论】:

    标签: android automation android-uiautomator uidevice


    【解决方案1】:

    takeScreenshot() 方法适用于 4.2 及以上 android 版本的设备。

    如果设备版本合适,则使用以下代码。

    File path = new File("/sdcard/filename.png");
    int SDK_VERSION = android.os.Build.VERSION.SDK_INT; 
    if (SDK_VERSION >= 17) {
        mUiAutomatorTestCase.getUiDevice().takeScreenshot(PATH);
    }
    

    我们可以通过以下命令查看文件。

    $ adb shell ls -l /sdcard/name-of-file

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题并改用 adb screencap 功能。我想这不是答案,而是一种解决方法:

      Process process = Runtime.getRuntime().exec("screencap -p " + <filePath>);
      process.waitFor();
      

      【讨论】:

        【解决方案3】:

        我也有这个问题。在调试工具的帮助下,我发现这是一个权限问题。我通过在清单中添加存储写入权限来解决它。如果您使用的是 6.0+ 设备,您还必须在运行时手动授权您的测试应用的权限。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-26
          • 1970-01-01
          • 1970-01-01
          • 2016-07-20
          • 2021-11-05
          • 2018-11-05
          • 2019-05-06
          • 2017-04-29
          相关资源
          最近更新 更多