You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:26:03