如何显示Android Robotium测试的进度对话框:

时间:2012-03-30 05:34:07

标签: android testing progressdialog robotium

主要类别:

public class ProgressIndicator {
    static ProgressIndicator instance;
    Context context;
    public static ProgressIndicator getInstance() {

        if (instance == null) {
            instance = new ProgressIndicator();
        }
        return instance;
    }

    private ProgressIndicator() {

    }
    IndicatorThread sd;
    public void showIndicator(Activity activity, String title, String message, boolean flag) {
        sd = new IndicatorThread(activity, title, message, flag);
        sd.start();
    }

    public void dismissIndicator(Activity activity) throws InterruptedException{
        sd.dismiss();
        // sd.join();
    }

    private static class IndicatorThread extends Thread {

        private static final Message listener = null;
        private static String mTitle;
        private static String mText;
        private Activity mActivity;
        private boolean mflag;
        private ProgressDialog mDialog;

        protected boolean dismiss;

        IndicatorThread(Activity activity, String title, String text, boolean flag) {
            super();
            IndicatorThread.mText = text;
            IndicatorThread.mTitle = title;
            this.mActivity = activity;
            this.mflag = flag;
            if (mDialog == null) {
                mDialog = new ProgressDialog(mActivity);
                mDialog.setTitle(mTitle);
                mDialog.setMessage(mText);              
                mDialog.setIndeterminate(true);
                mDialog.setCancelable(true);
                mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

                if(mflag == true){
                    mDialog.setButton("Cancel", listener);
                    mDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                        @Override
                        public void onCancel(DialogInterface arg0) {
                            mDialog.dismiss();
                            interrupt();
                        }
                    });
                }
            }
            mDialog.show();
            mDialog.getWindow().setLayout(160, 350);
            mDialog.getWindow().setGravity(0);
        }

        public void dismiss() {
            dismiss = true;
            mDialog.dismiss();
            System.out.println("notifying..."+dismiss);
            synchronized (this) {
                notifyAll();
            }
        }

        @Override
        public void run() {
            System.out.println("Running..."+dismiss);

            while (!dismiss) {
                System.out.println("waiting..."+!dismiss);

                synchronized (this) {
                    try {
                        wait();
                    } catch (InterruptedException ie) {
                        ie.printStackTrace();
                    }
                }
            }
            System.out.println("Quitting...");
        }
    }
}

从AppController类调用:

private ProgressIndicator progressInstance = null;
public void showWaitingAnimation(Activity parent) {
    progressInstance.showIndicator(AppController.getInstance().currentActivity, "" , "", false);
}

测试类:

public class ProgressIndicatorTest extends
    ActivityInstrumentationTestCase2<MyTestActivity> {

    private Solo solo;

    private ProgressIndicator progressIndicatorInstance;

    public ProgressIndicatorTest() {
        super("com.test.activity",
                MyTestActivity.class);
    }

    protected void setUp() throws Exception {
        AppController.getInstance().startApp(getActivity());
        solo = new Solo(getInstrumentation(), getActivity());
        progressIndicatorInstance = ProgressIndicator.getInstance();
    }

    protected void tearDown() throws Exception {
        try {
            solo.finalize();
        } catch (Throwable e) {
            e.printStackTrace();
        }
        getActivity().finish();
        super.tearDown();
    }

    public void testGetInstance() {
        try {
            ProgressIndicator instance = ProgressIndicator.getInstance();
            assertNotNull(instance);
        } catch (Exception e) {
            fail("Creation of ExceptionDetails get instance failed!");
        }
    }

    public void testShowIndicator()  {
        Log.d("testCase Name:-", "testShowIndicator");

        ProgressIndicator progressInstance = ProgressIndicator.getInstance() ;
        progressInstance.showIndicator(AppController.getInstance().getCurrentActivity(), "" , "", false);
        //AppController.getInstance().showWaitingAnimation(AppController.getInstance().getCurrentActivity());
            solo.waitForDialogToClose(8000);
        try {
            progressInstance.dismissIndicator(AppController.getInstance().getCurrentActivity());
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void testDismissIndicator() {
        Log.d("testCase Name:-", "testDismissIndicator");
        ProgressIndicator progressInstance = ProgressIndicator.getInstance() ;
        progressInstance.showIndicator(AppController.getInstance().getCurrentActivity(), "" , "", false);
        solo.waitForDialogToClose(2000);
        try {
            progressInstance.dismissIndicator(AppController.getInstance().getCurrentActivity());
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //AppController.getInstance().showAppTerminationDialog("", AppController.getInstance().getCurrentActivity());
    }
}

在运行项目时,对话框可见&amp;好好工作。但是在运行测试用例时只能看到黑屏,没有显示对话框(在使用solo.waitForDialogToClose(8000)之后;问题就出现了)。没有错误或异常被抛出,测试用例在Android Junit测试中被传递。如果有人知道如何在机器人测试的情况下显示此进度对话框,请分享。

1 个答案:

答案 0 :(得分:1)

在我的情况下,我可以成功显示进度对话框。 我只是用

boolean showProgressBar = false;
showProgressBar = solo.waitForText("Verifying and Saving Credentials...", 1, 3000);

我希望它也应该对你有用.. :))