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();
这种结构的所有对象突然变得无法使用,测试通过并成功,但应用程序状态没有任何变化。
这种结构在我的项目中已经运行了很长时间,但现在所有使用它的测试都不起作用。
我正在尝试用下一种方式解决它:
- 首先,我认为移动设备出了点问题,所以我在不同的设备(虚拟和物理)上开始了几次测试(使用 UI 自动化操作)
- 清除 android 工作室缓存并重新启动
- sync gradle(我之前很长时间没有更改 - 3 个月或以上)+ 清除我的项目 + 重新构建它
- 在 gradle 依赖项中使用以前版本的 UI automator
- 重新安装android工作室
所有这些项目都无法解决我遇到的问题。
另外,我在另一个 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));
史前我的问题:
我正在研究 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();
这种结构的所有对象突然变得无法使用,测试通过并成功,但应用程序状态没有任何变化。 这种结构在我的项目中已经运行了很长时间,但现在所有使用它的测试都不起作用。
我正在尝试用下一种方式解决它:
- 首先,我认为移动设备出了点问题,所以我在不同的设备(虚拟和物理)上开始了几次测试(使用 UI 自动化操作)
- 清除 android 工作室缓存并重新启动
- sync gradle(我之前很长时间没有更改 - 3 个月或以上)+ 清除我的项目 + 重新构建它
- 在 gradle 依赖项中使用以前版本的 UI automator
- 重新安装android工作室
所有这些项目都无法解决我遇到的问题。 另外,我在另一个 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));