Espresso - 检查使用按下按钮的意图打开了哪个 Activity?
Espresso - check which Activity is opened using intent on button press?
是否可以跟踪按下某个按钮后打开了哪个Activity?
我有一个测试,当单击/按下按钮时,它向服务器发送请求。在发送请求之前,它会打开一个 Activity。 为了验证测试是否成功执行,我需要检查打开的是什么Activity。
我的测试示例:
检查在 Espresso 中打开了哪个 Intent ---
private void startTest() {
recreateAuthData(InstrumentationRegistry.getTargetContext(), "d78269d9-9e00-4b8d-9242-815204b0a2f6", "3f32da21-914d-4adc-b6a1-891b842a2972");
InstrumentationRegistry.getTargetContext().getSharedPreferences(ActivitySplashScreen.class.getSimpleName(),
Context.MODE_PRIVATE).edit().putInt(ActivitySplashScreen.PROPERTY_APP_VERSION, ActivitySplashScreen.getAppVersion(InstrumentationRegistry.getTargetContext())).commit();
InstrumentationRegistry.getTargetContext().getSharedPreferences(ActivitySplashScreen.class.getSimpleName(),
Context.MODE_PRIVATE).edit().putString(ActivitySplashScreen.PROPERTY_REG_ID, "testKey").commit();
mActivityRule.launchActivity(setIntent());
// inputPinCode("2794");
}
@Test
public void testIdent() {
startTest();
onView(withText("ПРО")).perform(click());
putDelay(500);
onView(withId(R.id.get_pro)).perform(click());
onView(withText("Авторизация по паспортным данным")).perform(click());
putDelay(500);
closeSoftKeyboard();
onView(withId(R.id.btn_goto_passport)).perform(click());
onView(withHint("Серия и номер паспорта")).perform(replaceText("9894657891"));
onView(withHint("Дата выдачи паспорта")).perform(replaceText("17032014"));
onView(withHint("Дата рождения")).perform(replaceText("31091994"));
onView(withHint("СНИЛС")).perform(replaceText("54665285919"));
putDelay(500);
Log.d("TestWidget", hasComponent(hasShortClassName("ActivityMain")).toString());
onView(withId(R.id.btn_next)).perform(click());
// some code which check which activity is display now
putDelay(500);
}
Whether it is possible to trace which the Activity opened after
pressing the button?
检查 espresso-intents
图书馆:
配置
将这些行添加到您的 app/build.gradle
中:
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test:rules:0.5'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.2'
NOTICE: espresso-intents
won't run without espresso-core
, runner
or rules
libs.
您可能还需要将 ActivityTestRule<>
更改为 IntentsTestRule
,如下所述:
IntentsTestRule
Use IntentsTestRule instead of ActivityTestRule when using
Espresso-Intents. IntentsTestRule makes it easy to use
Espresso-Intents APIs in functional UI tests. This class is an
extension of ActivityTestRule, which initializes Espresso-Intents
before each test annotated with @Test and releases Espresso-Intents
after each test run. The activity will be terminated after each test
and this rule can be used in the same way as ActivityTestRule.
From:
https://google.github.io/android-testing-support-library/docs/espresso/intents/
示例代码(点击按钮启动新的 activity)
这是使用 espresso-intents
解决类似问题的解决方案:
An example test with intent stubbing:
@Test
public void testActivityResultIsHandledProperly() {
// Build a result to return when a particular activity is launched.
Intent resultData = new Intent();
String phoneNumber = "123-345-6789";
resultData.putExtra("phone", phoneNumber);
ActivityResult result = new ActivityResult(Activity.RESULT_OK, resultData);
// Set up result stubbing when an intent sent to "contacts" is seen.
intending(toPackage("com.android.contacts")).respondWith(result));
// User action that results in "contacts" activity being launched.
// Launching activity expects phoneNumber to be returned and displays it on the screen.
user.clickOnView(system.getView(R.id.pickButton));
// Assert that data we set up above is shown.
assertTrue(user.waitForText(phoneNumber));
}
From:
https://developer.android.com/reference/android/support/test/espresso/intent/Intents.html
其他资源:
要将启动的 activity 与 Espresso 意图实际匹配,您需要检查新意图的组件:
intended(hasComponent(NewActivity.class.getName()));
确保在设置中调用 Intents.init()
并在拆卸中调用 Intents.release()
以便能够使用 Espresso 记录意图。
是否可以跟踪按下某个按钮后打开了哪个Activity?
我有一个测试,当单击/按下按钮时,它向服务器发送请求。在发送请求之前,它会打开一个 Activity。 为了验证测试是否成功执行,我需要检查打开的是什么Activity。
我的测试示例:
检查在 Espresso 中打开了哪个 Intent ---
private void startTest() {
recreateAuthData(InstrumentationRegistry.getTargetContext(), "d78269d9-9e00-4b8d-9242-815204b0a2f6", "3f32da21-914d-4adc-b6a1-891b842a2972");
InstrumentationRegistry.getTargetContext().getSharedPreferences(ActivitySplashScreen.class.getSimpleName(),
Context.MODE_PRIVATE).edit().putInt(ActivitySplashScreen.PROPERTY_APP_VERSION, ActivitySplashScreen.getAppVersion(InstrumentationRegistry.getTargetContext())).commit();
InstrumentationRegistry.getTargetContext().getSharedPreferences(ActivitySplashScreen.class.getSimpleName(),
Context.MODE_PRIVATE).edit().putString(ActivitySplashScreen.PROPERTY_REG_ID, "testKey").commit();
mActivityRule.launchActivity(setIntent());
// inputPinCode("2794");
}
@Test
public void testIdent() {
startTest();
onView(withText("ПРО")).perform(click());
putDelay(500);
onView(withId(R.id.get_pro)).perform(click());
onView(withText("Авторизация по паспортным данным")).perform(click());
putDelay(500);
closeSoftKeyboard();
onView(withId(R.id.btn_goto_passport)).perform(click());
onView(withHint("Серия и номер паспорта")).perform(replaceText("9894657891"));
onView(withHint("Дата выдачи паспорта")).perform(replaceText("17032014"));
onView(withHint("Дата рождения")).perform(replaceText("31091994"));
onView(withHint("СНИЛС")).perform(replaceText("54665285919"));
putDelay(500);
Log.d("TestWidget", hasComponent(hasShortClassName("ActivityMain")).toString());
onView(withId(R.id.btn_next)).perform(click());
// some code which check which activity is display now
putDelay(500);
}
Whether it is possible to trace which the Activity opened after pressing the button?
检查 espresso-intents
图书馆:
配置
将这些行添加到您的 app/build.gradle
中:
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test:rules:0.5'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.2'
NOTICE:
espresso-intents
won't run withoutespresso-core
,runner
orrules
libs.
您可能还需要将 ActivityTestRule<>
更改为 IntentsTestRule
,如下所述:
示例代码(点击按钮启动新的 activity)IntentsTestRule
Use IntentsTestRule instead of ActivityTestRule when using Espresso-Intents. IntentsTestRule makes it easy to use Espresso-Intents APIs in functional UI tests. This class is an extension of ActivityTestRule, which initializes Espresso-Intents before each test annotated with @Test and releases Espresso-Intents after each test run. The activity will be terminated after each test and this rule can be used in the same way as ActivityTestRule.
From: https://google.github.io/android-testing-support-library/docs/espresso/intents/
这是使用 espresso-intents
解决类似问题的解决方案:
An example test with intent stubbing:
@Test public void testActivityResultIsHandledProperly() { // Build a result to return when a particular activity is launched. Intent resultData = new Intent(); String phoneNumber = "123-345-6789"; resultData.putExtra("phone", phoneNumber); ActivityResult result = new ActivityResult(Activity.RESULT_OK, resultData); // Set up result stubbing when an intent sent to "contacts" is seen. intending(toPackage("com.android.contacts")).respondWith(result)); // User action that results in "contacts" activity being launched. // Launching activity expects phoneNumber to be returned and displays it on the screen. user.clickOnView(system.getView(R.id.pickButton)); // Assert that data we set up above is shown. assertTrue(user.waitForText(phoneNumber)); }
From: https://developer.android.com/reference/android/support/test/espresso/intent/Intents.html
其他资源:
要将启动的 activity 与 Espresso 意图实际匹配,您需要检查新意图的组件:
intended(hasComponent(NewActivity.class.getName()));
确保在设置中调用 Intents.init()
并在拆卸中调用 Intents.release()
以便能够使用 Espresso 记录意图。