首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ComposeRule的UI测试崩溃

使用ComposeRule的UI测试崩溃
EN

Stack Overflow用户
提问于 2022-10-24 20:39:28
回答 1查看 60关注 0票数 1

我正在编写一个UI测试,它会进入搜索屏幕,进行搜索,然后单击一个项目来获取该项目的详细信息。大多数情况下我都会崩溃,但不是自动化测试单击的所有项目都会崩溃。我可以看到,数据加载,但崩溃时,等待空闲。

代码:

composeTestRule.waitForIdle()

坠机:

代码语言:javascript
运行
复制
Caused by: java.util.concurrent.ExecutionException: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.compose.ui.node.LayoutNode.getNeedsOnPositionedDispatch$ui_release()' on a null object reference
        at androidx.test.espresso.Espresso.onIdle(Espresso.java:35)
        at androidx.test.espresso.Espresso.onIdle(Espresso.java:21)
        at androidx.compose.ui.test.junit4.EspressoLink_androidKt.runEspressoOnIdle(EspressoLink.android.kt:92)
        at androidx.compose.ui.test.junit4.EspressoLink.runUntilIdle(EspressoLink.android.kt:79)
        at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.waitForIdle(ComposeUiTest.android.kt:308)
        at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.access$waitForIdle(ComposeUiTest.android.kt:217)
        at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitForIdle(ComposeUiTest.android.kt:391)
        at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitForIdle(AndroidComposeTestRule.android.kt:177)

更新:我发现在布局中的"focusRequester.requestFocus()“之后就会崩溃,但前提是列表中有要求焦点的项。我已经检查过focusRequester不是空的。

更新2:我发现在页面加载时运行"lazyListState.scrollToItem()“会导致此崩溃。对我来说很奇怪,但是,如果我在那个电话之前加上一个延迟,它就能工作了。不过还是像个黑客。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-26 19:14:10

Fix:在我的例子中,我在"lazyListState.scrollToItem()“修饰符中使用了”onFocusChanged()“,这需要一个协同。将代码输出到一个"launchedEffect“中,解决了这个问题

所以改变这个

代码语言:javascript
运行
复制
.onFocusChanged { event ->
    if (event.isFocused) {
        coroutineScope.launch {
            lazyColumnState.scrollToItem(selectedItemIndex, 0)
        }
    }
}

到这个

代码语言:javascript
运行
复制
LaunchedEffect(key1 = hasFocus) {
    if (hasFocus) {
        coroutineScope.launch {
            lazyColumnState.scrollToItem(selectedItemIndex, 0)
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74186588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档