UIScrollable getChildByText在放弃之前不会滚动

时间:2015-02-14 09:41:19

标签: android uiautomator

我正在使用uiautomator工具为我的应用编写一些自动测试。

以下是有问题的代码:

UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true));
appViews.setAsHorizontalList(); // works on API 17+
UiObject settingsApp = appViews.getChildByText(new UiSelector().className(android.widget.TextView.class.getName()), "Settings");
        settingsApp.clickAndWaitForNewWindow();

当我在KitKat手机上运行时,手机会进入主屏幕,然后点击“应用”,然后选择“应用程序标签”(为清晰起见,此部分代码已从此帖中省略)然后开始寻找“设置”图标 - 它向左水平滚动一次,“已下载”选项卡被选中,然后向右滚动,“设置”不存在,因此测试失败。

然后我拿起了手机,再向左滚动,“设置”就是。

我的问题是为什么它没有滚动浏览所有页面,直到找到“设置”的位置?

2 个答案:

答案 0 :(得分:1)

您可以通过UiScrollable.setMaxSearchSwipes()设置最适合您需要的滑动次数,它会调整在搜索子元素时执行滚动操作时允许的滚动次数。

答案 1 :(得分:0)

我在这里查看了UIScrollable的文档:

https://android.googlesource.com/platform/frameworks/testing/+/f612e6a05f47b28ae0f5715545658c08dd759dd7/uiautomator/library/src/com/android/uiautomator/core/UiScrollable.java

我找到了这个方法:

scrollBackward()

所以我决定以这种方式照顾自己的问题:

    boolean settingsFound = false;
    while(!settingsFound) {
        appViews.scrollBackward();
        try {
            UiObject settingsApp = appViews.getChildByText(new UiSelector().className(android.widget.TextView.class.getName()), "Settings", true);
            settingsApp.clickAndWaitForNewWindow();
            settingsFound = true;
        } catch (Exception e){  
            e.printStackTrace();
        }   
    }

此代码一直向右滚动,直到“设置”可见,然后点击它。