使用Appium和Desired功能,我在设备中启动Android应用程序,但无法导航到不在屏幕视图中的元素

时间:2014-03-06 06:06:44

标签: javascript android appium

使用Appium和Desired功能,我在设备中启动Android应用程序,但无法导航到不在同一页面的屏幕视图中的元素,JavascriptExecutor也与appium代码不兼容。我使用了UIAutomator查看器来识别objects.But只会识别屏幕视图中的对象。我们需要向下滚动,到最后识别对象,但JavascriptExecutor也与appium代码不兼容,并使用Keys.END和Keys.ARROW_DOWN此外,我无法识别不在同一页面的屏幕视图中的对象。

4 个答案:

答案 0 :(得分:1)

请使用向下滑动的组合,以便在与元素交互之前使元素可见。代码示例 -     HashMap swipeObject = new HashMap();

    WebElement we = driver.findElement(By.xpath("/relative"));
    Dimension screenSize = driver.manage().window().getSize();
    Double screenWidth = Double.valueOf(String.valueOf(screenSize.getWidth())) / 2;
    Double screenHeight = Double.valueOf(String.valueOf(screenSize.getHeight())) / 2;
    swipeObject.put("startX", (screenWidth));
    swipeObject.put("startY", screenHeight + 100);
    swipeObject.put("endX", (screenWidth));
    swipeObject.put("endY", (screenHeight));
    swipeObject.put("duration", 1.0);
    driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
    while (!elementPresent(driver,by, 2)) {
        js.executeScript("mobile: swipe", swipeObject);
        Thread.sleep(1000);
    }
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
}

答案 1 :(得分:0)

1)转到Android sdk文件夹 - >工具 - >执行uiautomatorviewer.bat 2)启动UI Automator查看器后,单击设备图标 3)现在您可以查看应用程序屏幕捕获页面的属性 注意: 使用UI自动机,您只能在屏幕截图方法

中查看属性

答案 2 :(得分:0)

其实我的问题是如何在设备中向下滚动。我已经在使用UIautomatorviewer了。 但是在设备中只能识别屏幕视图中的元素。如果应用程序的屏幕符合模拟器大小,如果emactor大小减少,则可以正常工作。无法识别屏幕内的视图对象.JavascriptExecutor也不是与appium代码兼容,并使用Keys.END和Keys.ARROW_DOWN,我也无法识别不在屏幕视图中的对象。请有人知道如何执行此操作。

答案 3 :(得分:0)

使用最新的Appium,滑动应该适合您。如果你想获得创意并让它在特定区域滚动,这是一个更多的工作,但这是一个java片段开始。

public void swipe(Double startX, Double startY, Double endX, Double endY, Double duration) {
    JavascriptExecutor js = (JavascriptExecutor) driver;
    HashMap<String, Double> swipeObject = new HashMap<String, Double>();
    swipeObject.put("startX", startX);
    swipeObject.put("startY", startY);
    swipeObject.put("endX", endX);
    swipeObject.put("endY", endY);
    swipeObject.put("duration", duration);
    js.executeScript("mobile: swipe", swipeObject);
}

Android在元素存在或可见时之间没有区别。无论是真还是假。另一方面,iOS知道什么时候只是在视线之外,并且调用它们上的点击/点击将自动滚动以执行操作。这使得编写测试变得有点困难,您将始终需要滚动,然后在执行下一步操作之前检查它是否存在。