Android UIautomator 滑动 ViewAnimator
Android UIautomator swiping ViewAnimator
我正在测试我的应用程序,但 DatePicker 有问题。
我只需要向下滑动直到出现另一个月份(搜索特定日期)。
该结构有点棘手,但我使用
让它工作
new UiScrollable(new UiSelector().className(android.widget.ViewAnimator.class.getName())).scrollTextIntoView("November")
问题是,即使视图在滚动,它也是
1) 滚动方向错误(向上)
2) 11月都过去了(甚至2017年11月或2015年11月...)
我怎样才能创造这个条件。在所有视图都以独特的方式命名之后,检查结构可能会找到“2016 年 11 月 1 日”。
好的,看来我找到了一个或多或少可以正常工作的解决方案:
起初我尝试使用子条件,因为 UiSelector 可能有子定义。但事实证明这很难,因为 ViewAnimator 内部是一个包含 "calendar month" 视图的(单个)子对象 ListView。
因此,在其中找到描述为“12 月 15 日...”的子视图很棘手。
新的解决方案就是这样做的。
- 同时(尝试 < MAX_TRIES)
- 如果描述为“12 月 15 日 ...”的元素存在
-> 单击并退出循环
- 向下滚动 1 个元素(下个月)
-> 尝试++
我重复此操作,直到找到(并单击)该元素或用尽最大滚动尝试次数。
滚动后我让设备等待 1 秒。这很有用,因为滑动是异步调用的,并且会在处理点击时继续滑动片刻。
这没有显示为问题(因为视图已被单击)但仍然可能令人困惑。
希望对您有所帮助!如果您找到更好的解决方案,请随时post。
int tries = 0;
while (tries < MAX_TRIES) {
UiObject2 dateField = mDevice.findObject(
By.descStartsWith(SEARCH_DATE));
if (dateField != null) {
dateField.click();
break;
} else {
tries ++;
new UiScrollable(new UiSelector().
className(android.widget.ViewAnimator.class.getName())).
scrollToEnd(1);
mDevice.wait(Until.findObject(By.descStartsWith(SEARCH_DATE)), 1000);
}
}
我正在测试我的应用程序,但 DatePicker 有问题。 我只需要向下滑动直到出现另一个月份(搜索特定日期)。
该结构有点棘手,但我使用
让它工作new UiScrollable(new UiSelector().className(android.widget.ViewAnimator.class.getName())).scrollTextIntoView("November")
问题是,即使视图在滚动,它也是
1) 滚动方向错误(向上)
2) 11月都过去了(甚至2017年11月或2015年11月...)
我怎样才能创造这个条件。在所有视图都以独特的方式命名之后,检查结构可能会找到“2016 年 11 月 1 日”。
好的,看来我找到了一个或多或少可以正常工作的解决方案:
起初我尝试使用子条件,因为 UiSelector 可能有子定义。但事实证明这很难,因为 ViewAnimator 内部是一个包含 "calendar month" 视图的(单个)子对象 ListView。 因此,在其中找到描述为“12 月 15 日...”的子视图很棘手。
新的解决方案就是这样做的。
- 同时(尝试 < MAX_TRIES)
- 如果描述为“12 月 15 日 ...”的元素存在 -> 单击并退出循环
- 向下滚动 1 个元素(下个月) -> 尝试++
我重复此操作,直到找到(并单击)该元素或用尽最大滚动尝试次数。 滚动后我让设备等待 1 秒。这很有用,因为滑动是异步调用的,并且会在处理点击时继续滑动片刻。 这没有显示为问题(因为视图已被单击)但仍然可能令人困惑。
希望对您有所帮助!如果您找到更好的解决方案,请随时post。
int tries = 0;
while (tries < MAX_TRIES) {
UiObject2 dateField = mDevice.findObject(
By.descStartsWith(SEARCH_DATE));
if (dateField != null) {
dateField.click();
break;
} else {
tries ++;
new UiScrollable(new UiSelector().
className(android.widget.ViewAnimator.class.getName())).
scrollToEnd(1);
mDevice.wait(Until.findObject(By.descStartsWith(SEARCH_DATE)), 1000);
}
}