Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Appium和所需的功能,我正在设备中启动android应用程序,但无法导航到屏幕视图中不存在的元素_Javascript_Android_Appium - Fatal编程技术网

Javascript 使用Appium和所需的功能,我正在设备中启动android应用程序,但无法导航到屏幕视图中不存在的元素

Javascript 使用Appium和所需的功能,我正在设备中启动android应用程序,但无法导航到屏幕视图中不存在的元素,javascript,android,appium,Javascript,Android,Appium,使用Appium和所需功能,我在设备中启动android应用程序,但无法导航到不在同一页面屏幕视图中的元素,JavascriptExecutor也与appium代码不兼容。我使用UIAutomator viewer来识别对象。但只会识别屏幕视图中的对象。我们需要向下滚动到最后才能识别对象,但JavascriptExecutor也与appium代码不兼容,使用Keys.END和Keys.ARROW_DOWN,我也无法识别不在同一页面屏幕视图中的对象。1)转到Android sdk文件夹-->工具-

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

1)转到Android sdk文件夹-->工具-->执行uiautomatorviewer.bat 2) 启动UI Automator viewer后,单击设备图标 3) 现在,您可以查看应用程序屏幕捕获页面的属性 注:
使用UI automator,您只能在屏幕截图方法中查看属性。实际上,我的问题是如何在设备中向下滚动。我已经在使用UIautomatorviewer。
但是在设备中,只能识别屏幕视图中的元素。Emulator如果应用程序的屏幕适合仿真器的大小,如果Emulator的大小减小,则可以正常工作。同样,无法识别屏幕中看不到的对象。JavascriptExecutor也与appium代码不兼容,使用Keys.END和Keys.ARROW\u DOWN,我也无法识别屏幕视图中不存在的对象。请让人知道如何操作。

使用最新的应用程序,您现在可以使用滑动。如果您想获得创造性,并让它在特定的领域滚动,这需要做更多的工作,但这里有一个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);
}
public void swip(双星tx、双星、双端x、双端y、双持续时间){
JavascriptExecutor js=(JavascriptExecutor)驱动程序;
HashMap swipeObject=新HashMap();
swipeObject.put(“startX”,startX);
swipeObject.put(“startY”,startY);
swipeObject.put(“endX”,endX);
swipeObject.put(“endY”,endY);
swipeObject.put(“持续时间”,持续时间);
js.executeScript(“移动:滑动”,swipeObject);
}

当元素存在或可见时,Android没有区别。要么都是真的,要么都是假的。另一方面,iOS知道什么时候东西刚刚看不见,点击它们就会自动滚动来执行操作。这使得编写测试变得更加困难,在执行下一个操作之前,您将始终需要滚动并检查它是否在那里。

请在与元素交互之前使用向下滑动的组合,使其可见。代码示例- HashMap swipeObject=新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);
}