Espresso自动化测试(十三)- UiAutomator2与Espresso的结合
来源:互联网 发布:全国电视台直播软件 编辑:程序博客网 时间:2024/05/16 17:21
我们都已经知道Espresso是基于Android instrumentation进行的自动化,而有了解的朋友们应该也是知道的 UiAutomator2.0也是基于 instrumentation的,那这两个是否能够一起使用呢。
我们的答案是可以的。
我们先拿网上的例子来说下简单的应用
import android.support.test.InstrumentationRegistry;import android.support.test.rule.ActivityTestRule;import android.support.test.runner.AndroidJUnit4;import android.support.test.uiautomator.UiDevice;import android.support.test.uiautomator.UiObject;import android.support.test.uiautomator.UiSelector;@RunWith(AndroidJUnit4.class)public class TestContactsSync { @Rule public ActivityTestRule mActivityRule = new ActivityTestRule(LoginActivity.class); UiDevice mDevice; String PEOPLE_APP = "People"; String MY_APP = "XING"; String userContactName = "Android Tester"; @Before public void setUp() throws Exception{ super.setUp(); mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); } @Test public void testContactsSync() throws Exception { // Espresso code: login the user, navigate to contact sync and enable clicking on toggle logInUser(); onView(withText(R.string.sync_button)).perform(click()); onView(withId(R.id.contacts_sync_enable_toggle)).perform(click()); // UIAutomator code: navigate to People app mDevice.pressHome(); UiObject conutactsApp = mDevice.findObject(new UiSelector().text(PEOPLE_APP)); conutactsApp.clickAndWaitForNewWindow(); // UIAutomator code: check that contact is present in it after sync was triggered UiObject contactName = mDevice.findObject(new UiSelector().text(userContactName)); assertTrue(contactName.exists()); // UIAutomator code: navigate back to my app under testm Device.pressHome(); UiObject myApp = mDevice.findObject(new UiSelector().text(MY_APP)); myApp.clickAndWaitForNewWindow(); // Espresso code: turn off contact sync and logout onView(withId(R.id.contacts_sync_enable_toggle)).perform(click()); onView(withId(R.id.logout)).perform(click()); } @After public void tearDown() throws Exception { super.tearDown(); }}
是不是很完美?UIAutomator需要Android 4.3(API Level 18)及更高版本。稍微修改下build.gradle文件即可-添加productFlavors和声明uiautomator依赖。
productFlavors { // The actual application flavor production { minSdkVersion 14 } // Test application flavor for uiautomatior tests test { minSdkVersion 18 }}dependencies { // Instrumentation tests androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.1' androidTestCompile 'com.android.support.test:rules:0.2' // Set this dependency to build and run UI Automator tests androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.0.0'}
最近在测试的过程中又遇到另外一个需要UiAutoamtor解决的问题,在进行修改某个学生头像时,无法判断图片是否已经被修改了。这个貌似Espresso是没办法做到的 所以就需要依赖到Espresso了。
下来是测试的代码
public void editStudentAvatar() { for (int i=0;i<12;i++) { clickAva(); Commons.clickRecyclerViewElementByPos(R.id.fragment_avatars_recyclerView, i); screenStudentAva("/sdcard/1.jpg"); save(); Commons.clickRecyclerViewElementByText(R.id.add_student_recyclerView, studentList.get(0)); screenStudentAva("/sdcard/2.jpg"); Assert.assertTrue(ImageTestUtils.sameAs("/sdcard/1.jpg", "/sdcard/2.jpg")); } } public void screenStudentAva(String storePath) { ImageTestUtils.screenShot(uiDevice); UiObject2 studentAvatar = uiDevice.wait(Until.findObject(By.res("com.seewo.easicare.demo", "edit_student_avatar_imageView")), 500); ImageTestUtils.imageCrop(studentAvatar.getVisibleBounds(), storePath); }
以上的作用主要是获取到对应头像的矩形边框,截取修改前后的图片做比较来判断头像是否修改成功。
参考文章
Espresso和UIAutomator - 完美的结合
0 0
- Espresso自动化测试(十三)- UiAutomator2与Espresso的结合
- (4.5.5.9)Espresso之UiAutomator2与Espresso的结合
- (4.5.5.10)Espresso之Robotium与Espresso的结合
- Espresso 自动化测试的使用
- Espresso 自动化测试(一)
- Espresso 自动化测试(八)- SeekBar的测试
- Espresso 自动化测试(四)-中文字符的输入
- Espresso 自动化测试(五)- onData() 的使用
- Espresso:快速的Android UI自动化测试
- Espresso 自动化测试(二)- 简单入门
- Espresso 自动化测试(十)- RecyclerView
- Android自动化测试框架---Espresso(1)
- Espresso 自动化测试(七)- Viewpager与Listview的使用
- Espresso自动化测试(十一) - IdlingResource
- Android UI自动化测试--Espresso
- Espresso UI自动化测试 一
- Android自动化测试|Espresso-简介
- Android自动化测试|Espresso-list
- java微信开发API解析(二)-获取消息和回复消息
- Shell Script介绍及变量使用
- thinkphp控制器笔记
- JS数据类型(二)typeof操作符
- hdoj 1428 漫步校园【bfs+dfs】
- Espresso自动化测试(十三)- UiAutomator2与Espresso的结合
- 八皇后问题-回溯算法
- 杭电2955-0-1背包
- LPS最长回文子序列
- 抽象工厂模式
- 基于socket,实现用户注册,用户登录,以及文件上传的例子
- 自定义的一个App搜索框
- hdoj 1429 胜利大逃亡(续)【bfs好题】
- 匹配极其相关问题(一)