【问题标题】:Error in using UIAutomatorviewer for testing Android app in Appium在 Appium 中使用 UIAutomatorviewer 测试 Android 应用程序时出错
【发布时间】:2014-10-01 19:54:57
【问题描述】:

我必须自动化一个 Android 应用程序,我正在通过 Appium 做同样的事情。

我面临的问题是在启动 Appium 服务器后,该应用程序正在安装在模拟器 4.4.2 中。要检查我使用的元素 UIAutomatorviewer,它是 SDK 默认提供的。但是在检查应用程序的元素时,我收到了错误:

Error obtaining UI hierarchy
Reason:Error while obtaining UI hierarchy XML file.com.android.ddmlb.SynchException.Remote object doesn't exist.

我试图找到解决方案,以便我可以检查元素以便编写脚本,但徒劳无功。

  1. 谁能告诉我如何解决这个问题,以便我可以检查元素?
  2. 除了使用UIAutomator viewer 之外,我还有其他方法可以检查应用程序中的元素吗?

【问题讨论】:

    标签: appium android-uiautomator


    【解决方案1】:

    在我与 uiautomator 查看器幽会后,我才知道只有在以下情况下才会出现错误:

    appium 服务器正在运行,我们尝试使用 uiautomatorviewer 捕获屏幕截图。

    所以,每当您想使用 uiautomatorviewer 时,请确保服务器处于停止状态。

    【讨论】:

    • 这绝对是最常见的原因。杀死 appium 服务器的快速命令行方法是taskkill /F /IM node.exe(警告:将杀死所有节点服务器)。但是,对于没有运行 Appium 服务器的情况,下面的答案对我来说效果更好:stackoverflow.com/a/28526871/682912
    • 这对我没有帮助,不过我已经停止了 Appium 服务器
    【解决方案2】:

    我使用以下方法解决了同样的问题。

    (1) 将您的 Android 设备连接到您的开发机器;

    (2) 转到终端中的命令行或 Windows 的 DOS 命令行;

    (3) 在您的 Android 设备中使用“adb shell”;

    (4) 在命令行输入“su root”将用户切换为root;

    (5) 输入“chmod 777 /data/local/tmp”改变对/data/local/tmp的访问权限;

    (6) 回到uiautomatorviewer重新截图,错误应该没有了;

    我猜有些文件如果在 /data/local/tmp 中不拥有权限,则无法访问。

    【讨论】:

    • 当我尝试关注它时,我在第 4 步之后得到了“/system/bin/sh: su: inaccessible or not found”
    【解决方案3】:

    最简单的解决方案..

    重启设备。重启 uiautomatorviewer。

    对我来说就像一个魅力......:P

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,因为我使用了“adbd insecure”。所以我只是禁用了“adbd insecure”,然后重新加载 uiautomatorviewer,一切正常。

      【讨论】:

        【解决方案5】:

        如果是 root 设备:在 adb 的开发者选项中启用 root 访问权限。以 root 身份重启 adb

        【讨论】:

          【解决方案6】:

          确保屏幕上的所有内容都是静态的。并且也不允许闪烁输入光标。任何绘画动作都会阻止 uiautomator 转储当前 UI。

          您可以使用以下 adb 命令进行测试:

          adb shell uiautomator dump /data/local/tmp/uidump.xml
          

          如果出现消息ERROR: could not get idle state.,则说明您遇到了这个问题。

          参见DumpCommand 的第 87 和 101 行:

          try {
            ...   
            uiAutomation.waitForIdle(1000, 1000 * 10);
            ...
          } catch (TimeoutException re) {
            System.err.println("ERROR: could not get idle state.");
            return;
          }
          

          【讨论】:

          • 是的,我遇到了同样的错误。我观察到计时器正在特定屏幕上运行。当我停止计时器时。它就像一个魅力。
          • 我收到了空闲状态错误,但不知道如何解决它,因为我无权访问被测应用的源代码,因此无法禁用计时器等。
          【解决方案7】:

          我们必须使用 API 级别超过 17 的设备或果冻豆

          【讨论】:

            【解决方案8】:

            回答您的问题#2 您可以直接从您的真实 Android 设备检查 Android 应用程序。

            你需要:

            • 将 Android 设备连接到您的计算机/笔记本电脑
            • 转到 Android 设备设置 -> 启用 开发人员选项Android 调试

            请看这里:

            • 在您的 Android 设备中启动您要检查的应用程序

            • 在您的计算机/笔记本电脑上打开 Chrome 浏览器并右键单击 -> 更多工具 -> 检查设备 -> 单击您的设备 ->(单击 Android 设备OK 进行授权)->点击Inspect

            请看这里:

            就是这样。希望对您有所帮助!

            【讨论】:

            • 这可能是 CyanogenMod 特有的吗?还是需要root?似乎对我不起作用。
            【解决方案9】:

            停止 Appium 服务器。然后再试一次。它有效。

            【讨论】:

              【解决方案10】:

              我花了一个多星期来解决这个问题。当您连接您的设备并使用 ASM 3.0 时,当屏幕投影时打开 UIAutomator 以捕获当前的 android 屏幕。如果没有 Appium,它应该捕获。用于使用 Android Studio 而不是 android sdk。卸载并重新安装 Android Studio。它现在非常适合我。

              【讨论】:

                【解决方案11】:

                绕过错误的方法:

                无法获得空闲状态。

                通过 uiautomator 获取 uix 和截图。

                public class DeviceMethods extends UiAutomatorTestCase {
                public void dump(){
                
                
                    try {
                        getUiDevice().dumpWindowHierarchy("window_dump.uix") ;
                        getUiDevice().takeScreenshot(new File("/data/local/tmp/window_dump.png"));
                
                
                    } catch (Exception e) {
                
                    }
                
                }
                

                您需要创建 uiautomator jar 并将其推送到 /data/local/tmp

                使用 this tutorial 了解如何使用 uiautomator

                获得文件后,只需在 uiautomatorviewer 中打开它们

                【讨论】:

                  【解决方案12】:

                  我也遇到了同样的问题(如果 Appium Server 没有运行)。切换后,OFF / ON USB-Debugging 对我有用。

                  【讨论】:

                    【解决方案13】:

                    什么对我有用:

                    停止appium
                    打开一个模拟器设备(使用 Android 7.1.1 测试)
                    进入设置 > 开发人员选项 > 启用视图属性检查
                    根据您的操作系统在计算机、cmd 或终端上打开 shell
                    输入以下命令:
                    亚行壳

                    cd /数据
                    cd /本地
                    chmod 777 时间

                    启动 uiautomatorviewer
                    截取xml截图

                    "su chmod 777 /data/local/tmp" 对我不起作用,所以我深入研究并且它起作用了。
                    我假设您必须在模拟器而不是物理设备中执行此操作,除非设备已植根。 ¯ \ _ (ツ)_/¯

                    好运!

                    【讨论】:

                      【解决方案14】:

                      我解决了

                      我关闭了在我的机器上运行的 Appium Server 并再次打开它。 后来打开uiautomater,它对我有用

                      【讨论】:

                        【解决方案15】:

                        这是因为 adb 正在使用端口并且它被 appium 服务器阻止。

                        我已经找到了最好的解决方案

                        从任务栏进程中杀死 adb.exe 并尝试再次启动 uiautomatorviewer

                        【讨论】:

                          【解决方案16】:

                          检查你是否在手机的“开发者选项”下启用了这些。

                          1. 通过 USB 验证应用程序
                          2. 查看属性检查
                          3. USB 调试

                          【讨论】:

                            【解决方案17】:

                            1) 停止appium服务器

                            2) 打开一个模拟器设备

                            3) 进入设置 > 开发者选项 > 启用视图属性检查

                            4) 隐形的开发者选项?进入设置>点击关于设备/手机>向下滚动直到最后一个选项(内部版本号)>连续点击“内部版本号”7次>你应该收到一条Toast消息“你是开发者”>从该屏幕>返回设置>现在您应该看到开发人员选项点击它>启用视图属性检查

                            5) 您应该不会再收到此错误消息

                            【讨论】:

                              【解决方案18】:

                              有效的是这条路径:

                              Android/Sdk/tools/bin/uiautomatorviewer
                              

                              将其粘贴到您的终端中,它将运行有效的自动机

                              【讨论】:

                                【解决方案19】:

                                尝试关闭然后打开 USB 调试选项.. 这对我有用

                                【讨论】:

                                  猜你喜欢
                                  • 2020-11-22
                                  • 2019-06-28
                                  • 2023-03-24
                                  • 2015-09-16
                                  • 2021-12-28
                                  • 2016-08-30
                                  • 2015-10-09
                                  • 1970-01-01
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多