MonkeyRunner内置uiautomator出错的原因

发表于:2015-11-09 09:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:DoctorQ    来源:51Testing软件测试网采编

  之前做app功能遍历的项目中使用的是monkeyrunner+hierarchyviewer的方式,但是hierarchyviewer提供的信息太多而且无用的信息居多,所以想换成
monkeyrunner+uiautomatorviewer的方式来做。但是在集合的时候调用monkeyrunner和uiautomator时出错:
publicvoidtest_Exception(){
System.setProperty("com.android.uiautomator.bindir","D:/sdk/tools");
DebugBridge.init();
MyDeviceManagermanager=null;
IDeviceidevice=null;
try{
Thread.sleep(3000);
List<IDevice>devices=DebugBridge.getDevices();
idevice=devices.get(0);
manager=newMyDeviceManager(idevice);
getUIHierarchy(idevice);
}catch(Exceptione){
e.printStackTrace();
}finally{
manager.dispose();
DebugBridge.terminate();
}
}
privatevoidgetUIHierarchy(IDeviceidevice){
Stringpath=System.getProperty("user.dir")+File.separator+"xml"+File.separator+"uidump.xml";
Stringcommand=String.format("%s%s%s",newObject[]{"/system/bin/uiautomator","dump",
"/data/local/tmp/qianhui.xml"});
CountDownLatchcommandCompleteLatch=newCountDownLatch(1);
try{
idevice.executeShellCommand(command,newCollectingOutputReceiver(commandCompleteLatch),40000);
commandCompleteLatch.await(40L,TimeUnit.SECONDS);
System.out.println("PullUIXMLsnapshotfromdevice...1212");
idevice.getSyncService().pullFile("/data/local/tmp/qianhui.xml",path,SyncService.getNullProgressMonitor());
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
  在MyDeviceManager构造方法中执行的是创建monkey对象:
  publicMyDeviceManager(IDeviceiDevice){
  this.mIDevice=iDevice;
  this.mAdbChimpDevice=newAdbChimpDevice(iDevice);
  /*Stringwidth=mAdbChimpDevice.getProperty("display.width");
  System.out.println(width);
  Stringheight=mAdbChimpDevice.getProperty("display.height");
  System.out.println(height);
  sWidth=Integer.parseInt(width);
  sHeight=Integer.parseInt(height);*/
  }
  当我执行上面的代码时报错:
06-0117:06:47.897:E/AndroidRuntime(3007):***FATALEXCEPTIONINSYSTEMPROCESS:main
06-0117:06:47.897:E/AndroidRuntime(3007):java.lang.IllegalStateException:UiAutomationServiceandroid.accessibilityservice.IAccessibilityServiceClient$Stub$Proxy@421baa38alreadyregistered!
06-0117:06:47.897:E/AndroidRuntime(3007):atandroid.os.Parcel.readException(Parcel.java:1473)
06-0117:06:47.897:E/AndroidRuntime(3007):atandroid.os.Parcel.readException(Parcel.java:1419)
06-0117:06:47.897:E/AndroidRuntime(3007):atandroid.view.accessibility.IAccessibilityManager$Stub$Proxy.registerUiTestAutomationService(IAccessibilityManager.java:342)
06-0117:06:47.897:E/AndroidRuntime(3007):atandroid.app.UiAutomationConnection.registerUiTestAutomationServiceLocked(UiAutomationConnection.java:175)
06-0117:06:47.897:E/AndroidRuntime(3007):atandroid.app.UiAutomationConnection.connect(UiAutomationConnection.java:72)
06-0117:06:47.897:E/AndroidRuntime(3007):atandroid.app.UiAutomation.connect(UiAutomation.java:188)
06-0117:06:47.897:E/AndroidRuntime(3007):atcom.android.uiautomator.core.UiAutomationShellWrapper.connect(UiAutomationShellWrapper.java:32)
06-0117:06:47.897:E/AndroidRuntime(3007):atcom.android.commands.uiautomator.DumpCommand.run(DumpCommand.java:74)
06-0117:06:47.897:E/AndroidRuntime(3007):atcom.android.commands.uiautomator.Launcher.main(Launcher.java:83)
06-0117:06:47.897:E/AndroidRuntime(3007):atcom.android.internal.os.RuntimeInit.nativeFinishInit(NativeMethod)
06-0117:06:47.897:E/AndroidRuntime(3007):atcom.android.internal.os.RuntimeInit.main(RuntimeInit.java:271)
06-0117:06:47.897:E/AndroidRuntime(3007):atdalvik.system.NativeStart.main(NativeMethod)
06-0117:06:47.907:E/ServiceManager(3007):erroringetService
06-0117:06:47.907:E/ServiceManager(3007):android.os.RemoteException:Unknownbindererrorcode.0xfffffff7
06-0117:06:47.907:E/ServiceManager(3007):atandroid.os.BinderProxy.transact(NativeMethod)
06-0117:06:47.907:E/ServiceManager(3007):atandroid.os.ServiceManagerProxy.getService(ServiceManagerNative.java:123)
06-0117:06:47.907:E/ServiceManager(3007):atandroid.os.ServiceManager.getService(ServiceManager.java:55)
06-0117:06:47.907:E/ServiceManager(3007):atandroid.app.ActivityManagerNative$1.create(ActivityManagerNative.java:2152)
06-0117:06:47.907:E/ServiceManager(3007):atandroid.app.ActivityManagerNative$1.create(ActivityManagerNative.java:2150)
06-0117:06:47.907:E/ServiceManager(3007):atandroid.util.Singleton.get(Singleton.java:34)
06-0117:06:47.907:E/ServiceManager(3007):atandroid.app.ActivityManagerNative.getDefault(ActivityManagerNative.java:76)
06-0117:06:47.907:E/ServiceManager(3007):atcom.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:86)
06-0117:06:47.907:E/ServiceManager(3007):atjava.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
06-0117:06:47.907:E/ServiceManager(3007):atjava.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
06-0117:06:47.907:E/ServiceManager(3007):atdalvik.system.NativeStart.main(NativeMethod)
06-0117:06:47.917:I/Process(3007):Sendingsignal.PID:3007SIG:9
06-0117:06:47.917:E/AndroidRuntime(3007):Errorreportingcrash
06-0117:06:47.917:E/AndroidRuntime(3007):java.lang.NullPointerException
06-0117:06:47.917:E/AndroidRuntime(3007):atcom.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:86)
06-0117:06:47.917:E/AndroidRuntime(3007):atjava.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
06-0117:06:47.917:E/AndroidRuntime(3007):atjava.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
06-0117:06:47.917:E/AndroidRuntime(3007):atdalvik.system.NativeStart.main(NativeMethod)
  而当我把
  manager=newMyDeviceManager(idevice);
  getUIHierarchy(idevice);
  的位置调换一下,执行成功。所以我怀疑monkeyrunner在启动的时候已经创建了uiautomator的对象,才会造成上面的提示错误,所以我试图去查看一下monkeyrunner到底有没有做这件事。
  查看AdbChimpDevice创建的源码,发现
  Stringcommand=newStringBuilder().append("monkey--port").append(port).toString();
  executeAsyncCommand(command,newLoggingOutputReceiver(LOG,Level.FINE));
  这一步是打开monkey,在cmd下执行该命令就能知道:
21/212>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • ganmaotong
    2016-3-29 11:38:59

    楼主找到解决办法了吗

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号