【解决方案】因开发给webview起名不是webview_devtools_remote,appium 切换 webview 报错的问题另类解决思路

原因:

开发又把 m5x 加回来了。。。

解决方案:

切换 webview 操作时,另启动一个线程,执行下面的代码即可,手动重定向端口号到 app 实际的 webview 的名字即可,就能正常的切换 webview 了,算是曲线救国了 :rofl: :rofl: :rofl:

if (!"NATIVE_APP".equals(driver.getContext()))  {
    return;
}
new Thread(() -> {
    try {
        String cmd = "adb forward --list | grep webview_devtools_remote | grep -v m5x";
        String curlCmd = null;
        while (!Terminal.execute(curlCmd).contains("Browser")) {
            // 605dcd5b tcp:17778 localabstract:webview_devtools_remote_8752
            // execute()在终端执行 shell 命令
            String result = Terminal.execute(cmd);
            if (result.length() > 0) {
                String tcpPort = result.substring(result.indexOf(" ") + 5, result.lastIndexOf(" "));
                curlCmd = "curl http://localhost:" + tcpPort + "/json/version";
                // adb -s 605dcd5b forward tcp:17778 localabstract:webview_devtools_remote_m5x_8752
                String newCmd = "adb -P 5037 -s " + new StringBuffer(result).insert(result.lastIndexOf("_"), "_m5x").insert(result.indexOf(" "), " forward");
                Terminal.execute(newCmd);
            }
            Thread.sleep(2000);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}).start();
1 个赞

你算是理解webview的精髓了 :sunglasses: