当前位置: 首页 > 面试题库 >

浓咖啡:如果视图存在,则返回布尔值

范安歌
2023-03-14
问题内容

我正在尝试查看Espresso是否显示了视图。这是一些伪代码来显示我在尝试什么:

if (!Espresso.onView(withId(R.id.someID)).check(doesNotExist()){
   // then do something
 } else {
   // do nothing, or what have you
 }

但是我的问题是.check(doesNotExist())不返回布尔值。这只是一个断言。使用UiAutomator,我可以执行以下操作:

 if (UiAutomator.getbyId(SomeId).exists()){
      .....
   }

问题答案:

测试中的条件逻辑是不可取的。考虑到这一点,Espresso的API旨在引导测试作者远离它(通过明确显示测试动作和断言)。

话虽如此,您仍然可以通过实现自己的ViewAction并将isDisplayed检查(在perform方法内部)捕获到AtomicBoolean中来实现上述目的。

另一个不太优雅的选项-捕获失败的检查引发的异常:

    try {
        onView(withText("my button")).check(matches(isDisplayed()));
        //view is displayed logic
    } catch (NoMatchingViewException e) {
        //view not displayed logic
    }

Kotlin版本,具有扩展功能:

    fun ViewInteraction.isDisplayed(): Boolean {
        try {
            check(matches(ViewMatchers.isDisplayed()))
            return true
        } catch (e: NoMatchingViewException) {
            return false
        }
    }

    if(onView(withText("my button")).isDisplayed()) {
        //view is displayed logic
    } else {
        //view not displayed logic
    }


 类似资料:
  • 但是,如果要单击RecycerView中的随机项怎么办?

  • > 我想根据里面的变量文本'job#'单击特定的回收器视图。 但无法执行相同的操作,因为我不知道应该单击的确切位置。 回收器视图的位置不断变化。尝试下面的代码,但它点击静态位置'6' recyclerView=onView(allOf(withId(r.id.recycler_view),issplayed()));recyclerview.perform(actionOnItemAtPositi

  • 我目前正在使用Espresso对一个Android应用程序进行编程截图。我正在成功地使用 问题是,根据官方浓缩咖啡文档的以下假设: 消息队列为空。 当前没有正在执行任务的AsyncTask实例。 所有开发人员定义的空闲资源都是空闲的。 通过执行这些检查,Espresso大大增加了在任何给定时间只能发生一个UI操作或断言的可能性。此功能为您提供了更可靠和可靠的测试结果。 当运行时,我无法执行任何测试

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

  • 我有一个矢量绘图,我想用浓咖啡测试。 矢量可绘制:ic_video_24dp 我有没有办法用浓缩咖啡对矢量绘图进行UI测试?任何帮助都将不胜感激。