在 Appium 中使用 UIAutomatorviewer 测试 Android 应用程序时出错

Posted

技术标签:

【中文标题】在 Appium 中使用 UIAutomatorviewer 测试 Android 应用程序时出错【英文标题】:Error in using UIAutomatorviewer for testing Android app in Appium 【发布时间】: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.

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

这绝对是最常见的原因。杀死 appium 服务器的快速命令行方法是taskkill /F /IM node.exe(警告:将杀死所有节点服务器)。但是,对于没有运行 Appium 服务器的情况,下面的答案对我来说效果更好:***.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】:

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

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

【讨论】:

【参考方案17】:

1) 停止appium服务器

2) 打开一个模拟器设备

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

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

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

【讨论】:

【参考方案18】:

有效的是这条路径:

Android/Sdk/tools/bin/uiautomatorviewer

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

【讨论】:

【参考方案19】:

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

【讨论】:

以上是关于在 Appium 中使用 UIAutomatorviewer 测试 Android 应用程序时出错的主要内容,如果未能解决你的问题,请参考以下文章

ADT工具使用

如何在 Java 中使用 nodeJs 停止 Appium 服务器

在移动原生应用程序测试中:使用 Appium 时如何模拟后端?

在 Appium 中使用 UIAutomatorviewer 测试 Android 应用程序时出错

appium(四) 操作介绍

如何在 Python 中使用 appium 进行滚动