我必须自动化Android应用程序,我通过Appium做同样的事情。我面临的问题是在启动Appium服务器后,应用程序将安装在模拟器4.4.2中,并检查我正在使用UIAutomatorviewer的元素,它默认使用SDK。但是在检查应用程序的元素时,我收到了错误![在此处输入图像描述] [1]
Error obtaining UI hierarchy
Reason:Error while obtaining UI hierarchy XML file.com.android.ddmlb.SynchException.Remote object doesn't exist.
我试图找到解决方案,以便我可以检查元素,以便我可以编写脚本,但是徒劳无功。
答案 0 :(得分:26)
在我与uiautomator查看器结束后,我才知道我们只在以下情况下才会收到错误:
appium服务器正在运行,我们尝试使用uiautomatorviewer捕获屏幕截图。
因此,每当您想使用uiautomatorviewer时,请确保服务器处于停止状态。
答案 1 :(得分:11)
我使用以下方法解决了同样的问题。
(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中没有权限。
答案 2 :(得分:8)
确保屏幕上的所有内容都是静态的。并且不允许闪烁输入光标。任何绘画操作都会阻止uiautomator转储当前的UI。
您可以使用以下adb命令进行测试:
adb shell uiautomator dump /data/local/tmp/uidump.xml
如果出现消息ERROR: could not get idle state.
,则表示您遇到此问题。
见第87和第87行。 DumpCommand
中的101个:
try { ... uiAutomation.waitForIdle(1000, 1000 * 10); ... } catch (TimeoutException re) { System.err.println("ERROR: could not get idle state."); return; }
答案 3 :(得分:6)
最简单的解决方案..
重启设备。重启uiautomatorviewer。
对我来说就像一个魅力....:P
答案 4 :(得分:4)
停止Appium Server。然后再试一次。它有效。
答案 5 :(得分:2)
回答你的问题#2 您可以直接从真实的Android设备上检查Android应用。
你需要:
在Android设备中启动您要检查的应用
在您的计算机/笔记本电脑上打开Chrome浏览器,然后右键单击 - >更多工具 - >检查设备 - >点击您的设备 - > (点击Android设备OK
进行授权) - >点击Inspect
就是这样。希望它有所帮助!
答案 6 :(得分:1)
我花了一周多的时间来解决这个问题。当您连接设备并使用ASM 3.0时,在投影屏幕时打开UIAutomator以捕获当前的Android屏幕。没有Appium它应该捕获。使用Android Studio而不是android sdk。卸载并重新安装Android Studio。它现在对我来说很完美。
答案 7 :(得分:1)
我解决了它
我关闭了在我的机器上运行的Appium Server并再次打开它。 后来打开uiautomater,它对我有用
答案 8 :(得分:1)
我也遇到了同样的问题(如果Appium Server没有运行的话)。切换后,OFF / ON USB-Debugging对我有效。
答案 9 :(得分:1)
如果是root设备:在adb的开发人员选项中启用root访问权限。以root身份重新启动adb
答案 10 :(得分:1)
我遇到了同样的问题,因为我使用了“adbd insecure”。所以我只是禁用了“adbd insecure”,并重新加载uiautomatorviewer,一切正常。
答案 11 :(得分:0)
我们必须使用API级别超过17或者果冻豆
的设备答案 12 :(得分:0)
绕过错误的方法:
无法获得闲置状态。
使用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
中打开它们答案 13 :(得分:0)
对我有用的是什么:
停止appium
打开仿真器设备(使用Android 7.1.1测试)
进入设置>开发人员选项>启用视图属性检查
根据您的操作系统打开计算机,cmd或终端上的外壳
输入以下命令:
adb shell
苏
cd / data
cd / local
chmod 777 tmp
启动uiautomatorviewer
采取xml截图
“su chmod 777 / data / local / tmp”对我来说没有用,所以我钻了下去并且工作正常。我假设您必须在模拟器而不是物理设备中执行此操作,除非设备已植根。 ¯\ _(ツ)_ /¯
Lotsa Luck!
答案 14 :(得分:0)
这是因为adb正在使用端口并且被appium服务器阻止。
我找到了最佳解决方案
从任务栏进程中杀死adb.exe并尝试再次启动uiautomatorviewer
答案 15 :(得分:0)
检查您是否启用了这些"开发者选项"在电话里。
答案 16 :(得分:0)
有效的方法是在此路径中:
Android/Sdk/tools/bin/uiautomatorviewer
将其粘贴到您的终端中,它将运行可运行的自动化器
答案 17 :(得分:-1)
1)停止appium服务器
2)打开仿真器设备
3)进入设置>开发人员选项>启用视图属性检查
4)开发人员选项不可见?进入设置>点击关于设备/电话>向下滚动直到最后一个选项(内部版本号)>连续点击7次“内部版本号”>您应该收到一条Toast消息“您是开发人员”>从该屏幕>返回设置>现在您应该看到开发人员选项点击它>启用视图属性检查
5)您不应再收到此错误消息
答案 18 :(得分:-2)
尝试先关闭然后再打开USB调试选项。这对我有用