首页 > 解决方案 > 给定脚本中是否有 time.sleep() 的替代品?

问题描述

以下脚本将 android 设备连接到 Wi-Fi 并使用现有帐户注册。

import re
import sys
import time
import os

from PIL import Image

from com.dtmilano.android.viewclient import ViewClient
device, serialno = ViewClient.connectToDeviceOrExit()
vc = ViewClient(device=device, serialno=serialno)

vc.dump()
vc.findViewWithTextOrRaise(u'Continue').touch()##this line will click on Continue button.
print 'Continue button found and clicked'
vc.dump()
vc.findViewWithTextOrRaise(u'ABCCC').touch()##this line will click WiFi ABCCC SSID.
print 'SSID found and clicked'
vc.dump()
device.shell('input text *********')
vc.dump()
vc.findViewWithTextOrRaise(u'Connect').touch()##connect to wifi
time.sleep(20) <<<<< This line here
vc.dump()
device.shell('input text *********')##enter username
device.shell('input keyevent 61')
device.shell('input text *****')##enter password

这里给定睡眠时间为 20 秒,因为连接 Wi-Fi 后需要 10-20 秒的缓冲时间来提示下一页(注册页面)。例如,在某些情况下,如果它只需要 10 秒,那么剩余的 10 秒将被浪费,并且脚本仅在该时间之后恢复。那么有什么方法可以识别“好的注册页面提示,是时候执行下一行代码而不浪费任何时间了”。

标签: python-2.7androidviewclient

解决方案


假设有一个视图,大概是一个 EditText,您可以在其中输入用户名,并假设在您按下连接按钮后出现这样的视图,您可以这样做(您应该为您的案例找到并使用特定的 id

vc.findViewWithTextOrRaise(u'Connect').touch()##connect to wifi
u = None
while u is None:
    vc.dump()
    u = vc.findViewById('id/no_id/n')
#device.shell('input text *********')##enter username
u.type('**********')

推荐阅读