AVC не может найти представление по идентификатору, даже если параметр «forceviewserveruse»: имеет значение True,

я пытаюсь автоматизировать составление электронной почты с помощью AndroidViewClient 5.1.1. Пожалуйста, найдите код ниже:

kwargs1 = {'verbose': False, 'ignoresecuredevice': False}
kwargs3 = {'startviewserver': True, 'forceviewserveruse': True, 'autodump': False, 'ignoreuiautomatorkilled': True}
device1, serialno1 = ViewClient.connectToDeviceOrExit(serialno=device_id1, **kwargs1)
vc2 = ViewClient(device1, serialno1, **kwargs3)
vc2.dump()
device1.startActivity(component="com.android.email/com.android.email.activity.EmailActivity")
vc2.dump()
compose = vc2.findViewById('id/compose')
compose.touch()

AVC не может идентифицировать составное представление. пожалуйста помоги


person user    schedule 15.04.2014    source источник
comment
Версия андроида? Устройство? Укоренился? Мое первое предположение заключается в том, что при вызове vc2.dump() активность не закончила загрузку, и поэтому представление не найдено. Попробуйте добавить немного сна между ними.   -  person Diego Torres Milano    schedule 16.04.2014
comment
Версия Android - 4.4 (kitkat), устройство рутировано. Постараюсь добавить немного сна, как было предложено.   -  person user    schedule 16.04.2014
comment
Если Android API ›= 19 и AVC ›= 5.3.1, вам не нужен ViewServer, поскольку UiAutomator также включает идентификаторы. Попробуйте culebra, чтобы облегчить себе жизнь (вы увидите идентификаторы).   -  person Diego Torres Milano    schedule 16.04.2014
comment
как было предложено, я использовал culebra и сгенерировал идентификаторы, я могу найти идентификатор компоновки, он выглядит так: vc.findViewByIdOrRaise(com.android.email:id/compose)   -  person user    schedule 16.04.2014


Ответы (1)


Используя устройства с Android API >= 19 и AndroidViewClient >= 5.3.1, вы сможете получить идентификаторы просмотра.

Например, если вы используете culebra для автоматического создания скрипта

$ culebra -VC --start-activity='com.google.android.email/com.android.email2.ui.MailActivityEmail' -o myscript.py

Тогда myscript.py будет содержать

#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
Copyright (C) 2013  Diego Torres Milano
Created on 2014-04-16 by Culebra v5.4.4

                      __    __    __    __
                     /  \  /  \  /  \  /  \ 
____________________/  __\/  __\/  __\/  __\_____________________________
___________________/  /__/  /__/  /__/  /________________________________
                   | / \   / \   / \   / \   \___
                   |/   \_/   \_/   \_/   \    o \ 
                                           \_____/--<
