IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android Espresso(三)——ListView -> 正文阅读

[移动开发]Android Espresso(三)——ListView

Android Espresso(三)——ListView

ListView是平时使用频率较高的一个组件,所以先来看下AdapterView的Espresso操作,以ListView为例。

代码UI示例可以在android/testing-samples找到。

为方便独立运行程序并测试,我将ListView相关UI代码提取到一个新project中,简化操作。

运行页面

在这里插入图片描述

列表中有100条数据,每个item上有一个text,一个button。

点击Item测试

先看下简单的点击测试,代码如下(含代码注释)。

@RunWith(AndroidJUnit4.class)
public class ListViewTest {
    private static final String TAG = "ListViewTest";

    // 1 ActivityTestRule 在test程序运行时会启动对应设置的Activity。可以在测试程序中通过 getActivity() 方法获取Activity,
    // 直接操作Activity实例。
    @Rule
    public ActivityTestRule<LongListActivity> activityRule = new ActivityTestRule<>(LongListActivity.class);

    // 2 在每个test case 运行时,都会执行一次 @Before 标注的方法。
    @Before
    public void setup() {
        Log.i(TAG, "start~~~");
    }

    // 3 具体的 test case 方法,内部程序就是一个完整的测试过程。这个方法方法中 inAdapterView() 方法不调用依然可以运行成功,因为在 Activity 内
    // 只有一个 AdapterView
    @Test
    public void testListItemPositionClick() {
        // onData() 参数 instanceOf() 表示ListView 内每个Item 的数据类型。 
        // inAdapterView() 参数指定具体的AdapterView,这个方法在一个页面内存在多个AdapterView是很有用处。
        // atPosition() 参数是 position 参数,从0开始,若position位置超出了屏幕的显示,ListView会先滚动到对应位置
        onData(instanceOf(Map.class)).inAdapterView(withId(R.id.list)).atPosition(20).perform(click());
        onView(withId(R.id.selection_row_value)).check(matches(withText("20")));
    }

    // 4 在每个test case 运行结束后,都会执行一次 @After 标注的方法。
    @After
    public void tearDown() {
        Log.i(TAG, "end~~~");
    }
}

运行效果。
在这里插入图片描述

运行说明: 运行效果可以看到test程序运行后,ListView先滚动到position等于20的item位置,然后执行了click点击事件。在顶部 "Clicked on row " 的值发生了变化 “Clicked on row 20”,结束。

注意:若position的值大于可加在数据的总量,会抛出 android.support.test.espresso.PerformException: Error performing ‘load adapter data’ on view 'Animations or transitions are enabled on the target device.

点击Item内ToggleButton

代码及注释如下:

@RunWith(AndroidJUnit4.class)
public class ListViewTest {

    @Rule
    public ActivityTestRule<LongListActivity> activityRule = new ActivityTestRule<>(LongListActivity.class);

    // ...

    @Test
    public void testListItemPositionClick() {
        // 通过position找到item,并在Item内id为rowToggleButton的view上执行点击操作。检查字符串值为"ON"
        // 在position等于50的item view找到id是rowToggleButton的ToggleButton并执行click操作。检查字符串值"ON"
        onData(instanceOf(Map.class)).atPosition(50)
            .onChildView(withId(R.id.rowToggleButton)).perform(click()).check(matches(withText("ON")));

        // 通过item view内包含的字符串值找到对应的Item。 ListView的数据类型对应的是List<Map<String, Object>>, 每个
        // 每个Item对应的数据类型是 Map<String, Object>, hasEntry(T key, T value) 对应了Map数据类型进行值得匹配。
        onData(allOf(is(instanceOf(Map.class)), hasEntry("ROW_TEXT", "item: 88"))).
            onChildView(withId(R.id.rowToggleButton)).perform(click()).check(matches(withText("ON")));
  }

    // ...
}

运行操作是:1. 在位置50的 toggle button 上,执行点击操作。

? 2. 找到文本值是 “item: 88” 的item上,找到 toggle button,执行点击操作。

在这里插入图片描述

这是对ListView最基本的两种操作。

其他操作

@RunWith(AndroidJUnit4.class)
public class ListViewTest {

    @Rule
    public ActivityTestRule<LongListActivity> activityRule = new ActivityTestRule<>(LongListActivity.class);
  
    @Test
    public void checkDisplayed() {
        // 滚动到最后一条,判断完全显示
        onData(hasEntry(equalTo("ROW_TEXT"), is("item: 99"))).check(matches(isCompletelyDisplayed()));
    }
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:18:44  更:2021-07-22 14:19:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 11:01:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码