uiautomator - 当我验证每个列表项中的文本时,无法让 ListView 滚动。当我点击屏幕上的最后一个项目时它就失败了

Posted

技术标签:

【中文标题】uiautomator - 当我验证每个列表项中的文本时,无法让 ListView 滚动。当我点击屏幕上的最后一个项目时它就失败了【英文标题】:uiautomator - cannot get ListView to scroll as I validate text in each list item. it just fails when I hit the last item on screen 【发布时间】:2015-04-02 06:28:52 【问题描述】:

我正在尝试验证 ListView 中每个列表项中的文本并一一向下滚动,以便我可以验证每个...但由于某种原因,我无法让它继续滚动验证每个元素的列表。有没有人有任何运气自动化这种行动。这是我能来的最接近的。 如果这还不够信息,请告诉我:

     UiScrollable scrollableList = new UiScrollable(new UiSelector()
        .resourceId("com.example.app:id/listView")
                .className(android.widget.ListView.class.getName())
                .index(3));

for ( i = 0; i < 100; i++ ) 
    UiObject listItem = scrollableList.getChildByText(new UiSelector()
        .className("android.widget.RelativeLayout")
        .instance(i), "Text Title");

    UiObject textBody = listItem.getFromParent(new UiSelector()
        .resourceId("com.example.app:id/textBody"));

    System.out.println("Validating: " + textBody.getText());

当时屏幕上只有 5 个 listItems 可见,所以当它试图到达第 6 号时它失败了,因为它不能:

a. 它不会尝试向前滚动以获取列表中的下一个b.,即使它确实向前滚动以获取下一个列表中,实例值将减少到 5,而不是增加到 6。

我已经尝试过不使用 .instance() 方法,但在这种情况下,它只是一遍又一遍地循环列表中的第一项,而不会前进到第 2、3、4 项等。

如果有人遇到过这个问题,我希望得到反馈。

【问题讨论】:

【参考方案1】:

就我而言,我只想从该页面获取所有值。 Android 的限制是您只能使用当前在屏幕上可见的对象。 查看此链接以了解具有移动自动化限制的 Ui Automator - http://www.automationtestinghub.com/more-about-ui-automator-viewer/ 另外,我也试过这个例子-http://www.qaautomated.com/2016/02/how-to-scroll-in-appium.html。我也尝试过这个解决方案,但它对我没有用,但你可以试试这个 -http://www.automationtestinghub.com/uiselector-android/。 我使用了以下代码行来解决我的问题。

// to print value of visible objects on screen.
List<MobileElement> allTitleElements = ((AndroidDriver<MobileElement>)driver).findElementsByAndroidUIAutomator("new UiSelector().resourceId(\"com.experient.swap:id/editText\")");
System.out.println("Element Count - " + allTitleElements.size());

for(MobileElement element : allTitleElements)
 
    System.out.println("Text - " + element.getText());
 
// to click on last element of screen(country in my case) to scroll down page to last object
MobileElement abc = (MobileElement) driver.findElement(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector()).scrollIntoView("
                  +"new UiSelector().text(\"Country\"));"));
          abc.click();

【讨论】:

【参考方案2】:

我已经在python中实现了相同的功能,而不是使用java。我正在编写下面的逻辑,看看它是否对你有帮助。

while(i<100):
   self.d.press('down')
   print self.d(resourceID='android:id/text1').text

此循环向下滚动最多 100 个元素并在下拉列表中返回每个元素。

【讨论】:

以上是关于uiautomator - 当我验证每个列表项中的文本时,无法让 ListView 滚动。当我点击屏幕上的最后一个项目时它就失败了的主要内容,如果未能解决你的问题,请参考以下文章

导航滚动到列表项中的匹配元素

更新多个 SharePoint 列表项

UIAutomation 和在滚动视图中读取静态文本

如何修复每个 <List> 项中的 ButtonGroup 组件 [关闭]

通过 JSON 将背景图像填充到列表视图项中的问题

从列表框项中获取文本