UI automator / 有人遇到过 UI automator 的问题吗? (无法点击元素)

UI automator / Has somebody faced problems with UI automator? (impossible to click on element)

史前我的问题:

我正在研究 UI automator (2.1.3) 和 Espresso 测试 + 在简单的 Mac Air (2014) 上使用 android studio (3.0.1)。 之前我已经为 test-运行 创建了功能套件并且它在很长一段时间内都运行良好。 但上周我注意到与 UI 自动操作相关的奇怪行为: - 我无法单击当前项目中的元素,也无法单击 android 元素。 例如,很长一段时间我在我的项目中使用了通过 ID 点击元素,但现在这些方法不起作用。 测试通过,但是在屏幕和应用状态下都没有结果,这里是一个简单的例子:

 UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
    String contentOfMyElement = "";
    UiObject myObject = mDevice.findObject(new UiSelector().text(getInstrumentation().getTargetContext()
        .getString((R.id.idOfMyElement))).text(contentOfMyElement)
                    .clickable(true).checkable(false));
    mObject.click();

这种结构的所有对象突然变得无法使用,测试通过并成功,但应用程序状态没有任何变化。 这种结构在我的项目中已经运行了很长时间,但现在所有使用它的测试都不起作用。

我正在尝试用下一种方式解决它:

所有这些项目都无法解决我遇到的问题。 另外,我在另一个 android 项目中尝试了上面的示例,但它也不起作用。

正如我在 UI automator 或最新的 android studio 3.0.1 中看到的问题 我现在只知道 - UI 自动执行 mDevice.pressHome()、返回等,但不对我的应用程序的特定元素执行任何操作。

有人知道如何修复 UI 自动化器行为吗?

你可以在android studio中调试,你能得到正确的"myObject"吗? "myObject" 将包含元素的边界和位置,"click()" 操作将在中心位置执行一次单击。

另一方面,您使用的是 uiautomator 2.0,您应该使用 UiObject2 而不是 UiObject。

BySelector selector = By.res("resourceID");
UiObject2 obj = mDevice.findObject(selector);

所以它可能对其他人有用,请记住 UiObject 应该只包含一个组件标识符(UiObject 不允许使用组件 ID + 组件文本或描述)。

样本:

UiObject myObject = mDevice.findObject(new UiSelector().text(getInstrumentation().getTargetContext()
        .getString((R.id.idOfMyElement)))
        .clickable(true).checkable(false));

 UiObject myObject = mDevice.findObject(new UiSelector().text(getInstrumentation().getTargetContext()
        .text(contentOfMyElement)
        .clickable(true).checkable(false));