检查是否使用Android Espresso完全显示TextView的文本

时间:2017-10-23 11:33:19

标签: android android-layout textview android-espresso

在Espresso中,可以检查是否显示视图:

onView(withText("To create a test configuration in Android Studio, complete the following steps")).check(matches(isDisplayed()));

但我需要检查的是我的TextView的文本是否完全显示(而不是TextView本身)。这是我的XML布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="0dp"
        android:layout_height="256dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:background="#fca"
        android:textSize="48sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</android.support.constraint.ConstraintLayout>

如果TextView的文字是&#34;要在Android Studio中创建测试配置,请完成以下步骤,&#34;它没有完全显示出来:

enter image description here

如果文字较短,我会全部看到:

enter image description here

TextView放在ScrollView中不是一种选择。 Autosizing TextViews也不是一种选择。

当然,我可以使用Android Studio中XML布局编辑器的预览视图更改文本并确保它完全显示。但是,如果我有6个区域设置,9个模拟器和5个屏幕要检查。 6 * 9 * 5 = 270个屏幕!手动测试这个东西非常耗时。

3 个答案:

答案 0 :(得分:1)

虽然我没有直接回答您的问题,但以下是建议:

  • 使用伪本地化仅手动测试一次

伪本地化是一种Android中可用的测试方法,它将使用通常会导致UI /翻译问题的测试文本替换您的生产文本。 基本上,如果你的应用程序仍然可以使用伪语言环境阅读,那么你就可以了。

doc如何使用它:https://developer.android.com/guide/topics/resources/pseudolocales.html

  • 从支持库启动版本26.0,您可以在TextView上使用自动调整大小以确保始终显示测试

TextView现在能够自动缩小文本字体大小,使整个文本适合其边界。

doc:https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview.html

答案 1 :(得分:1)

您还可以使用LayoutAsserions.noEllipsizedText()检查截断和椭圆化文本以及Screengrab之类的内容,以便在测试执行期间更改设备的区域设置。

我不确定如何在不启动多个仿真器(设备)的情况下解决设备碎片问题,但我认为您可以通过像素密度对它们进行概括,并在测试运行期间根据需要进行设备旋转。

答案 2 :(得分:0)

LayoutAsserions.noEllipsizedText()似乎仅在文本为椭圆形时才起作用(我已经检查了父视图的限制,以使内部textview截止。

(匹配器isCompletelyDisplayed()也不起作用)

因此决定检查可见的rect以及将其完全显示所需的实际rect。

我的CustomMatcher就是这样

override fun matchesSafely(textView: TextView): Boolean {
    val measuredWidth = textView.measuredWidth
    val measuredHeight = textView.measuredHeight

    // measure is called to find out how big a view should be.
    textView.measure(0, 0)
    val actualWidth: Int = textView.measuredWidth
    val actualHeight: Int = textView.measuredHeight

    return measuredWidth >= actualWidth  && measuredHeight >= actualHeight
}

使用BoundMatcher 。我认为这可以用于我认为任何截断的视图。