使用Uiautomator捕获图像/屏幕截图时出现异常

时间:2013-07-23 12:44:19

标签: android junit ui-automation

使用UiautomatorTestcase类捕获主要活动的屏幕截图时,我面临以下异常。

我正在使用的示例代码

public class MyActivityTest extends UiAutomatorTestCase {

    public UiautomatorAdaptxt() {
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void setUp() throws Exception {
        // TODO Auto-generated method stub
        super.setUp();

    }

    public void testOpenMainActivity() throws UiObjectNotFoundException {
        -->Here I use the code to open my Activity<--
        getUiDevice().takeScreenshot(storePath);
    }
}

我面临的例外是

java.lang.NoSuchMethodError:com.android.uiautomator.core.UiDevice.takeScreenshot         在 .testOpenMainActivity(MyActivityTest 的.java:31)         at java.lang.reflect.Method.invokeNative(Native Method)         在com.android.uiautomator.testrunner.UiAutomatorTestRunner.start(UiAutomatorTestRunner.java) :124)         在com.android.uiautomator.testrunner.UiAutomatorTestRunner.run(UiAutomatorTestRunner.java:8 5)         在com.android.commands.uiautomator.RunTestCommand.run(RunTestCommand.java:76)         在com.android.commands.uiautomator.Launcher.main(Launcher.java:83)         at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)         在com.android.internal.os.RuntimeInit.main(RuntimeInit.java:235)         在dalvik.system.NativeStart.main(本地方法)

1 个答案:

答案 0 :(得分:2)

您需要Android 4.2设备或更高版本才能以此方式截取屏幕截图。

这是因为在调用目标时,在Android 4.2或API Level 17中添加了takeScreenshot方法。

请参阅official documentation

当您在本地计算机上编译时,您针对包含此方法的android-17或更高版本进行编译,因此编译成功。但是,当部署在android-16的目标android设备上时,此方法丢失了。当测试代码尝试调用此方法时,它会抛出NoSuchMethodError异常。

作为一种解决方法,您可以使用adb来截取屏幕截图

adb shell screencap -p /data/local/tmp/screen-capture.png
adb pull /data/local/tmp/screen-capture.png <localfile.png>
adb shell rm /data/local/tmp/screen-capture.png