使用 Culebra 在 Android 应用上按 'text' 按钮
Pressing buttons by 'text' on Android app using 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` 等的按钮。
我在这里做错了什么。
运行
culebra -Gu -o myscript.py --scale=0.5
您会看到 window 代表您的设备,很像
然后点击按钮(我这里是 运行 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)
然后您可以手动将其转换为
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()
。
然后您可以复制并粘贴到您的原始脚本。
我有一个 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` 等的按钮。
我在这里做错了什么。
运行
culebra -Gu -o myscript.py --scale=0.5
您会看到 window 代表您的设备,很像
然后点击按钮(我这里是 运行 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)
然后您可以手动将其转换为
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()
。
然后您可以复制并粘贴到您的原始脚本。