使用 UIAutomator 单击相机快门

Click on Camera Shutter using UIAutomator

我正在为我的应用程序编写 Espresso 测试,并尝试在我的应用程序中打开相机后自动点击快门按钮。

我在 Android 模拟器中使用 Espresso 和 UIAutomator。我设法将此 UI 转储到 UIAutomatorViewer 中。

我不明白为什么我无法使用 UIAutomator 使用此代码单击快门按钮:

public void clickCameraShutterButton() throws UiObjectNotFoundException
{
    UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
    UiSelector shutterSelector = new UiSelector().resourceId("com.android.camera:id/shutter_button");
    UiObject shutterButton = device.findObject(shutterSelector);
    shutterButton.click();
}

相机只是坐在那里,从来没有按下快门按钮。这是我在 Android Studio 监视器中获得的堆栈跟踪:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.app.Activity.findViewById(int)' on a null object reference

如有任何建议,我们将不胜感激。

这对我有用

@Before
public void setUp() {
    // Initialize UiDevice instance
    final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
    mDevice = UiDevice.getInstance(instrumentation);
}

...


/**
 * @@Test comment here@@
 *
 * @throws Exception
 */
@Test
public void culebraGeneratedTest_CameraShutter() throws Exception {
    mDevice.findObject(By.res("com.android.camera2:id/shutter_button").desc("Shutter").clazz("android.widget.ImageView").text(Pattern.compile("")).pkg("com.android.camera2")).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT);
}

此测试找到快门并点击它。

如果您有兴趣,此测试是使用 CulebraTester 自动生成的。

您可以试试这个代码:

device.findObject(new UiSelector().resourceId("com.android.camera:id/shutter_button")).click();

device.findObject(new UiSelector().description("Shutter button")).click();

device.executeShellCommand("input keyevent 27");

这意味着 KEYCODE_CAMERA 值为 27

device.click(x,y); 

只需要将 UI Automator Viewer "resource-id" 值放在 *

mdevice.findObject(new UiSelector().resourceId("*")).click();