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

时间:2014-08-08 10:46:55

标签: appium android-uiautomator

我必须自动化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.

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

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

19 个答案:

答案 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设备连接到您的计算机/笔记本电脑
  • 转到Android设备设置 - >启用开发者选项 Android debbuging

请看这里:
Android device settings

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

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

请参见此处:Inspect whatever from your Android device

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

答案 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)

检查您是否启用了这些"开发者选项"在电话里。

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

答案 16 :(得分:0)

有效的方法是在此路径中:

Android/Sdk/tools/bin/uiautomatorviewer

将其粘贴到您的终端中,它将运行可运行的自动化器

答案 17 :(得分:-1)

1)停止appium服务器

2)打开仿真器设备

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

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

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

答案 18 :(得分:-2)

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