Android开发:如何用Barista测试AppBarLayout中的SearchView?
使用Barista测试SearchView的显示逻辑
场景说明
布局中的SearchView默认设为gone,点击顶部Toolbar菜单里的搜索按钮后会切换为可见状态,以下是用Barista实现这一交互的测试方案。
布局代码
<com.google.android.material.appbar.MaterialToolbar android:id="@+id/topAppBar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:menu="@menu/top_app_bar" app:navigationIcon="@drawable/baseline_arrow_back_24"> (...) <androidx.appcompat.widget.SearchView android:id="@+id/searchView" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" /> </com.google.android.material.appbar.MaterialToolbar>
菜单代码
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/search" android:title="@string/search" android:contentDescription="@string/search" app:showAsAction="ifRoom" android:icon="@drawable/search"/> <item android:id="@+id/config" android:title="@string/configuracion" android:contentDescription="Configuracion" app:showAsAction="ifRoom" android:icon="@drawable/options"/> </menu>
测试实现
1. 验证初始状态
测试页面加载后SearchView是否处于隐藏状态:
@Test fun searchView_shouldBeHiddenInitially() { // 启动目标Activity launchActivity<YourTargetActivity>() // 断言SearchView不可见 assertNotDisplayed(R.id.searchView) }
2. 验证点击搜索按钮后的显示逻辑
模拟点击搜索菜单按钮,确认SearchView切换为可见:
@Test fun searchView_shouldShowAfterClickingSearchMenu() { launchActivity<YourTargetActivity>() // 点击Toolbar上的搜索菜单项(通过ID定位) clickMenu(R.id.search) // 断言SearchView已显示 assertDisplayed(R.id.searchView) }
3. 可选:验证切换逻辑(点击两次切换可见性)
如果需求是点击搜索按钮可以切换SearchView的显示/隐藏,补充如下测试:
@Test fun searchView_shouldToggleVisibilityOnSearchMenuClick() { launchActivity<YourTargetActivity>() // 第一次点击:显示SearchView clickMenu(R.id.search) assertDisplayed(R.id.searchView) // 第二次点击:隐藏SearchView clickMenu(R.id.search) assertNotDisplayed(R.id.searchView) }
依赖与导入说明
确保测试类中导入Barista的核心方法:
import com.schibsted.spain.barista.assertion.BaristaVisibilityAssertions.assertDisplayed import com.schibsted.spain.barista.assertion.BaristaVisibilityAssertions.assertNotDisplayed import com.schibsted.spain.barista.interaction.BaristaMenuInteractions.clickMenu import androidx.test.core.app.ActivityScenario.launch
注意将YourTargetActivity替换为实际包含该Toolbar的Activity类名。
内容的提问来源于stack exchange,提问作者Salmandra Reader
相关产品推荐
相关产品推荐

