Articles of android espresso

什么id名称约定对Kotlin android扩展很有用

使用Kotin android扩展我可以避免使用findViewById ,但我不知道如何命名id以便使用它。 我发现有两种选择: 使用ids的简单名称, 但如果我将其与片段一起使用,我可能会遇到问题 : android.support.test.espresso.AmbiguousViewMatcherException:’with id:… / mainLayout’匹配层次结构中的多个视图。 这是因为我在TabLayout中有两个具有相同ID的片段: <LinearLayout android:id="@+id/mainLayout" 所有者姓名: “@+id/loginMainLayout”和”@+id/signUpMainLayout” 但后来我将不得不使用像signUpMainLayout.doSomething()这样的variables。 注意:我不喜欢在这种情况下使用_ ,因为这不是一个好的代码风格 。 还有什么其他选择?

Android在每次测试开始时撤消权限

我正在使用Espresso和UIAutomator来编写我的测试用例。 我正在测试外部存储权限,当它被拒绝时以及何时被允许。 我有不同的测试用例,所有测试用例都需要在测试用例开始时撤销权限。 但是,某些测试用例应该并且确实会导致授予权限,因此我需要在执行下一个测试时撤消该权限。 我一直在搜索,我遇到的最接近的事情是使用pm管理器执行adb shell命令来撤销权限。 但是,通过这样做,我将收到以下错误,由于“进程崩溃”,Instrumentation运行失败。 有没有什么办法可以确保在每个测试用例开始时撤销权限? 如果没有,如何解决有关测试权限的问题? 提前谢谢你的帮助! 这是我目前在每个测试用例之前撤消权限的代码片段(不起作用): @Before public void setUp() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getInstrumentation().getUiAutomation().executeShellCommand( “pm revoke ” + getTargetContext().getPackageName() + ” android.permission.WRITE_EXTERNAL_STORAGE”); } } 尝试使用上面的代码段撤消权限时出现相应的错误消息: Test failed to run to completion. Reason: ‘Instrumentation run failed due to ‘Process crashed.”. 我也遇到过这两个post: 这个和这个 。

使用Espresso识别意图时出错

