我正在运行一个测试,该测试将我带入另一项 Activity 。当我到达那里时,我需要等待对话框消失。
public class StressTest extends ActivityInstrumentationTestCase2<DashboardActivity> {
DashboardActivity activity;
ConsoleActivity consoleActivity;
public StressTest() {
super(DashboardActivity.class);
}
public void setUp() throws Exception {
super.setUp();
activity = getActivity();
}
public void testRun() throws InterruptedException {
schedule();
quickstart();
IP.enterIP();
<-----------FAILS HERE FROM A NPE------------------->
while (consoleActivity.getConnectDialog() != null && consoleActivity.getConnectDialog().isShown()){
Thread.sleep(
}
}
如您所见,我从 DashboardActivity
开始。然后进入 ConsoleActivity
后,我需要检查 ConnectDialog
。如何在不获得 NPE 的情况下做到这一点?
编辑
public void testRun() throws InterruptedException {
schedule();
quickstart();
IP.enterIP();
Thread.sleep(500);
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
Collection<Activity> resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);
Log.d("RESUMED ACTIVITY SIZE", "" + resumedActivities.size());
if(resumedActivities.size() == 1){
consoleActivity = (ConsoleActivity) resumedActivities.iterator().next();
} else {
}
}
});
while (consoleActivity.getConnectDialog() != null && consoleActivity.getConnectDialog().isShown()){
Thread.sleep(1000);
}
日志
Log.d("ACTIVITES", "getClass: " + resumedActivities.iterator().next().getClass().getName() + " ConsoleActivity: " + ConsoleActivity.class.getName());
打印:
D/ACTIVITES﹕ getClass: com.android.lonewolf.activity.console.ConsoleActivity ConsoleActivity: com.android.lonewolf.activity.console.ConsoleActivity
最佳答案
您收到 NullPointerException,因为您的 consoleActivity
未初始化。
将下面的代码放在 while()
之前。
已编辑
Iterator<Activity> iterator;
Activity activity;
Collection<Activity> resumedActivities;
getInstrumentation().runOnMainSync(new Runnable() {
public void run() {
resumedActivities = ActivityLifecycleMonitorRegistry.getInstance()
.getActivitiesInStage(Stage.RESUMED);
iterator = resumedActivities.iterator();
}
}
});
while(iterator.hasNext()){
activity = iterator.next();
if(activity.getClass().getName().equals(ConsoleActivity.class.getName())){
consoleActivity = (ConsoleActivity)activity;
}
}
并导入 ActivityLifecycleMonitorRegistry:
import com.google.android.apps.common.testing.testrunner.ActivityLifecycleMonitorRegistry;
关于android - 使用 Espresso Null Pointer 跨多个 Activity 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20912169/