如何使用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的列表: -
答案 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));