1

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

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() 方法有什么问题。

谢谢

4

2 回答 2

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()

Also take into accout the point mentioned by NRP about the sleep.

于 2012-12-29T07:04:23.933 回答
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
于 2012-12-24T10:25:05.757 回答