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
有人知道如何修复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,不知何故,我通过我的项目克隆了它。