Android Uiautomator waitForIdleTimeout 设置无效
Android 4.1开始引入的Uiautomator测试框架非常好用,但由于不够重视还缺失很多功能以及Bug。 本文描述一则Bug,该Bug导致Uiautomator中Configure.setWaitForIdleTimeout()设置的值无效。 由于Uiautomator在所有操作前几乎都会waitForIdle(),对于界面持续变化的App来说总是需要等待10s超时后才能操作一步,解决方法之一是使用Configure.setWaitForIdleTimeout()设置超时时间,然而这个方法并没有起到预期的效果。 Bug之处在于当findAccessibilityNodeInfo中的waitForIdle()时,调用的是无参数waitForIdle(),由此调用到最终的UiAutomatorBridge中的无参数waitForIdle(),这个函数是这样的 public void waitForIdle() { waitForIdle(TOTAL_TIME_TO_WAIT_FOR_IDLE_STATE); } public void waitForIdle(long timeout) { try { mUiAutomation.waitForIdle(QUIET_TIME_TO_BE_CONSIDERD_IDLE_STATE, timeout); } catch (TimeoutException te) { Log.w(LOG_TAG, “Could not detect idle state.”, te); } } 而TOTAL_TIME_TO_WAIT_FOR_IDLE_STATE正等于10s,由此可见这是Google的疏忽导致只有UiDevice.waitForIdle()会读取Configure中的超时值。