繁体   English   中英

如何使用Appium Java在android滚动视图中将Web元素名称添加到ArrayList中?

[英]How to add web element names in android scroll view into an ArrayList using Appium Java?

我在android的滚动视图中有一个元素列表。 我需要将所有元素名称添加到ArrayList中。 我尝试了多种滚动方式,但没有一种能够满足我的要求。 请帮助我实现这一目标。

这是元素列表的类名称: android.support.v7.widget.RecyclerView这是每个元素的ID: com.testapp.poker:id/recyclerViewCards :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)无法看到屏幕上不可见的元素。

解决问题的方法是:获取可见元素并将其添加到arraylist,然后滚动到下一个元素并添加到arraylist,依此类推,直到列表结束。

您可以尝试这样的事情

 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM