Articles of android espresso

Espresso-web导入会导致duplicateFileException

我正在使用Android Espresso。 我需要espresso-web才能使用webview。 我根据谷歌网站设置了浓缩咖啡。 https://google.github.io/android-testing-support-library/downloads/index.html 我的依赖关系看起来像这样: dependencies { androidTestCompile ‘junit:junit:4.12’ androidTestCompile ‘com.squareup.spoon:spoon-client:1.1.10’ androidTestCompile ‘com.jraska:falcon-spoon-compat:0.3.1’ androidTestCompile ‘com.android.support:support-annotations:23.1.1’ androidTestCompile ‘com.android.support.test:runner:0.4.1’ androidTestCompile ‘com.android.support.test:rules:0.4.1’ androidTestCompile ‘com.android.support.test.espresso:espresso-core:2.2.1’ androidTestCompile ‘com.android.support.test.espresso:espresso-web:2.2.1’ androidTestCompile “org.mockito:mockito-core:1.10.19” androidTestCompile “com.google.dexmaker:dexmaker:1.2” androidTestCompile “com.google.dexmaker:dexmaker-mockito:1.2” } 当我评论espresso-web导入/方法并排除此lib时,测试运行。 但有了它,我得到: Error:Execution failed for task ‘:app:transformResourcesWithMergeJavaResForDebugAndroidTest’. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/maven/com.google.guava/guava/pom.properties File1: /Users/F1sherKK/Dev/MyProject/app/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-web/2.2.1/jars/classes.jar File2: /Users/F1sherKK/Dev/MyProject/app/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-core/2.2.1/jars/classes.jar 似乎是番石榴的一些问题。 Espress-web lib生成两个文件夹:espresso-web,espresso-core。 Espresso-core […]

registerIdlingResources弃用替换不起作用

我正在尝试使用IdlingRegistry方法根据android文档替换我的Espresso registerIdlingResources和unregisterIdlingResources弃用方法。 我的一些测试在更新之前工作,现在不再有效……这些测试单独工作但不能一起工作。 我注意到旧版本( Espresso类)有一些差别, IdlingRegistry类中不存在这一行: baseRegistry.sync(IdlingRegistry.getInstance().getResources(), IdlingRegistry.getInstance().getLoopers()); 我认为这种sync方法对我的自定义IdlingResource非常重要… 如何在没有这条线路的情况下同步我的活套? 谢谢你的帮助。 编辑:我使用EspressoCore 3.0.1与runner / rules 1.0.1 Edit2:已指定弃用的文档链接: 此处和此处 。

使用Espresso和RxJava测试无尽的滚动RecyclerView

