在Espresso测试期间处理插页式广告的正确机制是什么?
两个活动之间有插页式广告,我想写两个活动的Espresso测试。
有没有办法在Espresso测试期间关闭插页式广告以继续测试第二个活动?
可以使用Espresso-Intents吗?
或
UIAutomator混合测试和Espresso是解决这个问题的唯一方法吗?
答案 0 :(得分:1)
将此库添加到您的gradle:
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'
然后在展示广告后的Espresso测试中:
Thread.sleep(5000); // Necessary time you needed to show your ads, for example 5 seconds
// After that, press back button to go back
UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
mDevice.pressBack();
如果您的应用在低于18的SDK级别上运行,请使用此代码在您的测试目录src/androidTest/
中创建另一个AndroidManifest.xml文件,以便您的测试将使用minSdkVersion=18
运行(这是所需的API级别) UIAutomator):
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="com.monkingme.monkingme"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-sdk
android:minSdkVersion="18"
tools:overrideLibrary="android.support.test.uiautomator.v18" />
</manifest>
答案 1 :(得分:1)
我最近也遇到了这个问题,所以我只是使用Espresso Test Recorder记录我的近距离广告以查看测试记录的作用,它只使用以下内容:
ViewInteraction imageButton = onView(
allOf(withContentDescription("Interstitial close button"), isDisplayed()));
imageButton.perform(click());
现在可以使用,但我不知道这是否适用于未来的adMob库,并且在更改内容描述后肯定无法工作。
为了将来参考,我使用的是版本11.0.4广告库:
freeCompile 'com.google.android.gms:play-services-ads:11.0.4'
答案 2 :(得分:0)
在Espresso测试期间处理插页式广告的正确机制是什么?
两个活动之间有插页式广告,我想写两个活动的Espresso测试。
有没有办法在Espresso测试期间关闭插页式广告以继续测试第二个活动?
IMO,正确的解决方案是设置您的测试,这样他们就不需要跨越多个活动。
测试应该集中和孤立。您不需要跨越活动来断言行为,因为转换点处存在逻辑分隔。因此,不要写一个测试,说“在活动A中执行x应该在状态y中打开活动B,而在活动B中执行z应该执行此操作”,而不是编写多个测试:
1)“在活动A中执行x应启动打开活动B的意图”(您不关心UI状态或广告),您可以使用Intents API轻松验证。
2)“启动具有给定Intent的活动B(这是您从A到B的转换期望),应该将其初始化为状态y”,您可以通过将Intent传递给您的活动规则来轻松设置在UI上使用匹配器。
3)“在使用状态y启动时在活动B中执行z应执行此操作或”,您可以通过启动活动轻松验证,如(2)所示。
希望有所帮助。
答案 3 :(得分:0)
对于我来说,建议的答案不起作用。 所以这是我的解决方案。
try {
onView(withContentDescription("Interstitial close button")).check(matches(isEnabled()))
onView(isRoot()).perform(ViewActions.pressBack())
} catch (e: NoMatchingViewException) {
}
检查广告是否存在,如果存在,请单击后退按钮。
答案 4 :(得分:0)
创建您自己的没有视图可见性约束的 ViewAction 类:
public static ViewAction myClick() {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return ViewMatchers.isEnabled(); // no constraints, they are checked above
}
@Override
public String getDescription() {
return null;
}
@Override
public void perform(UiController uiController, View view) {
view.performClick();
}
};
}
然后使用它:
onView(withContentDescription("Interstitial close button")).perform(myClick());
这样广告会自动关闭。此外,必须在开发者设置中禁用动画。