显然,这仍然是 appium 中的一个问题。目前,在原生 Android 中执行此操作的唯一方法是通过 adb 命令:
adb shell input touchscreen swipe <x> <y> <x> <y> <durationMs>
在 Java 中,您可以使用以下代码来实现:
public static String swipe(int startx, int starty, int endx, int endy, int duration) {
return executeAsString("adb shell input touchscreen swipe "+startx+" "+starty+" "+endx+" "+endy+" "+duration);
}
private static String executeAsString(String command) {
try {
Process pr = execute(command);
BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = input.readLine()) != null) {
if (!line.isEmpty()) {
sb.append(line);
}
}
input.close();
pr.destroy();
return sb.toString();
} catch (Exception e) {
throw new RuntimeException("Execution error while executing command" + command, e);
}
}
private static Process execute(String command) throws IOException, InterruptedException {
List<String> commandP = new ArrayList<>();
String[] com = command.split(" ");
for (int i = 0; i < com.length; i++) {
commandP.add(com[i]);
}
ProcessBuilder prb = new ProcessBuilder(commandP);
Process pr = prb.start();
pr.waitFor(10, TimeUnit.SECONDS);
return pr;
}
但是,如果您使用的应用程序具有 Web 视图,则可以更好地使用 JavaScript 进行滚动。向下滚动的代码是:
((JavascriptExecutor)driver).executeScript("window.scrollBy(0,500)", "");
或者向上滚动:
((JavascriptExecutor)driver).executeScript("window.scrollBy(0,-500)", "");
或者滚动到某个元素:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
使用此功能之前请务必切换到 webview 上下文。