Androidtesting:如何检查对话框是否显示在屏幕上? (使用ActivityInstrumentationTestCase2)

我试图最后添加UItesting到我的Android应用程序,以增加覆盖面(所有我的其他层都经过了正确的testing,因此我所有的错误现在来自UI …)我开始使用ActivityInstrumentationTestCase2作为我的基类仿真器unit testing和简单的事情很容易检查和工作很好。

但现在,我试图检查一个对话框出现的预期,我不知道该怎么做。

我的testing:

 public void testOpensAboutDialogWhenAboutButtonClicked() { final MyActivity activity = getActivity(); final Instrumentation instrumentation = getInstrumentation(); final Button aboutButton = (Button) activity.findViewById(R.id.about); TouchUtils.clickView(this, aboutButton); // how to test for the AboutDialog? } 

现在我的对话框没有一个id,所以我不能使用findViewById得到一个指针。 它是使用可用的构build器类创build的:

 final AlertDialog about = new AlertDialog.Builder(parent) .setTitle(parent.getString(R.string.about_title)) .setCancelable(true) .setIcon(R.drawable.skull) .... 

任何想法,或教程指针?

编辑:为了回答Jens的评论,我没有使用托pipe对话框,只是创buildAlertDialog并显示.show()

Solutions Collecting From Web of "Androidtesting:如何检查对话框是否显示在屏幕上? (使用ActivityInstrumentationTestCase2)"

由于您已经在使用ActivityInstrumentationTestCase2您应该开始使用Robotium – 它将简化您的testing。

对于你的情况,这很容易(如果你知道预期的标题或其他对你的对话模糊不清):

 public void testSomeRandomSentence() { Solo solo = new Solo(getInstrumentation(), getActivity()); getInstrumentation().waitForIdleSync(); // Now do whatever you need to do to trigger your dialog. // Let's assume a properly lame dialog title. assertTrue("Could not find the dialog!", solo.searchText("My Dialog Title")); } 

通过setUp()将Toast赋给Toast之后

 toast = (Toast)activity.findViewById(..........); 

创buildtestcase(){

 ViewAsserts.assertOnScreen(toasts.getRootView(), toast.getRootView()); //pass if toast is visible on screen 

}

添加一个getter到你的对话框,如:

 public AlertDialog get_aboutbox() { return this.about; } 

那么在这里你的testing解决scheme:

 public void testOpensAboutDialogWhenAboutButtonClicked() { final MyActivity activity = getActivity(); assertNotNull("aboutbox is null",activity.get_aboutbox()); final Instrumentation instrumentation = getInstrumentation(); final Button aboutButton = (Button) activity.findViewById(R.id.about); TouchUtils.clickView(this, aboutButton); assertTrue("About Button didn't displayed the Dlg", activity.get_aboutbox().isShowing()); }