Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java UI automator/有人遇到过UI automator的问题吗?(无法单击元素)_Java_Android_Android Espresso_Automator_Android Uiautomator - Fatal编程技术网

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

Java UI automator/有人遇到过UI automator的问题吗?(无法单击元素),java,android,android-espresso,automator,android-uiautomator,Java,Android,Android Espresso,Automator,Android Uiautomator,我的问题的史前史: UiObject myObject = mDevice.findObject(new UiSelector().text(getInstrumentation().getTargetContext() .getString((R.id.idOfMyElement))) .clickable(true).checkable(false)); 我正在简单MacAir(2014)上学习使用android studio(3.0.1)的UI autom

我的问题的史前史:

UiObject myObject = mDevice.findObject(new UiSelector().text(getInstrumentation().getTargetContext()
        .getString((R.id.idOfMyElement)))
        .clickable(true).checkable(false));
我正在简单MacAir(2014)上学习使用android studio(3.0.1)的UI automator(2.1.3)和Espresso测试。 之前,我已经为测试运行创建了功能套件,它可以在很长一段时间内正常工作。 但上周我注意到与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();

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

我正在尝试用另一种方法解决它:

UiObject myObject = mDevice.findObject(new UiSelector().text(getInstrumentation().getTargetContext()
        .getString((R.id.idOfMyElement)))
        .clickable(true).checkable(false));
  • 首先,我认为移动设备有问题,所以我在不同的设备(虚拟和物理)上启动了几个测试(使用UI自动机操作)
  • 通过重新启动清除android studio缓存
  • 同步gradle(我已经很长一段时间没有更改了-3个月或以上)+清除我的项目+重新构建它
  • 在gradle依赖项中使用以前版本的UI automator
  • 重新安装android studio
所有这些项目都无法解决我所面临的问题。 此外,我在另一个android项目中尝试了上述示例,但它也不起作用

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


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

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

另一方面,在使用uiautomator 2.0时,应该使用UiObject2而不是UiObject

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

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

另一方面,在使用uiautomator 2.0时,应该使用UiObject2而不是UiObject

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

因此,它可能对其他人有用,请记住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));

因此,它可能对其他人有用,请记住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));

顺便说一句,UiObject2不允许您在分支条件下使用EXIST语句,在我的情况下它不好。非常感谢,我已经解决了我的问题。我唯一的问题是——克隆了UiObject结构中的bug,不知怎么的,我通过我的项目克隆了它。顺便说一句,UiObject2不允许在分支条件下使用EXIST语句,在我的情况下它不好。非常感谢,我已经解决了我的问题。我唯一的问题是——在UiObject结构中克隆了bug,不知何故,我通过我的项目克隆了它。