在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;它没有完全显示出来:
如果文字较短,我会全部看到:
将TextView
放在ScrollView
中不是一种选择。
Autosizing TextViews也不是一种选择。
当然,我可以使用Android Studio中XML布局编辑器的预览视图更改文本并确保它完全显示。但是,如果我有6个区域设置,9个模拟器和5个屏幕要检查。 6 * 9 * 5 = 270个屏幕!手动测试这个东西非常耗时。
答案 0 :(得分:1)
虽然我没有直接回答您的问题,但以下是建议:
伪本地化是一种Android中可用的测试方法,它将使用通常会导致UI /翻译问题的测试文本替换您的生产文本。 基本上,如果你的应用程序仍然可以使用伪语言环境阅读,那么你就可以了。
doc如何使用它:https://developer.android.com/guide/topics/resources/pseudolocales.html
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