单击按钮时出现Android Espresso错误

Pea*_*ode 7 android ui-testing android-espresso

我正在尝试使用espresso框架为Android APP编写一些UI测试.

现在我只是检查启动画面上是否存在所有元素,然后我尝试单击登录按钮.

单击该按钮时,测试失败,因为我似乎无法理解为什么会发生错误.

我的测试代码是

@RunWith(AndroidJUnit4.class)
@SmallTest
public class WelcomeTest {

  @Rule
  public ActivityTestRule<Welcome> mActivityRule = new ActivityTestRule<>(
          Welcome.class);

  @Test
  public void elements_present() {
      // Check login
      onView(withId(R.id.wv_login)).check(matches(isDisplayed()));
      // Check signup
      onView(withId(R.id.wv_signup)).check(matches(isDisplayed()));
      // Check video
      onView(withId(R.id.videoView)).check(matches(isDisplayed()));
      // Check swipe right
      onView(withId(R.id.videoView)).perform(swipeRight());
      // Check swipe left
      onView(withId(R.id.videoView)).perform(swipeLeft());
  }

  @Test
  public void tap_login() {
      // Tap login button
      onView(withId(R.id.wv_login)).perform(click());
  }

}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

引发者:java.lang.RuntimeException:将不执行操作,因为目标视图与以下一个或多个约束不匹配:至少90%的视图区域显示给用户.

这是什么意思,这是由我的测试方法引起的还是代码中的错误?该应用程序似乎在我的设备上工作得很好.

PS:我已经禁用了espresso文件建议的动画

pio*_*543 15

引发者:java.lang.RuntimeException:将不执行操作,因为目标视图与以下一个或多个约束不匹配:至少90%的视图区域显示给用户.

当任何预期的视图未完全可见时,我会发生这种情况.默认情况下,Espresso会查找在设备屏幕上完全可见的元素.

您的实际设备屏幕似乎没有显示您的登录活动xml文件的完整内容.

  • 您是否使用ScrollViewListView
  • 您的布局如何?
  • 它是否完全显示在测试设备上?

它可能有所帮助:

onView(withId(R.id.wv_login))
    .perform(scrollTo(), click());
Run Code Online (Sandbox Code Playgroud)

我的问题仍然会发生,请你添加你的问题xml或截图.我会解决它;-)


注意:要检查某些内容是否完全可见(这意味着超过90%),您可以使用

onView(withId(R.id.wv_login)).check(matches(isCompletelyDisplayed()));
Run Code Online (Sandbox Code Playgroud)

代替:

onView(withId(R.id.wv_login)).check(matches(isDisplayed()));
Run Code Online (Sandbox Code Playgroud)

在更大的屏幕设备上运行测试,检查它是否仍然存在.

如果您有疑问请随意提问


OYR*_*YRM 6

RuntimeException这里看到java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints: at least 90 percent of the view's area is displayed to the user.View确实,实际上来自于被充分展示的失败。然而,@piotrek1543 给出的答案并没有真正找到解决方案,尽管它充满了非常好的信息。

该问题是由竞争条件引起的。您正在尝试打开该视图,并且在它打开期间您正在尝试单击它。如果时机不对,那么ViewEspresso 框架将有不到 90% 的click(). 您可以按照The Espresso Setup Instructions 中的建议禁用动画来解决该问题

  • 导航到您的手机 Developer Options
  • 设置如下
    • 窗口动画比例 = 0.0x
    • 过渡动画比例 = 0.0x
    • 动画持续时间比例 = 0.0x

我自己的测试表明您可以逃脱只需设置Transition Animation Scale0.0x。可以想象,这是您遇到的竞争条件的完全一致的解决方案。