您好我必须为我的活动编写一个测试但在此之前Activity
SplashActivity
必须首先运行2500毫秒。
我的测试班:
@RunWith(AndroidJUnit4.class)
public class GuestActivityTest{
@Rule
public ActivityTestRule<GuestActivity> mActivityTestRule = new ActivityTestRule<GuestActivity>(GuestActivity.class, true, false){
@Override
protected void afterActivityLaunched() {
super.afterActivityLaunched();
}
};
@Test
public void goToMenuActivity() {
onView(withId(R.id.button_log_in)).perform(typeText("Works"));
onView(withId(R.id.menu_btn)).perform(click());
}
}
测试每次都崩溃,因为SplashActivity
中的初始化尚未执行。如何让espresso知道Activity
已经加载或等待SplashActivity
先完成?
答案 0 :(得分:1)
在测试用例开始时可能会有延迟动作
D:\Programme\Python\Python37
D:\Programme\Python\Python37\Scripts
waitFor函数:
onView(isRoot()).perform(waitFor(5000));
经过测试(是)
答案 1 :(得分:1)
正如Shurov所建议的那样,我认为方法是使用Espresso闲置资源。为此,请先添加依赖项
object EspressoIdlingResource {
private val CLASS_NAME = "EspressoIdlingResource"
private const val RESOURCE = "GLOBAL"
@JvmField val countingIdlingResource = CountingIdlingResource(RESOURCE)
fun increment() {
countingIdlingResource.increment()
}
fun decrement() {
if (!countingIdlingResource.isIdleNow) {
countingIdlingResource.decrement()
}
}
}
然后将此类添加到您的项目中
@Before
fun setUp() {
IdlingRegistry.getInstance().register(EspressoIdlingResource.countingIdlingResource)
}
@After
fun tearDown() {
IdlingRegistry.getInstance().unregister(EspressoIdlingResource.countingIdlingResource)
}
完成此操作后,在启动启动活动时添加EspressoIdlingResource.increment(),并从其离开时添加EspressoIdlingResource.decreasment()。
然后将其添加到测试类中。
istream&
此后,您的测试应自动等待您的SplashActivity完成。
这是关于主题https://developer.android.com/training/testing/espresso/idling-resource的Google页面。
答案 2 :(得分:0)
我还不擅长,因此不能建议使用现成的代码,但请尝试寻找Idling Resource
,等待启动画面结束
答案 3 :(得分:0)
创建一个可以将splashScreen的角色和该活动的角色相结合的活动
答案 4 :(得分:-1)
试试这个:
休眠线程以匹配应用程序的执行延迟。
@Test
public void goToMenuActivity() {
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
onView(withId(R.id.button_log_in)).perform(typeText("Works"));
onView(withId(R.id.menu_btn)).perform(click());
}