AndroidViewClient 的 device.touch() 比 MonkeyRunner 慢得多。可以修复吗?

dJe*_*dJe 5 android androidviewclient

我已经放弃了 AndroidViewClient 的 MonkeyRunner 以受益于它增加的可靠性和实现的简单性(感谢上帝提供纯 Python)。

我需要尽可能快地执行几个 device.touch() 事件,但是 AndroidViewClient 似乎比 MonkeyRunner 慢得多。

这是我用来给它们计时的代码:

for iteration in range(1,6):
    ts_start = datetime.datetime.now()
    device.touch(1,1,'DOWN_AND_UP')
    chrono = datetime.datetime.now() - ts_start
    print str(iteration)+': '+str(chrono)
Run Code Online (Sandbox Code Playgroud)

这是 MonkeyRunner 的输出:

1: 0:00:00.003000
2: 0:00:00.002001
3: 0:00:00.002001
4: 0:00:00.002001
5: 0:00:00.002000
Run Code Online (Sandbox Code Playgroud)

这是 AVC 的输出:

1: 0:00:00.460000
2: 0:00:00.515000
3: 0:00:00.499000
4: 0:00:00.508000
5: 0:00:00.456000
Run Code Online (Sandbox Code Playgroud)

这平均慢了大约 200 倍。

似乎可以将事件存储在二进制文件中,然后直接在手机上推送和运行它。但是,我想坚持使用纯 AVC 方法。

那可能吗?

编辑:

由于现在不可能以我想要的方式实现更好的性能,因此我必须像我提到的那样实现事件文件。

为此,我使用了两个资源:

以下是其中一个文件的样子(已截断):

#!/bin/sh
sendevent /dev/input/event1 3 57 0
sendevent /dev/input/event1 3 55 0
sendevent /dev/input/event1 3 53 640
sendevent /dev/input/event1 3 54 900
sendevent /dev/input/event1 3 58 1
sendevent /dev/input/event1 0 2 0
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 0 2 0
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 3 57 0
sendevent /dev/input/event1 3 55 0
sendevent /dev/input/event1 3 53 640
sendevent /dev/input/event1 3 54 730
sendevent /dev/input/event1 3 58 1
sendevent /dev/input/event1 0 2 0
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 0 2 0
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 3 57 0
sendevent /dev/input/event1 3 55 0
sendevent /dev/input/event1 3 53 500
sendevent /dev/input/event1 3 54 900
sendevent /dev/input/event1 3 58 1
sendevent /dev/input/event1 0 2 0
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 0 2 0
sendevent /dev/input/event1 0 0 0
Run Code Online (Sandbox Code Playgroud)

在性能方面,它大约是 MonkeyRunner 实现的两倍。

Die*_*ano 0

您可以尝试的一种快速解决方法是

cmd = ''
for _ in range(6):
    cmd += 'input tap 1 1;'
ts_start = datetime.datetime.now()
device.shell(cmd)
chrono = datetime.datetime.now() - ts_start
print str(chrono)
Run Code Online (Sandbox Code Playgroud)

它可能对您有帮助,但可能并不适合所有情况。