测底部工作表的Espresso测试

11

我正在创建一个针对底部菜单的浓缩测试,其中菜单有5个线性排列的文本视图,第一个文本视图可见,点击第一个文本视图将展开整个底部菜单,显示所有项目,然后需要点击第三个项目才能通过测试。

问题在于,在展开后,Espresso不能立即单击底部菜单的文本视图,直到我放置 Thread.sleep(1000)

我甚至尝试了IdlingResource,一旦在第一个项目上注册了单击事件,我将其设置为false,并在bottomSheetBehaviour上调用onStateChanged后再次将其设置为true,但仍然没有帮助。

这样不起作用:

onView(withId(R.id.toolsItem1)).perform(click());
onView(withId(R.id.toolsItem3)).check(matches(isDisplayed()));
onView(withId(R.id.toolsItem3)).perform(click());

这是什么意思:

onView(withId(R.id.toolsItem1)).perform(click());
Thread.sleep(1000);
onView(withId(R.id.toolsItem3)).check(matches(isDisplayed()));
onView(withId(R.id.toolsItem3)).perform(click());

你在开发者设置中禁用了设备动画吗? - Be_Negative
动画已关闭,但底部表单仍缓慢向上移动 @Be_Negetive - Nikhil Soni
你找到这个问题的解决方案了吗?我也遇到了同样的问题 :/ - Piotr Ślesarew
你尝试过 SystemClock.sleep(1000); 吗? - Bruno Bieri
1个回答

1

我曾经遇到过同样的问题。在我看来,Thread.sleep() 的解决方案似乎是可行的。

但我使用了一个名为https://github.com/awaitility/awaitility的第三方库来等待底部表单的状态改变,而不是固定的时间。我像这样使用它:

await().atMost(5, SECONDS).until(() -> fragment.bottomSheetBehavior.getState()==BottomSheetBehavior.STATE_EXPANDED);

fragment是要测试的片段,您可以像这样获取它:

MyFragment fragment = (MyFragment) activityTestRule.getActivity().getSupportFragmentManager().findFragmentByTag("Tag");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接