我有RecyclerView无尽的滚动。 因此,当用户到达列表中的last – 2位置时,我呼叫服务器以获取更多数据,并且在通话期间,我再添加一个项目 – 进度一个。 现在,我正在尝试用Espresso编写体面的UI测试,它将检查当前无限滚动是否正常工作: @Test public void checkIfProgressShown() { InstaFeed feed = TestDataFactory.makeInstaFeed(20); InstaFeed oldFeed = TestDataFactory.makeInstaFeed(20); when(mockDataManager.getFeedItemsFromServer()).thenReturn(Observable.just(feed.getInstaItems())); when(mockDataManager.getOldFeedItemsFromServer()).thenReturn(Observable.just(oldFeed.getInstaItems()) .delay(2, TimeUnit.SECONDS)); instaActivityActivityTestRule.launchActivity(null); int position = 0; for (InstaItem item : feed.getInstaItems()) { onView(withId(R.id.recycler_view)) .perform(RecyclerViewActions.scrollToPosition(position)); onView(withText(item.getLocation().getName())) .check(matches(isDisplayed())); // Line of crash position++; } onView(withId(R.id.progress)) .check(matches(isDisplayed())); } 所以基本上说,我试图延迟Observable的响应,显示新的一批项目,以便Espresso可以向下滚动到最后一项并使我的progress项可见。 问题在于测试只是堆栈,从UI的角度看它看起来像: 不要混淆这里没有进度条 – 在设备上禁用animation,所以没关系。 最后,小项是有进展的项目 60秒后它崩溃了 […]

Espresso – 使用异步加载的数据断言TextView

我正在使用谷歌Espresso for Android编写UI测试,我一直坚持如何断言TextView文本,该内容是从Web服务异步加载的。 我目前的代码是: public class MyTest extends BaseTestCase{ public void setUp() throws Exception { // (1) Tell the activity to load ‘element-to-be-loaded’ from webservice this.setActivityIntent(new Intent(Intent.ACTION_VIEW, Uri.parse(“data://data/element-to-be-loaded”))); getActivity(); super.setUp(); } public void testClickOnReviews(){ // (2) Check the element is loaded and its name is displayed Espresso .onView(ViewMatchers.withId(R.id.element_name)) .check(ViewAssertions.matches(ViewMatchers.withText(“My Name”))); // (3) Click on the […]

在androidTest文件夹中创建DummyActivity以进行测试

我在androidTest文件夹中创建了一个虚拟活动,并在androidTest文件夹中的AndroidManifest文件中声明了该活动。 我的基本目的是通过使用framelayout容器将其放入虚拟活动来测试可重用片段。 AndroidManife文件夹里面有AndroidManifest.xml 我的测试类TestWidgets.java public class TestWidgets extends ActivityInstrumentationTestCase2 { private AppCompatActivity mActivity; public TestWidgets() { super(DummyActivityForTest.class); } @Override public void setUp() throws Exception { super.setUp(); mActivity = getActivity(); } @Test public void testAddSpecializationClick() { onView(withId(R.id.widgets_rv)).perform( RecyclerViewActions.actionOnItemAtPosition(4, click())); Assert.fail(“Not Implemented”); } 当我运行我的测试类时,它抛出exception, java.lang.RuntimeException: Could not launch activity at android.support.test.runner.MonitoringInstrumentation.startActivitySync(MonitoringInstrumentation.java:373) at android.test.InstrumentationTestCase.launchActivityWithIntent(InstrumentationTestCase.java:119) at android.test.InstrumentationTestCase.launchActivity(InstrumentationTestCase.java:97) at android.test.ActivityInstrumentationTestCase2.getActivity(ActivityInstrumentationTestCase2.java:104) […]

片状Android Espresso测试 – Snackbar

1)所有正在测试的设备/仿真器都禁用了animation。 2)我有一个@BeforeClass来构建我的Credentials对象。 3)我有一个在@Before中注册的IntenServiceIdlingResource和一个EventBusIdlingResource。 4)单击登录按钮时,IntentService将触发。 在这种情况下,服务器(模拟服务器)返回500错误。 该信息通过greenrobot的EventBus从IntentService发回UI,并显示Snackbar并显示错误消息。 这是测试的代码: @Test public void a_userNamePasswordTest() throws Exception { // email input ViewInteraction userNameView = onView(withId(R.id.email)); // verify it’s on screen and enabled userNameView.check(matches(isDisplayed())).check(matches(isEnabled())); // set the username userNameView.perform(scrollTo(), replaceText(credentials.username), closeSoftKeyboard()); // password input ViewInteraction passwordView = onView(withId(R.id.password)); // verify it’s on screen and enabled passwordView.check(matches(isDisplayed())).check(matches(isEnabled())); // set the password. […]

如何旋转活动,我的意思是:使用Espresso改变屏幕方向?

我已经决定使用Google的Espresso进行应用程序测试的测试标准之一是: 测试应在屏幕方向旋转后保持活动状态 使用Espresso时如何旋转屏幕? 我尝试了以下Robotium代码(是的,我在我的Espresso测试中放置了Robotium代码,所以起诉我) solo.setActivityOrientation(solo.LANDSCAPE); solo.setActivityOrientation(solo.PORTRAIT); 但是当我在Espresso测试中运行它时,它会崩溃应用程序。 有没有办法做到这一点? 在此先感谢您的帮助

testUI(jenkins)使用浓缩咖啡

该应用程序在本地传递espresso测试,我的意思是直接到设备和genymotion模拟器。 当我使用Jenkins构建应用程序的图像时。 espresso测试不成功我收到此错误。 JENKINS: java.lang.RuntimeException: Waited for the root of the view hierarchy to have window focus and not be requesting layout for over 10 seconds. If you specified a non default root matcher, it may be picking a root that never takes focus. Otherwise, something is seriously wrong. Selected Root: Root{application-window-token=android.view.ViewRootImpl$W@536a97d4, window-token=android.view.ViewRootImpl$W@536a97d4, has-window-focus=false, layout-params-type=1, […]

运行Espresso测试时,Dagger代码给出NoClassDefFoundError,正常运行正常

开始探索Espresso 2.0,但似乎遇到了打嗝。 我无法让测试成功运行任何包含Dagger的项目。 当我运行测试时,我得到以下exception(最后的整个堆栈跟踪): java.lang.NoClassDefFoundError: com/pdt/daggerexample/model/DaggerExampleAppModule$$ModuleAdapter$ProvideMySingletonProvidesAdapter 应用程序在未从AndroidInstrumentationTest运行时运行。 以下是一些相关文件,我还将项目上传到github,以便更快地结账/复制https://github.com/paul-turner/espressoDaggerExample 。 的build.gradle: apply plugin: ‘com.android.application’ android { compileSdkVersion 21 buildToolsVersion “21.1.2” defaultConfig { applicationId “com.pdt.daggerexample” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” minSdkVersion 16 targetSdkVersion 21 versionCode 1 versionName “1.0” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } debug { minifyEnabled false } } packagingOptions { exclude ‘LICENSE.txt’ exclude […]

如何使用Espresso Idling Resource进行网络呼叫

我试图用Espresso来测试我的用户界面。 当我登录我的应用程序时,我打电话给Parse API(网络电话)来validation用户名和密码。 如果一切顺利,用户将被定向到新活动。 我想测试这个,但我似乎无法使用空闲资源的东西。 码: public class ApplicationTest extends ActivityInstrumentationTestCase2 { private CountingIdlingResource fooServerIdlingResource; public ApplicationTest() { super(LoginActivity.class); } @Before public void setUp() throws Exception { super.setUp(); injectInstrumentation(InstrumentationRegistry.getInstrumentation()); getActivity(); CountingIdlingResource countingResource = new CountingIdlingResource(“FooServerCalls”); this.fooServerIdlingResource = countingResource; Espresso.registerIdlingResources(countingResource); } public void testChangeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.username)) .perform(typeText(“s@s.nl”), closeSoftKeyboard()); […]