我有这个应用程序,我正在测试我需要登录的地方,然后它转到另一个活动,然后它转到另一个我可以注销的活动。问题是我的注销按钮位于ScrollView
的底部,并且在屏幕上看不到,espresso找不到该按钮。我需要先滚动,然后单击按钮。你能告诉我如何滚动然后点击按钮吗?
@Before
public void init() {
// Specify a valid string.
loginText = "something";
passwordText = "something";
}
@Test
public void loginAction() {
mBrowserActivityMonitor = getInstrumentation().addMonitor(MainActivity.class.getName(), null, false);
// Type text and then press the button.
onView(withId(R.id.editText_username))
.perform(typeText(loginText), closeSoftKeyboard());
onView(withId(R.id.editText_password))
.perform(typeText(passwordText), closeSoftKeyboard());
onView(withId(R.id.button_login)).perform(click());
Activity activity = mBrowserActivityMonitor.waitForActivityWithTimeout(10000);
onView(withId(R.id.button_left)).perform(click());
Activity activity2 = mBrowserActivityMonitor.waitForActivityWithTimeout(10000);
onView(withId(R.id.button_logout)).perform(click()); **//does not recognize**
Activity activity3 = mBrowserActivityMonitor.waitForActivityWithTimeout(10000);
assertNotNull(activity3); //To see if activity 2 (Profile) is opened
这是错误日志:
引起:java.lang.RuntimeException:不会执行操作 因为目标视图与以下一个或多个不匹配 限制: 至少90%的视图区域会显示给用户。
答案 0 :(得分:3)
onView(withId(R.id.button_logout)).perform(scrollTo(), click());
如果您正在使用的视图位于ScrollView(垂直或水平)内,请考虑需要使用scrollTo()显示视图的前面操作(如click()和typeText())。这可确保在继续执行其他操作之前显示视图:
onView(...)。perform(scrollTo(),click());
注意:如果视图已经显示,则scrollTo()将无效,因此您可以在显示视图时由于屏幕尺寸较大而安全地使用它(例如,当您的测试在较小和较大的屏幕上运行时分辨率)。