2012-03-30 4 views
1

Hauptklasse:Wie Fortschritt Dialog für Android Robotium Test anzeigen:

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..."); 
     } 
    } 
} 

Anruf von AppController Klasse:

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

Testklasse:

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

Während der Ausführung des Projekts ist der Dialog sichtbar & funktioniert ordnungsgemäß. Aber während der Test läuft, wird nur ein schwarzer Bildschirm angezeigt, es wird kein Dialog angezeigt (nachdem solo.waitForDialogToClose (8000) verwendet wurde; Problem ist da). Es wird kein Fehler oder eine Ausnahme ausgelöst und die Testfälle werden im Android Junit-Test bestanden. Wenn jemand eine Idee hat, wie man diesen Fortschrittsdialog im Falle eines Roboter-Tests anzeigt, bitte teilen.

Antwort

1

In meinem Fall kann ich Fortschrittdialoge erfolgreich anzeigen. ich einfach verwendet

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

Ich hoffe, es sollte auch für Sie arbeiten .. :)

+0

wie früher erwähnt habe .................. ............. ProgressIndicator progressInstance = ProgressIndicator.getInstance(); progressInstance.showIndicator (AppController.getInstance(). GetCurrentActivity(), "", "", false); //AppController.getInstance(). ShowWaitingAnimation (AppController.getInstance(). GetCurrentActivity()); solo.waitForDialogToClose (8000); aber es funktioniert nicht .... aber in der Anwendung funktioniert es – Sayan

+0

Und wenn ich mit dem solo.waitForText überprüfe, gibt es zurück, dass es den Text erhält, aber der Bildschirm war nur schwarz. – Sayan

Verwandte Themen