如何使用 uiautomator 填写表单中的所有字段

How to fill all fields from a form with uiautomator

目前我正在尝试使用 Python + uiautomator

填写表单中的所有字段

我的代码:

d = UIDevice(adb.deviceList[0].device)

last_item_exists = d(text='Memo').exists

while not last_item_exists:
    print "Searching for fields on screen"
    fields = d(className = 'android.widget.EditText', focusable = True)
    for field in fields:
        if not (field.text == '0' or field.text == '50'): #Skip fields with 0 or 50
            print "Writing on the field"
            field.click()
            d.press(0x0000001d, 0x00001000)
            d.press('del')
            field.set_text('50')
        else:
            print "Skipping field"
    print "Searching for Memo field"
    last_item_exists = d(text='Memo').exists
    print "Scrolling down"
    d(scrollable=True).fling()

d(text='Confirm').click()

问题:

根据设备分辨率,可能会出现此错误:

uiautomator.JsonRPCError: JsonRPC Error code: -32002, Message: com.android.uiautomator.core.UiObjectNotFoundException: UiSelector[CLASS=android.widget.EditText, INSTANCE=9, FOCUSABLE=true, RESOURCE_ID=com.salab.ABRT:id/task_info_item_count]

发生这种情况,因为当我单击最后一个可见字段时,屏幕有时会向下滚动一点并且顶部字段不再可见。

是否有解决此类问题的方法,或者我必须改变我的逻辑(现在无法考虑任何事情...)?

UiAutomator 只会看到屏幕上每时每刻可见的内容。因此,如果您向下滚动(或应用程序向下滚动),则它无法与之交互。

你要么改变你的逻辑,要么你上下滑动屏幕来验证是否所有内容都已填满,如果没有,请填满。