1

リストを反復処理し、各リスト要素をクリックして別のアクティビティを開始することにより、Robotium でいくつかの自動テストを実行しようとしています。私のテストメソッドには以下のコードがあります:

コード:

      solo.assertCurrentActivity("Wrong activity", MainActivity.class);
      //Clicks on the action bar tab
      solo.clickOnText("Charts"); 


      ArrayList<ListView> list = solo.getCurrentListViews();

      for(int i = 0; i < list.size(); i++) {


         //Clicks on the list item assert that the new activity is started
         solo.clickInList(chartPosition);
         solo.assertCurrentActivity("Json Class", JsonActivity.class);
         //Go back to the list  
         solo.goBack();         


     }

上記のコードはどのリスト項目もクリックせず、JUnit テストの結果はすべてのテストに合格したことを示しており、非常に混乱しています。

Robotiumでリストをうまく反復する方法はありますか?

これに似た別の質問を見たことがありますが、答えは代わりに jMock を見ることを示唆していますが、これは役に立ちません。

4

2 に答える 2

1

いくつかの問題があります。

  1. コードはアクティビティ内のすべてのリストビューを反復処理していますが、現在のリストビューでは何も実行していません。
  2. コードはchartPositionの値を示していないため、保証はありません。現在のリストにはその数の項目が含まれています。
  3. 新しいアクティビティが読み込まれるのを待つ必要があると思います。

これを試して:

  for(int i = 0; i < list.size(); i++) {
      assertTrue("There are no listviews in this activity.", list.size() > 0);
      chartPosition = 0;  // just to be safe, point at the first item in the list.
      for(int i = 0; i < list.size(); i++) {
         solo.clickInList(chartPosition, i);  // Note that "i" identifies the ListView

         solo.waitForActivity("name.of.the.expected.activity");

      }
     ...
  }

免責事項-この提案は、純粋にコード検査とRobotium Solo Javadocに基づいています:http ://www.jarvana.com/jarvana/view/com/jayway/android/robotium/robotium-solo/1.4.0/robotium-solo-1.4 .0-javadoc.jar!/com/jayway/android/robotium/solo/Solo.html#clickInList(int)

于 2013-02-26T18:32:07.730 に答える
1

私は以前、これらのヘルパー関数をわずかに異なる状態で使用して、リストビューで必要なもののほとんどを処理しました。

public View getViewAtIndex(final ListView listElement, final int indexInList, Instrumentation instrumentation) {
    ListView parent = listElement;
    if (parent != null) {
        if (indexInList <= parent.getAdapter().getCount()) {
            scrollListTo(parent, indexInList, instrumentation);
            int indexToUse = indexInList - parent.getFirstVisiblePosition();
            return parent.getChildAt(indexToUse);
        }
    }
    return null;
}

public <T extends AbsListView> void scrollListTo(final T listView,
        final int index, Instrumentation instrumentation) {
    instrumentation.runOnMainSync(new Runnable() {
        @Override
        public void run() {
            listView.setSelection(index);
        }
    });
    instrumentation.waitForIdleSync();
}

これらの関数をどこかに保存すると(必要に応じて静的にすることができます...私はそれをしたくないのですが、便利です)

ListView list = solo.getCurrentListViews().get(0);
for(int i=0; i < list.getAdapter().getCount(); i++){
    solo.clickOnView(getViewAtIndex(list, i, getInstrumentation()))
    solo.assertCurrentActivity("Json Class", JsonActivity.class);
    solo.goBack();
}

現在の解決策は、実際には、listView内の要素ではなく、画面上にあるすべてのlistviewを反復処理しようとしています。

于 2013-02-26T22:21:59.030 に答える