@author: Diego Torres Milano
@author: Jennifer E. Swofford (ascii art snake)
'''


import re
import sys
import os

from com.dtmilano.android.viewclient import ViewClient


kwargs1 = {'verbose': True, 'ignoresecuredevice': False}
device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1)
device.startActivity(component='com.google.android.email/com.android.email2.ui.MailActivityEmail')
kwargs2 = {'startviewserver': True, 'forceviewserveruse': False, 'autodump': False, 'ignoreuiautomatorkilled': True}
vc = ViewClient(device, serialno, **kwargs2)
vc.dump(window='-1')


# class=android.widget.FrameLayout
no_id1 = vc.findViewByIdOrRaise("id/no_id/1")

# class=android.view.View
android___id_action_bar_overlay_layout = vc.findViewByIdOrRaise("android:id/action_bar_overlay_layout")

# class=android.widget.FrameLayout
android___id_action_bar_container = vc.findViewByIdOrRaise("android:id/action_bar_container")

# class=android.view.View
android___id_action_bar = vc.findViewByIdOrRaise("android:id/action_bar")

# class=android.widget.LinearLayout
no_id5 = vc.findViewByIdOrRaise("id/no_id/5")

# class=android.widget.FrameLayout
no_id6 = vc.findViewByIdOrRaise("id/no_id/6")

# class=android.widget.ImageView
android___id_up = vc.findViewByIdOrRaise("android:id/up")

# class=android.widget.ImageView
android___id_home = vc.findViewByIdOrRaise("android:id/home")

# class=android.widget.LinearLayout
no_id9 = vc.findViewByIdOrRaise("id/no_id/9")

# class=android.widget.TextView text=u'Inbox'
android___id_action_bar_title = vc.findViewByIdOrRaise("android:id/action_bar_title")

# class=android.widget.TextView text=u'999+ unread'
android___id_action_bar_subtitle = vc.findViewByIdOrRaise("android:id/action_bar_subtitle")

# class=android.widget.LinearLayout
no_id12 = vc.findViewByIdOrRaise("id/no_id/12")

# class=android.widget.TextView
com_android_email___id_compose = vc.findViewByIdOrRaise("com.android.email:id/compose")

# class=android.widget.TextView
com_android_email___id_search = vc.findViewByIdOrRaise("com.android.email:id/search")

# class=android.widget.ImageButton
no_id15 = vc.findViewByIdOrRaise("id/no_id/15")

# class=android.widget.FrameLayout
android___id_content = vc.findViewByIdOrRaise("android:id/content")

# class=android.view.View
no_id17 = vc.findViewByIdOrRaise("id/no_id/17")

# class=android.widget.FrameLayout
no_id18 = vc.findViewByIdOrRaise("id/no_id/18")

# class=android.widget.FrameLayout
com_android_email___id_content_pane = vc.findViewByIdOrRaise("com.android.email:id/content_pane")

# class=android.widget.RelativeLayout
com_android_email___id_between_chrome = vc.findViewByIdOrRaise("com.android.email:id/between_chrome")

# class=android.widget.FrameLayout
com_android_email___id_conversation_list = vc.findViewByIdOrRaise("com.android.email:id/conversation_list")

# class=android.widget.ListView
android___id_list = vc.findViewByIdOrRaise("android:id/list")

# class=android.widget.LinearLayout
no_id23 = vc.findViewByIdOrRaise("id/no_id/23")

# class=android.widget.LinearLayout
no_id24 = vc.findViewByIdOrRaise("id/no_id/24")

# class=android.widget.LinearLayout
com_android_email___id_nested_folder_container = vc.findViewByIdOrRaise("com.android.email:id/nested_folder_container")

# class=android.widget.RelativeLayout
no_id26 = vc.findViewByIdOrRaise("id/no_id/26")

# class=android.widget.ImageView
com_android_email___id_folder_imageView = vc.findViewByIdOrRaise("com.android.email:id/folder_imageView")

# class=android.widget.LinearLayout
com_android_email___id_text_layout = vc.findViewByIdOrRaise("com.android.email:id/text_layout")

# class=android.widget.TextView text=u'0'
com_android_email___id_count_textView = vc.findViewByIdOrRaise("com.android.email:id/count_textView")

# class=android.widget.LinearLayout
com_android_email___id_show_more_folders_row = vc.findViewByIdOrRaise("com.android.email:id/show_more_folders_row")

# class=android.widget.TextView text=u'Show 1 more folders'
com_android_email___id_show_more_folders_textView = vc.findViewByIdOrRaise("com.android.email:id/show_more_folders_textView")

# class=android.widget.TextView text=u'0'
com_android_email___id_show_more_folders_count_textView = vc.findViewByIdOrRaise("com.android.email:id/show_more_folders_count_textView")

# class=android.widget.FrameLayout
no_id34 = vc.findViewByIdOrRaise("id/no_id/34")

# class=android.view.View
no_id35 = vc.findViewByIdOrRaise("id/no_id/35")

# class=android.widget.FrameLayout
no_id36 = vc.findViewByIdOrRaise("id/no_id/36")

# class=android.view.View
no_id37 = vc.findViewByIdOrRaise("id/no_id/37")

# class=android.widget.FrameLayout
no_id38 = vc.findViewByIdOrRaise("id/no_id/38")

# class=android.view.View
no_id39 = vc.findViewByIdOrRaise("id/no_id/39")

# class=android.widget.FrameLayout
no_id40 = vc.findViewByIdOrRaise("id/no_id/40")

# class=android.view.View
no_id41 = vc.findViewByIdOrRaise("id/no_id/41")

# class=android.widget.FrameLayout
no_id42 = vc.findViewByIdOrRaise("id/no_id/42")

# class=android.view.View
no_id43 = vc.findViewByIdOrRaise("id/no_id/43")

# class=android.widget.FrameLayout
no_id44 = vc.findViewByIdOrRaise("id/no_id/44")

# class=android.view.View
no_id45 = vc.findViewByIdOrRaise("id/no_id/45")

Обратите внимание, что это было получено с помощью AndroidViewClient 5.4.4, поскольку он устраняет некоторые проблемы с отступами в автоматически созданных скриптах.

Представления идентифицируются по имени переменной, созданному после их идентификаторов.

com_android_email___id_compose = vc.findViewByIdOrRaise("com.android.email:id/compose")

Также обратите внимание на использование --start-activity для автоматического запуска Activity в начале скрипта.

person Diego Torres Milano    schedule 16.04.2014