我假设这是一个bug,但我可能做错了什么。
我的布局非常简单,只包含一个浮动操作按钮:
我的活动只继承了包含以下内容的onCreate方法:
当我调试此测试时,
到目前为止,我已经找到了三种解决此问题的方法,当:
我的布局非常简单,只包含一个浮动操作按钮:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/contentCoordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/layoutWithoutContent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/stopButton"
android:src="@drawable/ic_stop_white_24px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:layout_marginBottom="16dp"
app:layout_anchor="@id/layoutWithoutContent"
app:backgroundTint="@color/colorPrimary"
app:layout_anchorGravity="bottom|right|end"/>
我的活动只继承了包含以下内容的onCreate方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CoordinatorLayout coordinatorLayout = findViewById(R.id.contentCoordinatorLayout);
Snackbar.make(coordinatorLayout, R.string.snackbar_message, Snackbar.LENGTH_LONG).show();
}
我编写了一个 Espresso 测试,仅验证 Snackbar 在半秒钟内是否显示。
@Rule
public ActivityTestRule<MainActivity> mainActivity = new ActivityTestRule<>(MainActivity.class, true, true);
@Test
public void testSnackbarIsShown() throws Exception { onView(withText(R.string.snackbar_message)).check(matches(isDisplayed()));
}
当我调试此测试时,
onView(withText(R.string.snackbar_message)).check(matches(isDisplayed()));
在 Snackbar 消失后执行。到目前为止,我已经找到了三种解决此问题的方法,当:
将 FloatingActionButton 的 anchorGravity 更改为 top:
app:layout_anchorGravity="top|right|end"
完全删除 FloatingActionButton
将 Snackbar 的第一个参数更改为使用
findViewById(android.R.id.content)
。但是,当 snackbar 出现时,它不会将 FloatingActionButton 推上去。
sleep()
方法是一个错误。你应该使用一些循环测试线程的ViewAction
。另外,Espresso 与动画不兼容。在设备开发者选项中关闭动画,然后尝试启动测试。 - Karol KulbakaActivityMonitor
吗?(https://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html)比如,等待活动出现后再检查你的 Snackbar。 - Anton Malmygin