无法打印移动视图滚动中显示的所有元素

时间:2017-08-31 14:01:13

标签: java selenium-webdriver appium

如何使用java在appium中打印移动屏幕上显示的所有元素,实际上我编写了一个代码: -

List<WebElement> orderidList=driver.findElementsByXPath("//android.widget.TextView[contains(@resource-id,'view_shipments_OrderNo_TextView')]")
for (int i = 0; i < orderidList.size(); i++) {
                System.out.println(orderidList.get(i).getText());
            }

但它会打印手机视图可见的orderids名称。但我想要所有orderid的不同列表,所有orderid在滚动后都可见,我可以实现滚动但我不知道我需要滚动多少。请建议!! 这是UI automator的屏幕截图,我想得到所有orderid的列表: - enter image description here

2 个答案:

答案 0 :(得分:1)

这是预期行为。 UiAutomator只能检测Android设备屏幕上的可见元素。您可以看到元素列表可见。如果你想获得所有元素的列表,那么你需要滚动并获取列表,滚动并获取列表等,直到结束。使用Appium Inspector / UiAutomator无法获取Android的隐藏元素列表

答案 1 :(得分:0)

像Vinod已经告诉它只会在屏幕上打印可见元素。所以你需要让你的代码执行我们要手动滚动的步骤,滚动直到你看不到任何新元素。看看下面的代码。我使用了链接的hashset来维护元素的顺序,而不是捕获任何重复项。

Set<String> appList = new LinkedHashSet<String>();

By by = By.xpath("//android.widget.TextView[contains(@resource-id,'view_shipments_OrderNo_TextView')]");

        String currentOrder, newOrder;

        do {

            currentOrder = driver.findElements(by).get(0).getText();

            int count = driver.findElements(by).size();

            for (int i = 0; i < count; i++) {
                String appName = driver.findElements(by).get(i).getText();
                appList.add(appName);
            }
            driver.swipe(400, 400, 400, 74, 2000);

            newOrder = driver.findElements(by).get(0).getText();
        } while (!currentOrder.equals(newOrder));