Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio AndroidStudio运行录制的浓缩咖啡测试失败_Android Studio_Android Espresso_Android Espresso Recorder - Fatal编程技术网

Android studio AndroidStudio运行录制的浓缩咖啡测试失败

Android studio AndroidStudio运行录制的浓缩咖啡测试失败,android-studio,android-espresso,android-espresso-recorder,Android Studio,Android Espresso,Android Espresso Recorder,我想在AndroidStudio 4.2中录制一个浓缩咖啡测试。录音似乎很好。然而,当我尝试运行记录的测试时,它们运行了大约一半,直到出现活动切换,然后它失败了,因为找不到视图,并且我一直得到NoMatchingViewException 我在第一个活动中点击了很多次,这会触发第二个活动的加载。在运行测试时,尝试在第二个活动中查找视图是不起作用的 @Test fun firstRecordedTest() { val materialButton = onView( al

我想在AndroidStudio 4.2中录制一个浓缩咖啡测试。录音似乎很好。然而,当我尝试运行记录的测试时,它们运行了大约一半,直到出现活动切换,然后它失败了,因为找不到视图,并且我一直得到
NoMatchingViewException

我在第一个活动中点击了很多次,这会触发第二个活动的加载。在运行测试时,尝试在第二个活动中查找视图是不起作用的

@Test
fun firstRecordedTest() {
    val materialButton = onView(
        allOf(
            withId(R.id.key1Button), withText("1"),
            childAtPosition(
                childAtPosition(
                    withClassName(`is`("android.widget.LinearLayout")),
                    0
                ),
                3
            ),
            isDisplayed()
        )
    )
    materialButton.perform(click())
    
    // Activity switches here
    // The following never works

    val matcher: Matcher<View> = allOf(
        withId(R.id.tab_contacts), withContentDescription("Contacts"),
        childAtPosition(
            childAtPosition(
                withId(R.id.navigation_view),
                0
            ),
            1
        ),
        isDisplayed()
    )
    val bottomNavigationItemView = onView(matcher)
    bottomNavigationItemView.perform(click())
    
}
@测试
乐趣第一记录测试(){
val materialButton=onView(
全部(
withId(R.id.Key1按钮),withText(“1”),
儿童体位(
儿童体位(
withClassName(`is`(“android.widget.LinearLayout”),
0
),
3.
),
isDisplayed()
)
)
materialButton.perform(单击())
//活动开关在这里
//下面的方法永远不会奏效
val matcher:matcher=allOf(
withId(R.id.tab_contacts),withContentDescription(“contacts”),
儿童体位(
儿童体位(
withId(右id导航视图),
0
),
1.
),
isDisplayed()
)
val bottomNavigationItemView=onView(匹配器)
bottomNavigationItemView.perform(单击())
}
我曾尝试放置不同种类的计时器等来等待视图加载,但要么它被卡住,要么它失败。我也试过,但运气不好


我错过什么了吗?即使espresso recorder允许,在切换活动后也不可能继续测试吗?

espresso有时会对视图产生不稳定的影响。您是否尝试使用第二个活动中的另一个视图,或删除导致测试失败的视图,并在没有该视图的情况下运行测试?

Espresso有时对这些视图感到不稳定。您是否尝试使用第二个“活动”中的另一个视图,或删除导致测试失败的视图,并在没有该视图的情况下运行测试?

您不需要带浓咖啡的计时器。它将等待活动完全加载,您可以阅读有关它的信息

其次,我自己没有用过录音机,因为它会产生很多噪音。例如下面的代码

val matcher: Matcher<View> = allOf(
        withId(R.id.tab_contacts), withContentDescription("Contacts"),
        childAtPosition(
            childAtPosition(
                withId(R.id.navigation_view),
                0
            ),
            1
        ),
        isDisplayed()
    )
现在,关于测试失败的原因,似乎单击
materialButton
正在执行一些异步工作或某种动画。 您可以像这样禁用build.gradle中的动画

android {
    ...
    testOptions {
        animationsDisabled = true
    }
    ...
}
如果您阅读并总结,espresso应该等待执行任何操作(在您的情况下,单击
选项卡_contacts
)直到消息队列为空,它也将与异步任务同步,但espresso不知道其他异步长时间运行的操作。因此,如果使用一些异步操作,则应该考虑使用空闲资源来进行可靠的测试。 但如果您想快速破解,可以使用以下睡眠方法:

    private fun sleep(millis: Long): ViewAction {
        return object : ViewAction {
            override fun getConstraints(): Matcher<View> {
                return isRoot()
            }

            override fun getDescription(): String {
                return "Going to sleep for " + millis + "milliseconds"
            }

            override fun perform(uiController: UiController, view: View) {
                uiController.loopMainThreadForAtLeast(millis)
            }
        }
    }

你不需要咖啡计时器。它将等待活动完全加载,您可以阅读有关它的信息

其次,我自己没有用过录音机,因为它会产生很多噪音。例如下面的代码

val matcher: Matcher<View> = allOf(
        withId(R.id.tab_contacts), withContentDescription("Contacts"),
        childAtPosition(
            childAtPosition(
                withId(R.id.navigation_view),
                0
            ),
            1
        ),
        isDisplayed()
    )
现在,关于测试失败的原因,似乎单击
materialButton
正在执行一些异步工作或某种动画。 您可以像这样禁用build.gradle中的动画

android {
    ...
    testOptions {
        animationsDisabled = true
    }
    ...
}
如果您阅读并总结,espresso应该等待执行任何操作(在您的情况下,单击
选项卡_contacts
)直到消息队列为空,它也将与异步任务同步,但espresso不知道其他异步长时间运行的操作。因此,如果使用一些异步操作,则应该考虑使用空闲资源来进行可靠的测试。 但如果您想快速破解,可以使用以下睡眠方法:

    private fun sleep(millis: Long): ViewAction {
        return object : ViewAction {
            override fun getConstraints(): Matcher<View> {
                return isRoot()
            }

            override fun getDescription(): String {
                return "Going to sleep for " + millis + "milliseconds"
            }

            override fun perform(uiController: UiController, view: View) {
                uiController.loopMainThreadForAtLeast(millis)
            }
        }
    }

能否共享日志,它们必须包含当前视图层次结构。能否共享日志,它们必须包含当前视图层次结构。