0

具有 Android 4.4.2 Kitkat OS 设备的设备不会显示唯一 ID。以下是我在示例中使用的代码。

import sys
import os

# PyDev sets PYTHONPATH, use it
try:
for p in os.environ['PYTHONPATH'].split(':'):
if not p in sys.path:
sys.path.append(p)
except:
pass

try:
sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
except:
pass

from com.dtmilano.android.viewclient import ViewClient
ViewClient(*ViewClient.connectToDeviceOrExit(verbose=True)).traverse(transform=ViewClient.TRAVERSE_CIT)

三星 OS4.4.2 - 在 Nexus5 和 OS 4.4.2 上观察到相同的行为

android.widget.FrameLayout  
android.widget.LinearLayout  
android.widget.FrameLayout android:id/content 
android.widget.FrameLayout com.sec.android.app.launcher:id/animation_layer 
android.widget.FrameLayout com.sec.android.app.launcher:id/home_view 
android.widget.FrameLayout com.sec.android.app.launcher:id/home_container 
android.widget.FrameLayout  
android.view.View com.sec.android.app.launcher:id/workspace 
android.view.View  
android.view.View  
android.view.View  
android.appwidget.AppWidgetHostView  
android.widget.FrameLayout  
android.widget.LinearLayout com.google.android.googlequicksearchbox:id/search_plate 
android.widget.LinearLayout  

LG G2 操作系统 4.2

android.widget.FrameLayout id/no_id/1 
android.widget.LinearLayout id/no_id/2 
android.widget.FrameLayout id/no_id/3 
android.widget.FrameLayout id/no_id/4 
android.widget.FrameLayout id/no_id/5 
android.view.View id/no_id/6 
android.view.View id/no_id/7 
android.view.View id/no_id/8 
android.appwidget.AppWidgetHostView id/no_id/9 
android.widget.FrameLayout id/no_id/10 
android.widget.LinearLayout id/no_id/11 
android.widget.LinearLayout id/no_id/12 
android.widget.ImageButton id/no_id/13 
android.widget.LinearLayout id/no_id/14 
android.widget.ImageButton id/no_id/15 
android.widget.TextView id/no_id/16 Log Viewer
android.widget.TextView id/no_id/17 CatLog

此外, vc.findViewById('id/tv_search').type('Donald') 不起作用。但是 ID-'id/no_id/23' 在所有设备上都可以正常工作。

请帮我解决这个问题。

4

1 回答 1

0

您会得到不同的结果,因为即使脚本相同,后端(uiautomator在这种情况下)也会为同一个应用程序返回不同的数据。以前,uiautomator不会返回任何版本的 id,但在 KitKat 中对其进行了改进。这个问题是如果您需要 id 必须求助于其他后端替代方案(如 ViewServer 或 LocalViewServer)的原因之一。

AndroidViewClient尝试处理 android 版本和实现中的所有这些差异,为您提供单个接口(这是分配唯一 id 的地方)以允许您创建跨版本测试脚本。

于 2014-05-15T02:24:31.773 回答