当前位置:   article > 正文

Espresso自动化测试的简单使用

espresso自动化

Espresso是谷歌力推的一个UI自动化测试框架,新建一个Andrdoid工程的时候默认就引入了Espresso的核心依赖。

Espresso和UI Automator一样,也是在项目的app/src/androidTest文件夹下编写测试代码

来看个初步案例。

测试testView是否显示

  1. @RunWith(AndroidJUnit4.class)
  2. public class HelloWorldTest {
  3. @Rule
  4. public ActivityTestRule<MainActivity> activityRule =
  5. new ActivityTestRule<>(MainActivity.class);
  6. @Test
  7. public void listGoesOverTheFold() {
  8. onView(withText("Hello World!")).check(matches(isDisplayed()));
  9. }
  10. }
  1. 通过@Rule注解来规定测试的Activity是MainActivity,并且测试完后关闭它
  2. 通过withText方法找到屏幕上的对应的控件
  3. onView方法可以等待寻找完成之后再工作。寻找完成之后,调用check方法来判断该控件是不是已经显示在屏幕上
  4. 点击类旁边的 run Test按钮 测试完成

测试点击页面上的按钮

  1. @Test
  2. public void clickTest(){
  3. onView(withId(R.id.btn_click))
  4. .perform(click())
  5. .check(matches(isDisplayed()));
  6. }
  1. //id为R.id.my_view text为"Hello!"的控件
  2. onView(allOf(withId(R.id.my_view), withText("Hello!")));
  3. //既有text "7" 又有text "item: 0"的控件
  4. onView(allOf(withText("7"), hasSibling(withText("item: 0"))))
  5. .perform(click());

点击按钮,将textview的文字由helloworld改为hello espresso,查看结果。

app中代码:

  1. final TextView textView = findViewById(R.id.tv_text);
  2. findViewById(R.id.btn_click).setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View v) {
  5. textView.setText("Hello Espresso");
  6. }
  7. });

添加新测试:

  1. @Test
  2. public void matchText(){
  3. //点击按钮,将Hello World!改为Hello Espresso!
  4. onView(withId(R.id.btn_click)).perform(click());
  5. //检查TextView上的文字是不是Hello Espresso!
  6. onView(withId(R.id.tv_text)).check(matches(withText("Hello Espresso!")));
  7. }

测试一个页面选号码然后打电话的操作

app中的步骤是这样的,点击“获取号码”按钮,通过startActivityForResult去联系人页面选择一个号码返回保存到成员变量中,然后点击“打电话”按钮通过Intent打开系统打电话的界面。下面是测试代码:

  1. //测试去联系人页面获取一个电话号码
  2. @Test
  3. public void testPickIntent(){
  4. //创建一个Intent用来封装返回的数据
  5. Intent intent = new Intent();
  6. intent.putExtra(ContactsActivity.KEY_PHONE_NUMBER,"123456789");
  7. //验证如果有相应的startActivityOnResult发生,就返回前面自己创建的结果。
  8. intending(IntentMatchers.hasComponent(ComponentNameMatchers.hasShortClassName(".ContactsActivity")))
  9. .respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK,intent));
  10. //点击去联系人页面的按钮
  11. onView(withId(R.id.btn_to_contacts)).perform(click());
  12. //点击打电话的按钮
  13. onView(withId(R.id.btn_call)).perform(click());
  14. //验证打电话的Intent是否发送
  15. intended(allOf(
  16. hasAction(Intent.ACTION_CALL),
  17. hasData("tel:123456789")
  18. ));
  19. }
  • 上面的测试中,intending() 方法用来测试startActivityOnResult,当startActivityOnResult动作发生的时候,就返回自己创建的一个Intent
  • intended() 方法用来测试startActivity打开打电话页面的时候Intent的参数是否正确。

测试打开系统相机获取图片的动作

动作:一个Button,一个ImageView,点击按钮拍照,拍照确定后将图片显示到ImageView上面

  1. @Test
  2. public void testTackPhoto() throws InterruptedException {
  3. //自定义一个拍照返回drawable图片的Intent
  4. Intent picIntent = new Intent();
  5. //把drawable放到bundle中传递
  6. Bundle bundle = new Bundle();
  7. Bitmap bitmap = BitmapFactory.decodeResource(intentsTestRule.getActivity().getResources(), R.mipmap.ic_launcher);
  8. bundle.putParcelable("data", bitmap);
  9. picIntent.putExtras(bundle);
  10. Instrumentation.ActivityResult result =
  11. new Instrumentation.ActivityResult(Activity.RESULT_OK,picIntent);
  12. //判断是否有包含ACTION_IMAGE_CAPTURE的Intent出现,出现就给它返回result
  13. intending(hasAction(MediaStore.ACTION_IMAGE_CAPTURE)).respondWith(result);
  14. //判断ImageView上没有显示drawable
  15. onView(withId(R.id.iv_take_photo)).check(matches(not(hasDrawable())));
  16. //点击拍照按钮去拍照界面
  17. onView(withId(R.id.btn_take_photo)).perform(click());
  18. //判断ImageView上显示了一个drawable
  19. onView(withId(R.id.iv_take_photo)).check(matches(hasDrawable()));
  20. }
  21. private BoundedMatcher<View, ImageView> hasDrawable(){
  22. return new BoundedMatcher<View, ImageView>(ImageView.class) {
  23. @Override
  24. protected boolean matchesSafely(ImageView item) {
  25. return item.getDrawable()!=null;
  26. }
  27. @Override
  28. public void describeTo(Description description) {
  29. description.appendText("是否有drawable");
  30. }
  31. };
  32. }

以上便是一些简单的测试操作,可能有些小bug,供参考理解使用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/647310
推荐阅读
相关标签
  

闽ICP备14008679号