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 滚动。当我点击屏幕上的最后一个项目时它就失败了的主要内容,如果未能解决你的问题,请参考以下文章