无法使用monkeyrunner识别文本

时间:2012-12-21 06:59:54

标签: python monkeyrunner

我有一个脚本可以找到文本视图,获取其坐标并单击它。为了点击我必须滚动并找到该文本视图。脚本如下,

text = 'abc'
self.device.drag((400,600), (300, 200), 0.01, 120)
tv = self.vc.findViewWithText(text)
if tv:
    (x, y) = tv.getXY()
    print >>sys.stderr, "Clicking TextView %s @ (%d,%d) ..." % (text, x, y)
    tv.touch()
else:
        print "Text is not found" %text

它确实拖延了。虽然文字' abc'存在,它打印"找不到文本"。

我删除了drag()方法,并手动进行拖动,它工作正常(识别文本并点击)。

任何人都知道我的drag()方法有什么问题。

由于

2 个答案:

答案 0 :(得分:1)

AndroidViewClient.dump()转储屏幕上当前显示的内容,因此如果您必须滚动以使TextView可见,它将不会出现在第一个(隐式)转储中。 因此,您必须在滚动后再次转储:

text = 'abc'
self.device.drag((400,600), (300, 200), 0.01, 120)
MonkeyRunner.sleep(3)
self.vc.dump()
tv = self.vc.findViewWithText(text)
if tv:
    (x, y) = tv.getXY()
    print >>sys.stderr, "Clicking TextView %s @ (%d,%d) ..." % (text, x, y)
    tv.touch()
else:
        print "Text is not found" %text

text = 'abc'
self.device.drag((400,600), (300, 200), 0.01, 120)
MonkeyRunner.sleep(3)
self.vc.dump()
self.vc.findViewWithTextOrRaise(text).touch()

同时考虑NRP提到的关于睡眠的观点。

答案 1 :(得分:0)

MonkeyRunner可以非常快速地执行所有命令,因此有时您必须在开始查找视图之前添加睡眠。所以你的代码就像。

text = 'abc'
self.device.drag((400,600), (300, 200), 0.01, 120)
MonkeyRunner.sleep(1)
tv = self.vc.findViewWithText(text)
if tv:
    (x, y) = tv.getXY()
    print >>sys.stderr, "Clicking TextView %s @ (%d,%d) ..." % (text, x, y)
    tv.touch()
else:
        print "Text is not found" %text