RobotiumでisCheckBoxChecked()が機能しない件の回避策

最近、Robotiumを使ったアプリケーションの評価を試しているのですが、やはりというか一部不安定な機能があります。

たとえば、isCheckBoxChecked()というメソッド。これは、任意のチェックボックスがONになっているかをテストするためのものですが、どのように使ってもfalseが返却されてしまいます。Robotiumのコミュニティにも同様の問題に当たっているケースがありました。

そこで、回避策。

エレガントではないのですが、以下のようにCheckBoxがONであるかをチェックしました。

// 1. 現在表示中のListViewを全て取得
ArrayList<ListView> a = mSolo.getCurrentListViews();
for (int i = 0; i < a.size(); i++) {
    ListView lv = a.get(i);
    // 2. 検査対象のチェックボックス入りListViewの場合
    if (lv.getId() == R.id.sample_checkboxlist) {
        // 3. booleanのマップを取得し
        SparseBooleanArray checked = lv.getCheckedItemPositions();
        // 4. ここでは1行目のチェックボックスがONであるかを検査
        assertTrue(checked.get(0)); 
    }
}

コメント行にも書いてますが、要は、

1. 現在表示中のListViewを全て取得し、
2. その中で検査対象のチェックボックス入りListViewを見つけ、
3. チェック状態(true/false)を格納するbooleanのマップを取得し、
4. そのListViewの中でテストしたい行のチェック状態を検査する。

という流れです。ほぼ勢いで書き殴ったコードの断片ですが(一応検証済み)…ちょっと強引か笑。