我有两个应用程序通过意图相互交互。 我想validation一下,假设App A在没有实际启动App B的情况下正确调用App B的startActivity 。 我尝试了各种intending组合,Espresso仍然通过意图启动App B ,而不是仅仅将其删除。 这会导致其他测试失败,因为UI被App B阻止。 有任何想法吗? @RunWith( AndroidJUnit4.class ) @LargeTest public class MyActivityUiIntentsTest { @Rule public IntentsTestRule activityRule = new IntentsTestRule( MyActivity.class, true, false ); @Test public void shouldStartOtherActivityWhenButtonClicked () { Intents.init(); intending( toPackage( “my.package” ) ) .respondWith( new ActivityResult( Activity.RESULT_OK, null ) ); activityRule.launchActivity( new Intent() ); onView( […]

如何运行Travis-CI和Espresso测试

我目前设置了Travis-CI,以便在我的Android设备的每个版本上运行gradle ConnectedCheck任务并执行我的所有unit testing。 我已经能够成功地设置它。 我现在正在尝试用Espresso构建一些function测试,我目前遇到很多困难,设置Travis的方式使我的espresso测试可以与Travis的模拟器交互。 我如何设置Travis以使其模拟器的工作方式与我在本地工作站上使用的模拟器完全相同? 这是我用来构建模拟器的.travis.yml的一部分。 language: android jdk: oraclejdk7 env: matrix: – ANDROID_TARGET=android-19 ANDROID_ABI=armeabi-v7a android: components: – build-tools-20.0.0 – build-tools-19.1.0 before_script: # Create and start emulator – echo no | android create avd –force -n test -t $ANDROID_TARGET –abi $ANDROID_ABI – emulator -avd test -no-skin -no-audio -no-window & – android-wait-for-emulator – adb shell […]

多次运行espresso测试

有时我在申请中遇到了罕见的错误。 但我不能重现它,因为它非常罕见。 所以,我决定写简单的浓咖啡测试: @RunWith(AndroidJUnit4::class) @LargeTest class MainActivityTest { val password = “1234” @Rule @JvmField var mActivityRule: ActivityTestRule = ActivityTestRule(MainActivity::class.java) @Test fun checkNotesListNotEmpty() { onView(withId(R.id.password_edit_text)).perform(typeText(password)) onView(withId(R.id.notes_recycler_view)).check { view, noMatchingViewException -> if (noMatchingViewException != null) throw noMatchingViewException assertThat((view as RecyclerView).adapter.itemCount, Matchers.`is`(1)) } } } 如何在匹配失败时循环此测试并停止它?

使用espresso从测试中调用测试活动的方法并查看其结果

我正在创建Android应用程序。 我正在使用Espresso进行测试。 我有一个方法的活动: public void render(Recipe recipe){ //draw the recipe to the activity } 我想测试一下这个方法是否正常工作。 不工作的解决方案1 我测试了以下内容 @Test public void viewPaintsRecipes() { final Activity activity = activityRule.launchActivity(new Intent()); ((MainActivity)activity).render(Arrays.asList(new Recipe[]{recipe})); onView(withId(R.id.text)).check(matches(withText(recipe.toString()))); } 我得到一个例外。 只有创建视图层次结构的原始线程才能触及其视图。 不工作的解决方案2 我也尝试将两行放在主线程中由Handler运行的runnable中,但测试挂起。 我该怎么做到这一点? 笔记 我附上了完整的测试。 请注意,我也使用匕首和Mockito。 @RunWith(AndroidJUnit4.class) @LargeTest public class MainActivityTestWithMockPresenter { Recipe recipe = new Recipe(“sampleTitle”); @Rule public ActivityTestRule activityRule […]

使用Espresso进行相机操作UI测试

我需要使用espresso测试项目自动化我的UI测试以进行以下操作。 操作: 单击打开手机摄像头的按钮。 捕获图像,并将图像保存在SD卡存储中。 完成后还要在屏幕上更新小图像视图。 应用程序工作正常但是对于所有其他操作和类似的上述操作types,一次又一次地手动测试它变得耗时。

是否可以使用浓缩咖啡拍摄屏幕截图并测试像素值?

我开始使用espresso并编写了一些简单的UI测试,用于点击按钮,输入文本并检查是否所有内容都应该存在。 现在我想截取屏幕截图并测试一些像素值,但我找不到办法做到这一点。 有人有什么建议吗? 甚至可以用浓缩咖啡吗?

Android Espresso ListView点击项目

我有ListView与图片和文字。 当我尝试点击项目时,我收到错误 android.support.test.espresso.AmbiguousViewMatcherException: ‘with id: com.cifrasoft.telefm:id/cardsGridView’ matches multiple views in the hierarchy. Problem views are marked with ‘****MATCHES****’ below. 我使用以下代码: onData(hasToString(startsWith(“Item Text”))) .inAdapterView(withId(R.id.cardsGridView)) .perform(click()); 我可以使用Adapter位置单击ListView ,没有匹配或startWith ?

Espresso测试失败:想要匹配1个意图,实际匹配2个意图

我在使用espresso测试活动启动时遇到此错误。 android.support.test.espresso.base.DefaultFailureHandler $ AssertionFailedWithCauseError:想要匹配1个意图。 实际上匹配了2个意图。 令人惊讶的是,相同代码的其他活动启动测试正在通过。 @RunWith(AndroidJUnit4.class) public class HomeActivityTest { @Rule public final IntentsTestRule mHomeActivityRule = new IntentsTestRule(HomeActivity.class); @Test public void testFundTransferActivityStarted() { onView(withId(R.id.button_fund_transfer)).perform(click()); intended(hasComponent(“mypackage.FundTransferActivity”)); } } 按钮单击只需使用startActivity启动FundTransfer活动。