Androidviewclient dump()在过渡屏幕上挂起。

问题描述 投票:1回答:1

我在Windows上使用的是最新的AndroidViewClient版本。脚本点击接下来的按钮后,应用程序连接到远程服务器并等待响应,这期间屏幕上有一个类似 "等待进度条 "的东西。问题是等待时间是随机的。我使用了一个while循环等待下一页屏幕的特定视图,类似于这个帖子"在androidviewclient上等待一个特定的视图。". 但如果time.sleep()太短,脚本就会永远挂在vc.dump()的代码行上,准确的说是挂在ViewServer的这个方法dump()的代码行 "received += s.recv(1024) "上。有一个看守ViewClient.setAlarm(120),但是signal.ararm在Windows上不能用。为什么不在received += s.recv(1024)之前使用s.settimeout(120)和tryexcept block来防止在Windows上出现阻塞状态呢?

python emulation dump androidviewclient
1个回答
0
投票

我通过在函数调用上使用超时,并在while循环中重试,直到成功,避免了这个问题。请看 函数调用超时 如何使用信号。

下面这个基于文本的等待视图的功能可以使用。

import signal

def wait_for_text(vc, text):
    while 1:
        try:
            print('vc dump for text: ' + text)
            signal.alarm(5)
            vc.dump(window=-1, sleep=0)
            signal.alarm(0)
            print('finished: ' + text)
            if vc.findViewWithText(text) is None:
                time.sleep(0.5)
            else:
                return
        except:
            exc_type, exc_value, exc_tb = sys.exc_info()
            print(''.join(trace.format_exception(exc_type, exc_value, exc_tb)))
            time.sleep(0.5)
    raise RuntimeError('Failed waiting '+str(timeout)+'s for text: ' + text)
© www.soinside.com 2019 - 2024. All rights reserved.