2013-06-17 4 views
1

J'ai une application, pour laquelle je veux courir Monkeyrunner (en utilisant Android viewclient)Comment toucher/appuyer sur un bouton/Voir en utilisant AndroidViewClient?

Je suis en train de définir mon point de vue comme

Vc = ViewClient(device, serialno) 
vc.dump 
touchProject = vc.findViewByIdorRaise('id/projectNewGallery') 
touchProject.touch() 

Mais je reçois erreur: ->"com.dtmilano.android.viewclient.ViewNotFoundException: Couldn't find View with ID='id/projectNewGallery' in tree with root=ROOT"

Comment puis-je définir la racine? comme ça ?

touchProject = vc.findViewByIdorRaise('id/projectNewGallery','id/projectMain') 

? /////////////////////////////////////////////// J'essaie d'utiliser l'outil Culebra, mais je reçois erreur suivante.

$ java -jar androidviewclient-2.3.16.jar culebra 
ERROR: monkeyrunner was not found and Windows 7 does not support shebang in scripts. Aborting. 

J'ai aussi essayé de cette façon (non-Shebang OS -> de Windows 7)

$ /cygdrive/c/android-sdk/tools/monkeyrunner.bat -plugin /cygdrive/c/Android_Resources_Hassan/MonkeyRunner_KIneMaster/AndroidViewClient-master/AndroidViewClient/bin/androidviewclient-2.3.22.jar culebra myscript.py 
Plugin file doesn't exist 
Usage: monkeyrunner [options] SCRIPT_FILE 

-s  MonkeyServer IP Address. 
-p  MonkeyServer TCP Port. 
-v  MonkeyServer Logging level (ALL, FINEST, FINER, FINE, CONFIG, INFO, WARNING, SEVERE, OFF) 

Ok j'ai pu exécuter de Windows CMD:

C:\android-sdk\tools>monkeyrunner -plugin C:\Android_Resources_Hassan\MonkeyRunner_KIneMaster\androidviewclient-2.3.24.jar test3_py.py 

mais je suis suite erreur encore:

