在 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 应用程序时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 中使用 nodeJs 停止 Appium 服务器
在移动原生应用程序测试中:使用 Appium 时如何模拟后端?