【问题标题】:Error obtaining UI hierarchy Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist获取 UI 层次结构时出错 获取 UI 层次结构 XML 文件时出错:com.android.ddmlib.SyncException:远程对象不存在
【发布时间】:2016-10-24 08:57:02
【问题描述】:

我正在使用 adb 测试我的应用程序,但是当我执行“为 uiautomator 转储视图层次结构”时出现此错误:

获取 UI 层次结构时出错 获取 UI 层次结构 XML 时出错 文件:com.android.ddmlib.SyncException:远程对象不存在!

我的 adb 版本是 1.0.36,我的 android 版本是 6.0.1。

仅当界面中有动态元素处于运动状态时才会出现此错误。

提前谢谢你。

【问题讨论】:

    标签: android xml testing adb android-uiautomator


    【解决方案1】:

    最好的方法是杀死 adb 服务器并重新启动它。

    • sudo adb kill-server
    • sudo adb start-server

    这样就可以了。

    【讨论】:

    • 这些命令对我有用,但我不需要 sudo 位。
    • 别忘了重启 UIAutomator Viewer。
    【解决方案2】:

    目前,您的 UI 需要至少空闲 1000 毫秒(如未发送 Accessibility Events),AccessibilityService 才能生成 UI 层次结构转储。

    如果您尝试运行adb shell uiautomator dump,它会给您ERROR: could not get idle state.

    【讨论】:

    • 如果我想测试一个不是我制作但有同样问题的应用程序?提前谢谢你。
    • 这是 AccessibilityService 本身的限制。我猜一个应用程序更改其 UI 的频率超过每秒一次不被视为 可访问
    • 因此如果我使用 adb,这个问题不存在解决方案吗?再次感谢您。
    【解决方案3】:

    即使已经很晚了,我还是在这里发表我的看法。甚至我也遇到了这个问题。在从 UI Automator 截取屏幕截图之前,请终止 appium 服务器连接。然后尝试捕获屏幕截图。它工作正常。

    【讨论】:

    • 没错,我试过重启手机几次,终于成功了
    【解决方案4】:

    我意识到这是一个旧帖子。但是当我使用 uiautomator 控制模拟器进行自动化测试时,我注意到了同样的问题。模拟器被uiautomator控制后,uiautomatorviewer好像没有连接模拟器截图。

    我发现运行adb reconnect 可以让uiautomatorviewer 再次截屏。

    【讨论】:

      【解决方案5】:

      尝试重新启动您的设备,这在我的情况下有效。

      【讨论】:

        【解决方案6】:

        如果您收到此错误

        这意味着您的 UI Automator 已断开连接,要重新连接,您可以打开新终端,无需担心终端上的位置。

        输入命令

        adb reconnect
        

        然后再次尝试截屏,它应该可以工作。

        【讨论】:

          【解决方案7】:

          从命令行执行的以下命令对我有用;

          adb shell am force-stop com.android.ddmlib
          

          【讨论】:

            【解决方案8】:

            在设备或模拟器中:

            1. 显示打开的应用,一一关闭。

            2. 刷新监视器。

              它现在应该能够获取层次结构,就好像打开的其中一个应用程序正在“混淆”解析一样。

            【讨论】:

              【解决方案9】:

              请关闭您手机中的其他 AccessibilityService。

              【讨论】:

                【解决方案10】:

                重启设备对我有用。

                【讨论】:

                  【解决方案11】:

                  对于那些因更改辅助功能事件的速度超过每秒一次而遇到此问题的人。

                  ERROR: could not get idle state.
                  

                  我在基于 uiautomator 的 AndroidViewClient 上发现了一条评论,作者说 CulebraTester2-public 公开了此功能。

                  https://github.com/dtmilano/AndroidViewClient/issues/189#issuecomment-570775719

                  https://github.com/dtmilano/CulebraTester2-public 不受 这个问题。

                  它可用于转储层次结构,也可用作 AndroidViewClient 后端。

                  https://github.com/dtmilano/CulebraTester2-public https://github.com/dtmilano/CulebraTester2-client

                  我进行了一个简单的测试,它似乎适用于我的情况。

                  【讨论】:

                  • 很高兴听到它适用于您的情况。可以在这种情况下运行的一个简单测试,以验证差异,是github.com/dtmilano/CulebraTester2-public#androidviewclient 中描述的测试;包括或排除--use-uiautomator-helper 应该显示成功转储或错误。另一个优点是转储可以在 json 中。
                  【解决方案12】:

                  我已经尝试了上述所有步骤,但没有一个不起作用。原因是我在使用 Appium 打开应用程序后尝试运行 uiautomatorviewer。每当我在设备上手动打开我的应用程序然后运行 ​​uiautomatorviewer 时,它都运行良好。只是分享我的经验。谢谢

                  【讨论】:

                  • 试试adb reconnect。我有同样的问题。一旦应用程序通过 adb 控制,它就会锁定到该源。 adb reconnect 已解锁,以便 uiautomatorviewer 获得控制并截取屏幕截图。
                  • 相同。我已经尝试了所有但仍然面临同样的问题!
                  【解决方案13】:

                  在从“uiautomatorviewer”截屏之前,请使用 ctrl+C 命令终止 appium 服务器连接。然后尝试捕获屏幕截图。它工作正常。

                  【讨论】:

                  • 读起来更像是一个平庸的评论,而不是问题的答案。
                  • 在我的情况下,Appium 服务器甚至没有运行,我仍然收到此错误
                  猜你喜欢
                  • 2021-04-11
                  • 2016-04-09
                  • 1970-01-01
                  • 2018-11-20
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-03-21
                  • 2018-05-07
                  相关资源
                  最近更新 更多