代码之家  ›  专栏  ›  技术社区  ›  Boris Bobrov

UI automator/是否有人面临UI automator的问题?(无法单击元素)

  •  0
  • Boris Bobrov  · 技术社区  · 8 年前

    我的问题的史前史:

    我正在学习UI automator(2.1.3)&在simple Mac Air(2014)上使用android studio(3.0.1)进行浓缩咖啡测试。 之前,我已经创建了用于测试运行的功能套件,它可以在很长一段时间内正常工作。 但上周我注意到与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();
    

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

    我正试图用另一种方式解决这个问题:

    • 首先,我认为移动设备有问题,所以我在不同的设备(虚拟和物理)上启动了几个测试(使用UI自动机操作)
    • 通过重新启动清除android studio缓存
    • 同步gradle(我之前已经很长时间没有更改了-3个月或以上)+清除我的项目+重新构建它
    • 在gradle依赖项中使用早期版本的UI automator
    • 重新安装android studio

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

    正如我在UI automator或最新的android studio 3.0.1中看到的问题 我现在所知道的就是UI自动机执行mDevice。按Home()、back等,但不要对我的应用程序的特定元素执行任何操作。

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   Huang Jianan    8 年前

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

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

    BySelector selector = By.res("resourceID");
    UiObject2 obj = mDevice.findObject(selector);
    
        2
  •  1
  •   Boris Bobrov    8 年前

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

    示例:

    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));