Androidのテストアプリ(テスト自体もいわゆるAndroidアプリなのです)から、テスト対象アプリのUIを制御する場合は、対象アプリと同じスレッドで実行する必要があるため、

Activity.runOnUiThread(Runnable action)

を使用します。

Button1にフォーカスをセットして、エンター。

public void testButton1() {
    Activity a = this.getActivity();
    final Button b = (Button) a.findViewById(対象アプリパッケージ.R.id.button1);
    
    a.runOnUiThread(new Runnable() {
        public void run() {
            b.requestFocus();
        }
    });
    this.sendKeys(KeyEvent.KEYCODE_ENTER);

}

@UiThreadTest は必要ありません!

テストクラスがinstrumentation-based classes 
実際には
ActivityInstrumentationTestCase2<T>
になるのですが、その場合は@UiThreadTestは必要がないどころか、指定してしまうと、UIスレッド以外から呼び出しが全くできなくなってしまいます。
sendKeysとかが呼び出せなくなるので、実質テストが出来ません。

じゃあ、なんで最初はエラーになったのかー、と思いよくよく見てみると、
runOnUiThread呼出の後に何の処理も記述されてないと、UIスレッドで実行されるrunメソッド内部の処理が実行される前に、テストの方のスレッドが終了しちゃってるからか? 

sendKeysとかの処理を追加したら、何ら問題なくテストできました。

詳しくは、
http://developer.android.com/guide/topics/testing/testing_android.html#UITesting