2012-03-30 16 views
1

メインクラス:のAppControllerクラスからアンドロイド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..."); 
     } 
    } 
} 

コール:

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()); 
    } 
} 

プロジェクトを実行している間、ダイアログは正しく表示されます&。しかし、テストケースを実行している間は黒い画面しか表示されません。ダイアログは表示されません(solo.waitForDialogToClose(8000)を使用した後に問題があります)。エラーや例外はスローされず、テストケースはAndroid Junitテストで渡されます。ロボティクステストの場合に、この進捗ダイアログを表示する方法を知っている方は、ぜひご連絡ください。

答えて

1

私の場合、進捗ダイアログを正常に表示できます。 は、私は単に..私は、それはまたあなたのために働く必要があります願っています

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

を使用:)

+0

私が使用した前述のように.................. ............. ProgressIndicator progressInstance = ProgressIndicator.getInstance(); progressInstance.showIndicator(AppController.getInstance()。getCurrentActivity()、 ""、 ""、false); //AppController.getInstance()。showWaitingAnimation(AppController.getInstance()。getCurrentActivity()); solo.waitForDialogToClose(8000);しかし、それは動作していません....しかし、アプリケーションではその作業 – Sayan

+0

そして、もし私がsolo.waitForTextでチェックすると、それはテキストを取得していますが、スクリーンは黒のみだったことを返します。 – Sayan

関連する問題