2010-10-12 5 views
1

Je viens de commencer avec Robotium et j'ai essayé un premier test très simple, mais je rencontre un problème que je ne peux pas expliquer/qui ne me semble pas logique.Échec du test de Robotium avec: junit.framework.AssertionFailedError: La vue ne peut pas être cliquée!

J'ai un TabHost avec un ActivityGroup et un bouton bascule sur chaque activité qui est affichée dans la section de contenu tabhost. Lorsque j'appuie sur le bouton à bascule, la zone de contenu de l'onglet change en une autre activité (mTabHost.setCurrentTab (intention d'intention);). Chaque activité contient un bouton bascule, toujours avec une étiquette "Toggle". Lorsque je clique sur le bouton bascule de l'activité des secondes, il revient à la première (tout dans la zone de contenu de l'onglet).

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

Maintenant, tout cela fonctionne correctement manuellement, mais pas le test robotium. Lorsque j'essaie de cliquer sur le bouton bascule de la deuxième activité, j'obtiens un message d'erreur "junit.framework.AssertionFailedError: La vue ne peut pas être cliquée!"

C'est mon test - très simple et petit:

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! 

Ce que je ne comprends pas ici: je vérifie que le bouton avec l'étiquette « Toggle » existe et est cliquable, néanmoins, je Je reçois une erreur disant "Cette vue ne peut pas être cliquée.". Et il n'y a qu'un bouton "Toggle" dans l'activité en cours.

liés à cette question, j'ai une autre mineure: Quand je travaille avec TabHost + ActivityGroup, sera « solo.getCurrentActivity() » renvoie toujours l'activité intégrée du ActivityGroup, pas celui de l'extérieur? Peut-on encore accéder à des éléments de l'activité extérieure en solo? Dans mon cas ci-dessus, le bouton bascule fait toujours partie de l'activité interne/intégrée - au cas où cela est important ici.

+0

Ceci est une autre façon cliquer sur les boutons avec l'instumentation. http: //chanakaudaya.wordpress.com/2012/03/31/robotique-bouton-clic-ne-fonctionne-pas/ –

Répondre

2

Je viens de recevoir une réponse de robotium dev, que c'est un problème qui sera corrigé dans Robotium 1.8. Voir Here

0

Au lieu de cela, vous pouvez opter pour JUnit Automation lui-même fourni par Android. Vous pouvez facilement envoyer KeyEvents pour sélectionner l'option de menu & terminer la tâche.

Tout ce que vous devez faire est de créer une méthode JUnit test case dans le code de test qui sélectionne l'option de menu. Suivez ces méthodes ci-dessous: -

  • Activité de lancement dans la méthode d'essai
  • envoyer menu KeyEvent cliquez à l'activité. Lorsque les options du menu sont affichées Envoyer vers le haut, vers le bas, vers la gauche & Les touches de direction à droite pour mettre l'accent sur l'option & envoient l'événement keyevent DPAD CENTER.

Espérons que cela résolvent votre problème. Mais avant cela, vous devez connaître un peu de JUnit & framework de test disponible dans Android sdk ..

+0

Il est déjà corrigé depuis 1.8, et robotium est maintenant sur 2.1. Je pense que la mise en œuvre de ce que Robotium offre dans JUnit représentera beaucoup trop d'efforts, je veux dire qu'il y a une raison pour laquelle des frameworks de test comme celui-là existent. De toute façon, le problème est déjà résolu depuis un moment. À votre santé. –

+0

Ouais, vous avez raison.J'ai repris Robotium il y a quelques mois et j'apprécie vraiment la puissance qu'il offre. L'effort équivalent en JUnit serait énorme. – Neo

1

Vous pouvez utiliser celui-ci:

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

ou:

solo.clickOnView(solo.getView(R.id.B)) 
Questions connexes