How to click on Switch in Android Junit Test?

326 views Asked by At

I used the below code to checked and unchecked on Switch component of Android. How to checked-unchecked on Switch by touch utility in Android Junit Testing?

        // wait 2 seconds for the start of the activity
    final FinalizeCalibrationActivity finalActivity = (FinalizeCalibrationActivity) monitorFinalActivity
            .waitForActivityWithTimeout(2000);
    assertNotNull("FinalizeCalibrationActivity is null", finalActivity);

    final Switch swtSignedRdwPortal = (Switch) finalActivity
            .findViewById(R.id.swt_signed_rdw_portal);

    JunitUtils.waitTime(3);
    swtSignedRdwPortal.setChecked(false);

    JunitUtils.waitTime(3);
    swtSignedRdwPortal.setChecked(true);
1

There are 1 answers

0
user2477865 On BEST ANSWER

We cannot used Switch view directly. It will throw failed assertions like: "android-only-the-original-thread-that-created-a-view-hierarchy-can-touch-its-views".

I've used rewrite the code like this,

// wait 2 seconds for the start of the activity
    final FinalizeCalibrationActivity finalActivity = (FinalizeCalibrationActivity) monitorFinalActivity
            .waitForActivityWithTimeout(2000);
    assertNotNull("FinalizeCalibrationActivity is null", finalActivity);

    final Switch swtSignedRdwPortal = (Switch) finalActivity
            .findViewById(R.id.swt_signed_rdw_portal);

    JunitUtils.waitTime(3);
    finalActivity.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            swtSignedRdwPortal.setChecked(false);
        }
    });

    JunitUtils.waitTime(3);
    finalActivity.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            swtSignedRdwPortal.setChecked(true);
        }
    });

This is working fine for me in Android Junit Test.!!!