如何使用Appium Java将android滚动视图中的web元素名添加到ArrayList中?
问题描述:
我有一个android中的滚动视图内的元素列表。我需要将所有元素名称添加到ArrayList中。我尝试过很多种滚动方式,而且没有一种能满足我的要求。请帮我实现这一点。如何使用Appium Java将android滚动视图中的web元素名添加到ArrayList中?
这是元素列表的类名:android.support.v7.widget.RecyclerView
这是各元素的id:com.testapp.poker:id/recyclerViewCards
List <String> elementNameList = new ArrayList();
public void getWebElementsNameList(String classNameOfElementList, String elementId){
System.out.println("Items found:");
Gauge.writeMessage("Items found:");
int i = 1;
for(WebElement element : getWebElements(classNameOfElementList, elementId)) {
System.out.println(i + ") " + element.getText());
Gauge.writeMessage(i + ") " + element.getText());
elementNameList.add(element.getText());
i++;
}
}
上面的代码将只抓住这些都对当前视图中可见的元素。我需要一些帮助来修改滚动逻辑。
答
这是预期的行为。 UIAutomator可以返回可见的元素。与硒不同,appium(UiAutomator)无法看到屏幕上不可见的元素。
解决您的问题是: 获取可见元素并将它们添加到数组列表,然后滚动到下一个元素并添加到数组列表,直到列表结束。
答
你可以尝试这样的事情
List <String> elementNameList = new ArrayList();
public void getWebElementsNameList(String classNameOfElementList, String elementId){
nameStart = "";
System.out.println("Items found:");
Gauge.writeMessage("Items found:");
int i = 1;
while(true){
for(WebElement element : getWebElements(classNameOfElementList, elementId)) {
System.out.println(i + ") " + element.getText());
Gauge.writeMessage(i + ") " + element.getText());
elementNameList.add(element.getText());
i++;
}
if (!keepSwipping()) {
break;
}
}
}
private static String nameStart = "";
private boolean keepSwipping() {
if (isElementPresent(By.xpath(FIRST_ELEMENT_XPATH)) && isElementPresent(By.xpath(LAST_ELEMENT_XPATH))) {
AndroidElement firstElement = (AndroidElement) driver.findElementByXPath(FIRST_ELEMENT_XPATH);
AndroidElement lastElement= (AndroidElement) driver.findElementByXPath(LAST_ELEMENT_XPATH);
if (nameStart.equals(firstElement.getText())) {
return false;
} else {
nameStart = firstElement.getText();
swipe(lastElement.getLocation().x, lastElement.getLocation().y, firstElement.getLocation().x,
firstElement.getLocation().y, 2000);
}
return true;
}
return false;
}
你真正需要的所有元素是列表或者你希望做点别的?也许点击其中之一? –