当前位置: 首页 > 知识库问答 >
问题:

带提示的Android浓缩咖啡测试不起作用

郎宏逸
2023-03-14

我目前正在尝试添加Espresso UI测试到我的Android应用程序,我希望能够通过它的提示字段目标TextInputEditText,然后点击它并输入一些文本。(我知道目标ID是更好的做法,但在本例中,我需要目标提示)

以下是我尝试这样做的方法:

Espresso.onView(Matchers.allOf(Matchers.instanceOf(TextInputEditText::class.java),
            ViewMatchers.withHint("My Hint"))).
            perform(ViewActions.click(), ViewActions.typeText("type this"))

但是,当尝试执行此操作时,我会得到以下错误:

TextInputEditText{id=2131820762,res-name=input_data,visibility=visible,width=1328,height=168,has-focus=true,has-focusable=true,has-window-focus=true,is-clickable=true,is-enabled=true,is-focused=true,is-focused=true,is-layout-requested=false,is-selected=false,root-is-layout-requested=false,has-input-connection=true ULL ActionLabel=NULL ActionId=0 InitialSelStart=0 InitialSelend=0 InitialCapsMode=0x0 HintText=My Hint Label=NULL PackageName=NULL FieldId=0 FieldName=NULL Extras=NULL HintLocales=NULL ContentMimetypes=NULL],x=0.0,y=0.0,text=,input-type=524433,ime-target=true,has-links=false}

ViewMatchers.WithHint方法是在浓缩咖啡中被破坏了,还是有一种特殊的使用方法?为什么它找不到视图,但在输出中实际显示它在层次结构中?

共有1个答案

司徒高丽
2023-03-14

在Logcat中的打印可能会产生误导。如果TextInputeDitText是启用了hint的TextInputLayout的子视图,则TextInputLayout将通过TextInputLayout.sethint在内部设置相同的提示,然后将TextInputeDitText上的提示设置为NULL。

您需要创建一个自定义匹配器来匹配TextInputedIttext的提示,作为解决方案:

fun withHint(title: String): Matcher<View> = withHint(equalTo(title))

fun withHint(matcher: Matcher<String>): Matcher<View> = object : BoundedMatcher<View, TextInputEditText>(TextInputEditText::class.java) {
    override fun describeTo(description: Description) {
        description.appendText("with hint: ")
        matcher.describeTo(description)
    }

    override fun matchesSafely(item: TextInputEditText): Boolean {
        val parent = item.parent.parent
        return if (parent is TextInputLayout) matcher.matches(parent.hint) else matcher.matches(item.hint)
    }
}

只需将viewmatchers.withint(“我的提示”)替换为textinputedittextcustommatchers.withint(“我的提示”)

 类似资料:
  • 浓缩咖啡测试很烦人,因为像这样的代码 给出如下错误

  • 我在做Espresso测试时遇到了一个问题,我知道Espresso不能处理动画,所以我在下面做了。-禁用我的测试设备窗口动画,过渡动画和动画师持续时间比例都设置为关闭(这不起作用)-然后我试图在我的代码中添加一个标志(如。espresso_testing=true。如果为true,我的代码将跳过调用所有startAnimation()函数调用。--->这很管用。然而,在编写espresso测试用例

  • 我很难说服新的Android构建系统运行测试。在运行测试时,它给出了错误,这在其他问题中已经讨论过,但其中没有任何问题能够解决我的问题。 我已经将它剥离下来,这样我的测试包就完全不依赖于主包(),但仍然存在启动活动的问题。 我的测试活动: 和我的测试类: 建筑的相关部分。等级: 我获得的完整堆栈跟踪是: 我没有包括我的,因为我读到的所有内容都表明,我不需要为添加意图,但是我无论如何都试图这样做,结

  • 我有一个MainMenu活动,它从文件中获取数据并显示出来。我希望数据在每次浓缩咖啡测试开始时被删除,并且在测试之间不会持续。 我尝试了以下方法: 但是,它不会删除文件。我认为上下文可能不正确。有没有办法在浓缩咖啡测试开始时清除内部存储? 这些文件是。ser '文件。

  • 在我的主要活动中,我有initUi函数,它将触发对webviewActivity的意图,在webviewActivity中,有一个FragWebView,其中加载了url。 以下是来自FragWebView的示例代码: 我从我的主要活动中传递打开webview的意图是: 请让我知道如何解决这个问题。 问候

  • 本文向大家介绍Android 设置意式浓缩咖啡,包括了Android 设置意式浓缩咖啡的使用技巧和注意事项,需要的朋友参考一下 示例 在build.gradle您的Android应用模块的文件中,添加下一个依赖项: 在文件中AndroidJUnitRunner为testInstrumentationRunner参数指定build.gradle。 此外,添加此依赖项以提供意图模拟支持 并将其添加为w