ClassCastException 与新的 Appium-java TouchActions

2024-04-05

我在新的 TouchActions 类中遇到以下错误。

  • JDK版本:1.8
  • 阿皮姆:1.7.2
  • appium.java-client.版本:6.0.0-BETA2
  • 硒.java.版本:3.8.1

 

TouchActions actions = new TouchActions(appiumDriver);

运行时错误:

java.lang.ClassCastException:io.appium.java_client.ios.IOSDriver 无法转换为 org.openqa.selenium.interactions.HasTouchScreen

而下面的旧版本则一切正常:

TouchAction touchAction = new TouchAction(appiumDriver);

显然,这仍然是 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 上下文。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ClassCastException 与新的 Appium-java TouchActions 的相关文章

随机推荐