takeScreenshot总是为uiautomator返回false

时间:2013-12-02 23:25:41

标签: android automation uiautomator uidevice

我正在尝试在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)

的语法

此致 Rumit

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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