如何检查 intent (activity) 的包名称 (Espresso) 中是否包含字符串?
How to check if intent (activity) contains string in it's package name (Espresso)?
我使用 UI 测试来测试我的应用程序,并想检查相机应用程序是否打开。
我已经这样做了:
@Test
public void profileImageClickOpensCamera() {
mIntentsRule.getActivity().startActivity(new Intent(mIntentsRule.getActivity(), ProfileActivity.class));
onView(withId(R.id.circleProfileImage)).perform(click());
intended(toPackage("com.android.camera"));
}
它在大多数设备上工作正常s,但是如果我在 SAMSUNG Galaxy S8 上下雨,它有 "com.sec.android.app.camera" 相机包应用程序,测试失败。
我的问题是,我如何检查 espresso 包装中是否包含单词 "camera"?
这不是最佳解决方案,因为设备的相机应用程序包名称可以是任何名称,但比我所知道的更好。
所以我想做这样的事情:
intended(StringContains(toPackage("com.android.camera")));
有什么建议吗?
提前致谢。
我也遇到过同样的情况,我是这样解决的:
PackageManager packageManager = InstrumentationRegistry.getTargetContext().getPackageManager();
String pack = resultData.resolveActivity(packageManager).getPackageName();
intended(toPackage(pack));
在我的情况下,我有一个 activity,带有一个按钮,可以打开相机,让您拍照并 returns 在您的 activity 中使用它。该测试的完整代码为:
@Test
public void testCameraIntent() {
Bitmap icon = BitmapFactory.decodeResource(
InstrumentationRegistry.getTargetContext().getResources(),
R.drawable.husky);
// Build a result to return from the Camera app
Intent resultData = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
resultData.putExtra("data", icon);
Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData);
PackageManager packageManager = InstrumentationRegistry.getTargetContext().getPackageManager();
String pack = resultData.resolveActivity(packageManager).getPackageName();
// Stub out the Camera. When an intent is sent to the Camera, this tells Espresso to respond
// with the ActivityResult we just created
intending(toPackage(pack)).respondWith(result);
// Now that we have the stub in place, click on the button in our app that launches into the Camera
onView(withId(R.id.btn_takePicture)).perform(click());
intended(toPackage(pack));
}
这就是结果 :-) 带有哈士奇狗的图像是我设置为在我的自定义 ActivityResult 中发送的本地图像:
您可以测试意图操作而不是包。
intended(hasAction(MediaStore.ACTION_IMAGE_CAPTURE))
或 intended(hasAction(equalTo(MediaStore.ACTION_IMAGE_CAPTURE)))
之类的东西应该可以。
我使用 UI 测试来测试我的应用程序,并想检查相机应用程序是否打开。
我已经这样做了:
@Test
public void profileImageClickOpensCamera() {
mIntentsRule.getActivity().startActivity(new Intent(mIntentsRule.getActivity(), ProfileActivity.class));
onView(withId(R.id.circleProfileImage)).perform(click());
intended(toPackage("com.android.camera"));
}
它在大多数设备上工作正常s,但是如果我在 SAMSUNG Galaxy S8 上下雨,它有 "com.sec.android.app.camera" 相机包应用程序,测试失败。
我的问题是,我如何检查 espresso 包装中是否包含单词 "camera"?
这不是最佳解决方案,因为设备的相机应用程序包名称可以是任何名称,但比我所知道的更好。
所以我想做这样的事情:
intended(StringContains(toPackage("com.android.camera")));
有什么建议吗?
提前致谢。
我也遇到过同样的情况,我是这样解决的:
PackageManager packageManager = InstrumentationRegistry.getTargetContext().getPackageManager();
String pack = resultData.resolveActivity(packageManager).getPackageName();
intended(toPackage(pack));
在我的情况下,我有一个 activity,带有一个按钮,可以打开相机,让您拍照并 returns 在您的 activity 中使用它。该测试的完整代码为:
@Test
public void testCameraIntent() {
Bitmap icon = BitmapFactory.decodeResource(
InstrumentationRegistry.getTargetContext().getResources(),
R.drawable.husky);
// Build a result to return from the Camera app
Intent resultData = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
resultData.putExtra("data", icon);
Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData);
PackageManager packageManager = InstrumentationRegistry.getTargetContext().getPackageManager();
String pack = resultData.resolveActivity(packageManager).getPackageName();
// Stub out the Camera. When an intent is sent to the Camera, this tells Espresso to respond
// with the ActivityResult we just created
intending(toPackage(pack)).respondWith(result);
// Now that we have the stub in place, click on the button in our app that launches into the Camera
onView(withId(R.id.btn_takePicture)).perform(click());
intended(toPackage(pack));
}
这就是结果 :-) 带有哈士奇狗的图像是我设置为在我的自定义 ActivityResult 中发送的本地图像:
您可以测试意图操作而不是包。
intended(hasAction(MediaStore.ACTION_IMAGE_CAPTURE))
或 intended(hasAction(equalTo(MediaStore.ACTION_IMAGE_CAPTURE)))
之类的东西应该可以。