130619 14:41:15.725:S [MainThread] [com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to an exception 
130619 14:41:15.725:S [MainThread] [com.android.monkeyrunner.MonkeyRunnerOptions]Traceback (most recent call last): 
File "C:\android-sdk\tools\test3_py.py", line 71, in <module> 
touchProject = vc.findViewByIdOrRaise('id/projectNewGallery') 
File "C:\Android_Resources_Hassan\MonkeyRunner_KIneMaster\AndroidViewClient- master\AndroidViewClient\src\com\dtmilano\android\viewclient.py", line 1919, in findViewById 
OrRaise raise ViewNotFoundException("ID", viewId, root) 
com.dtmilano.android.viewclient.ViewNotFoundException: Couldn't find View with ID='id/projectNewGallery' in tree with root=ROOT 

mon fichier de script - -------------------

#! /usr/bin/env monkeyrunner 
''' 
Copyright (C) 2012 Diego Torres Milano 
Created on Feb 3, 2012 

@author: diego 
''' 


import re 
import sys 
import os 

# this must be imported before MonkeyRunner and MonkeyDevice, 
# otherwise the import fails 
try: 
ANDROID_VIEW_CLIENT_HOME = os.environ['ANDROID_VIEW_CLIENT_HOME'] 
except KeyError: 
print >>sys.stderr, "%s: ERROR: ANDROID_VIEW_CLIENT_HOME not set in environment" % __file__ 
sys.exit(1) 
sys.path.append(ANDROID_VIEW_CLIENT_HOME + '/src') 

from com.dtmilano.android.viewclient import ViewClient 


# Imports the monkeyrunner modules used by this program 
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 

#starting script 
print "start" 

# Connects to the current device, returning a MonkeyDevice object 
device, serialno = ViewClient.connectToDeviceOrExit() 


#device connected 
print "connection started" 

# sets a variable with the package's internal name 
package = 'com.example.app.myApp' 

# sets a variable with the name of an Activity in the package 
activity = 'com.example.mainapp.MainActivity' 

# sets the name of the component to start 
runComponent = package + '/' + activity 

# Runs the component 
device.startActivity(component=runComponent) 

#device set to sleep for 4 seconds 
print "wait for 4 seconds" 

# first screen shot event 
MonkeyRunner.sleep(4); 


vc = ViewClient(device, serialno) 
vc.dump() 
root = vc.getRoot() 

#touchProject = vc.findViewWithTextOrRaise('', root) 
touchProject = vc.findViewByIdOrRaise('projectNewGallery') 
touchProject.touch() 


# wait for screenshot to save 
MonkeyRunner.sleep(2); 


# Takes a screenshot 
result1 = device.takeSnapshot() 
     result1.writeToFile('/myPath/shot1.png','png') 


# wait for 3 seconds 
MonkeyRunner.sleep(3); 

est ID tel que défini dans XML android: id = "+ id/newProjectGallery"?

//////////////////////// APRÈS avoir ajouté vc.traverse() dans le code ///////////// //////

J'obtiens l'erreur suivante

130620 10:07:43.775:S [MainThread] [com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to an exception 
130620 10:07:43.775:S [MainThread] [com.android.monkeyrunner.MonkeyRunnerOptions]Traceback (most recent call last): 
File "C:\android-sdk\tools\test.py", line 71, in <module> 
    ViewClient(*ViewClient.connectToDeviceOrExit()).traverse(transform=ViewClient.TRAVERSE_CIT) 
    File "C:\Android_Resources_Hassan\MonkeyRunner\AndroidViewClient- master\AndroidViewClient\src\com\dtmilano\android\viewclient.py", line 1687, in traverse 
    print >>stream, "%s%s" % (indent, s) 
LookupError: unknown encoding 'ms949' 

De plus j'ai couru le code dump-simple.py aussi. Mais je reçois encore la même erreur:

130620 10:07:43.775:S [MainThread] [com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to an exception 
130620 10:07:43.775:S [MainThread] [com.android.monkeyrunner.MonkeyRunnerOptions]Traceback (most recent call last): 
File "C:\android-sdk\tools\dump-simple.py", line 30, in <module> 
    ViewClient(*ViewClient.connectToDeviceOrExit()).traverse(transform=ViewClient.TRAVERSE_CIT) 
File "C:\Android_Resources_Hassan\MonkeyRunner\AndroidViewClient- master\AndroidViewClient\src\com\dtmilano\android\viewclient.py", line 1687, in traverse 
print >>stream, "%s%s" % (indent, s) 
LookupError: unknown encoding 'ms949' 

quelle est la cause? S'il vous plaît aidez-moi ~

Merci

+0

Il y a quelques problèmes d'indentation dans votre code mais je suppose qu'ils sont dus à copier/coller. Il suffit d'ajouter 'vc.traverse()' après 'vc.dump()' et l'arbre entier sera imprimé et vous verrez l'ID ou les uniquesID de vos vues. –

+0

J'ai essayé d'utiliser vc.traverse() après vc.dump(). Je reçois erreur que j'ai posté ci-dessus – Hassan

+0

Vous pouvez le résoudre en changeant l'encodage au début du script. Google pour ce problème. –

Répondre

0

Je vois quelques erreurs dans votre extrait (vérifier cette version corrigée):

vc = ViewClient(device, serialno) 
vc.dump() 
touchProject = vc.findViewByIdOrRaise('id/projectNewGallery') 
touchProject.touch() 

pour simplifier le processus, vous pouvez simplement utiliser culebra pour générer la modèle de script correct que vous pouvez, plus tard, adapter à vos besoins: Lorsque l'écran de l'appareil contient les vues souhaitées:

$ culebra -VC -o myscript.py 

modifier myscript.py pour ajouter l'appel à la méthode touch() et exécuter

$ myscript.py 

L'utilisation des commentaires verbeux (-C) simplifie l'identification des vues si les ID ne sont pas disponibles.

Mise à jour

  1. Tu étais presque là dans votre premier exemple, je pense que le problème devrait être résolu par mon extrait corrigé avant. Le code exécuté, le seul problème est que vous attendez des ID qui ne sont pas là. Rappelez-vous, il n'y a pas ID si l'arrière-plan est UiAutomator, qui est la valeur par défaut back-end pour API> = 16.

  2. Le coureur java attend monkeyrunner être dans le chemin. Il semblerait que /cygdrive/c/Android_Resources_Hassan/MonkeyRunner_KIneMaster/AndroidViewClient-master/AndroidViewClient/bin/androidviewclient-2.3.22.jar n'existe pas. Au moins c'est ce que pense monkeyrunner. Peut-être que vous devriez utiliser \ dans les chemins Windows.

+0

Comment utiliser l'outil Culebra? Je reçois cette erreur:/usr/bin/env: monkeyrunner: Aucun fichier ou répertoire (j'utilise le système Windows et capable d'exécuter un script .py simple en utilisant AndroidViewClient -> Démarrage d'une application/Exemple d'activité et de fonctionnement tel que les paramètres. py) – Hassan

+0

Comment avez-vous couru culebra? –

+0

Alors, est-ce que la première partie de la réponse a résolu votre problème? –

Questions connexes