我有这样的测试设置:
基类:
public class AccessibilityBase {
public static AccessibilityValidator accessibilityValidator;
@BeforeClass
public static void enableAccessibilityChecks() {
accessibilityValidator = AccessibilityChecks.enable().setRunChecksFromRootView(true).setThrowExceptionForErrors(true);
}
...
测试类:
public class LoginAccessibilityTest extends AccessibilityBase {
@Rule
public ActivityTestRule<LoginActivity> activityTestRule = new ActivityTestRule<>(LoginActivity.class, true, false);
@Test
public void testLoginActivity() {
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
Intent intent = new Intent(context, LoginActivity.class);
LoginActivity loginActivity = activityTestRule.launchActivity(intent);
accessibilityValidator.setSuppressingResultMatcher(Matchers.anyOf(
allOf(matchesCheckNames(is("TouchTargetSizeViewCheck")),
matchesViews(withId(R.id.main_button_login)))
));
runAllTests(loginActivity);
}
}
但是,当我运行它时,它仍然失败,并显示以下错误消息:
java.lang.AssertionError:按钮app:id / main_button_login:视图降到触摸目标的最小建议大小以下。最小触摸目标尺寸为48x48dp。实际尺寸为446.0x45.0dp(屏幕密度为3.0)。
您永远都不要抑制失败。
它可以告诉您要纠正的地方。
最小尺寸不是整体尺寸,它是每个方向上的最小值(因此,您可能有一个1000dp
宽按钮,其高度为45dp
,但由于高度不是48dp
的最小值,您仍然会失败])
我知道3dp
似乎什么都不是,但是实际上它们是最小值,您应该尝试超过它们。
想象一下您患有帕金森氏病或脑性瘫痪,您将无法准确地击中小型击中目标,这就是为什么设定最低标准的原因。
将按钮稍大一些,而不是尝试消除错误(3dp
可能不会破坏设计)。
您的每一位客户都会感谢您的帮助。 (想象一下,有人在乘车时试图敲击您的按钮,同样的准确性原则。)