1

Robotium を使い始めたばかりで、最初の非常に簡単なテストを試みましたが、説明できない問題が発生したり、論理的に思えません。

タブホストのコンテンツ セクションに表示される各アクティビティに、ActivityGroup とトグル ボタンを備えた TabHost があります。トグル ボタンを押すと、タブ コンテンツ エリアが別のアクティビティ (mTabHost.setCurrentTab(Intent intent);) に変わります。すべてのアクティビティには、このようなトグル ボタンがあり、常に "Toggle" というラベルが付いています。秒のアクティビティのトグル ボタンをクリックすると、最初のアクティビティに戻ります (すべてタブ コンテンツ エリア内)。

|-----------------|
| TabHost |       | 
|-----------------| 
|                 | 
| Toggle-Button   | 
|                 | 
| (ActivityGroup: | 
| Activities      | 
| change in here) |
|                 | 
|-----------------|

さて、手動ではこれはすべて正常に機能しますが、ロボティウム テストでは機能しません。2 番目のアクティビティのトグル ボタンをクリックしようとすると、「junit.framework.AssertionFailedError: View can not be click!」というエラー メッセージが表示されます。

これは私のテストです - 非常にシンプルで小さいです:

    solo.sleep(5000);
    solo.waitForActivity("StartTabsActivity", 10000);

    solo.clickOnButton("Toggle");
    // this will swap the activity inside the tabhost content section

    solo.sleep(5000);
    solo.waitForActivity("StatusListActivity", 5000);

    solo.assertCurrentActivity("Expected StatusList activity", "StatusListActivity");

    LogUtils.logD("robotium: button label: " + solo.getButton(1).getText()); 
    // ... outputs: robotium: button label: Toggle

    LogUtils.logD("robotium: button clickable: " + solo.getButton(1).isClickable()); 
    // ... outputs: robotium: button clickable: true

    solo.clickOnButton("Toggle");   
    // ... throws: junit.framework.AssertionFailedError: View can not be clicked!

ここで理解できないこと: 「トグル」ラベルの付いたボタンが存在し、クリック可能であることを確認していますが、「このビューはクリックできません」というエラーが表示されます。また、それぞれの現在のアクティビティには「トグル」ボタンが 1 つしかありません。

この質問に関連して、もう 1 つマイナーなものがあります。TabHost + ActivityGroup を使用する場合、「solo.getCurrentActivity()」は常に、外側のアクティビティではなく、ActivityGroup の埋め込みアクティビティを返しますか? ソロはまだ外部アクティビティの要素にアクセスできますか? ただし、上記の場合、トグルボタンは常に内部/埋め込みアクティビティの一部です-ここで問題になる場合に備えて。

4

3 に答える 3

2

robotium dev から、これは Robotium 1.8 で修正される問題であるという返信がありました。ここを見る

于 2010-10-12T10:14:43.443 に答える
1

これを使用できます:

solo.clickOnView(solo.getView("Toggle"))

また:

solo.clickOnView(solo.getView(R.id.B))
于 2015-02-12T09:46:16.507 に答える
0

代わりに、Android が提供する JUnit Automation 自体を使用できます。KeyEvents を簡単に送信して、メニュー オプションを選択し、タスクを終了できます。

必要なことは、メニュー オプションを選択するテスト コードで JUnit テスト ケース メソッドを作成することだけです。以下の方法に従ってください: -

  • テスト メソッドでアクティビティを起動する
  • keyevent メニューのクリックをアクティビティに送信します。メニューオプションが表示されたら、上、下、左、右のキーイベントを送信してオプションにフォーカスを移し、キーイベント DPAD CENTER を送信します。

これで問題が解決することを願っています。ただし、その前に、Android SDK で利用可能な JUnit とテスト フレームワークについて少し知っておく必要があります。

于 2011-01-31T11:46:37.937 に答える