2017-02-10 6 views
0

У меня есть приложение для Android, которое я пытаюсь проверить с помощью culebra. Код показан ниже.Нажатие кнопок «текстом» на Android-приложении с использованием Culebra

'''reated on 2017-02-08 by Culebra v12.5.3 
         __ __ __ __ 
        /\/\/\/\ 
____________________/ __\/ __\/ __\/ __\_____________________________ 
___________________/ /__/ /__/ /__/ /________________________________ 
        |/\ /\ /\ /\ \___ 
        |/ \_/ \_/ \_/ \ o \ 
              \_____/--< 
@author: Diego Torres Milano 
@author: Jennifer E. Swofford (ascii art snake) 
''' 


import re 
import sys 
import os 


from com.dtmilano.android.viewclient import ViewClient 
from com.dtmilano.android.adb.adbclient import DOWN_AND_UP 

kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False} 
device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1) 
kwargs2 = {'forceviewserveruse': False, 'useuiautomatorhelper': False, 'ignoreuiautomatorkilled': True, 'autodump': False, 'startviewserver': True, 'compresseddump': True} 
vc = ViewClient(device, serialno, **kwargs2) 

# Installs the Android package. Notice that this method returns a boolean, so you can test 
# to see if the installation worked. 
vc.installPackage('Abc App.Android.Abc App.Android-Signed.apk') 


# sets a variable with the package's internal name 
package = 'Abc App.Android.Abc App.Android' 

# sets a variable with the name of an Activity in the packag 
activity = 'md591ecfcc00ede54e89ae8714.MainActivity' 

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

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

vc.sleep(5) 

#vc = ViewClient(device) 
vc.dump() 

for bt in [ 'PRO', 'FIE', 'DIA']: 
    b = vc.findViewWithAttribute('text:mText', bt) 
    if b: 
     (x, y) = b.getXY() 
     print >>sys.stderr, "clicking b%s @ (%d,%d) ..." % (bt, x, y) 
     b.touch() 

    time.sleep(7) 


# Presses the Menu button 
# device.press('KEYCODE_MENU', DOWN_AND_UP) 

# Writes the screenshot to a file (you can use a plain filename or use these placeholders) 
vc.writeImageToFile('/tmp/${serialno}-${focusedwindowname}-${timestamp}.png', 'PNG') 

Когда я бегу выше сценарий как

$ python test_culebra.py

Я получаю следующее сообщение об ошибке.

[100%] /data/local/tmp/AbcApp.Android.AbcApp.Android-Signed.apk 
     pkg: /data/local/tmp/AbcApp.Android.AbcApp.Android-Signed.apk 
Success 
Traceback (most recent call last): 
    File "monkey_runner_culebra.py", line 53, in <module> 
    print >>sys.stderr, "clicking b%s @ (%d,%d) ..." % (bt, x, y) 
NameError: name 'x' is not defined 

Установка и загрузка приложения. Однако он не может найти кнопку с текстом PRO', FIE , DIA` и т. Д.

Что я здесь делаю неправильно.

+0

Кажется, что 'b.getXY()' не возвращает координаты представления. Убедитесь, что 'b' содержит то, что вы ожидаете. –

+0

Кроме того, используйте 'culebra' или' culebra -G' для создания прикосновения для одного случая, а затем вы можете превратить его в цикл. Таким образом, вы получите правильный синтаксис. –

+0

@DiegoTorresMilano - как использовать culbera -G внутри скрипта python? – liv2hak

ответ

1

Run

culebra -Gu -o myscript.py --scale=0.5 

вы увидите окно, представляющее собой устройство, так же, как

enter image description here

то нажмите на кнопку (я бегу ApiDemos здесь) и culebra генерирует

vc.dump(window=-1) 
vc.findViewWithTextOrRaise(u'NORMAL').touch() 
vc.sleep(_s) 
vc.dump(window=-1) 
vc.findViewWithTextOrRaise(u'SMALL').touch() 
vc.sleep(_s) 
vc.dump(window=-1) 
vc.findViewWithTextOrRaise(u'OFF').touch() 
vc.sleep(_s) 
vc.dump(window=-1) 

который вы можете затем человек ually превращаются в

for t in ['NORMAL', 'SMALL', 'OFF']: 
    b = vc.findViewWithTextOrRaise(t) 
    print >> sys.stderr, "clicking", b, "@", b.getXY() 
    b.touch() 

или даже

for t in ['NORMAL', 'SMALL', 'OFF']: 
    vc.findViewWithTextOrRaise(t).touch() 

это принимаемой экран не меняется при нажатии ваших кнопок, если оно вам нужно вызвать vc.dump() снова.

Затем вы можете скопировать и вставить исходный сценарий.

+0

Я не могу установить Pillow на python 2.7 http://stackoverflow.com/questions/42192775/installing-pillow-on-python-2-7 – liv2hak

Смежные вопросы