解决 hybird 应用中重复获取 WebView,导致页面元素无法识别的问题

来源:互联网 发布:网络店小二 编辑:程序博客网 时间:2024/05/16 08:03

转载地址:https://testerhome.com/topics/4166


第一版代码:可能大多数人开始都会这么写,这样可能导致无法识别到其他窗口WebView的内容。

public void testDemo() {        try {            Log.logInfo("开始切换到WebView模式");            ((AppiumDriver) driver).context("WEBVIEW_com.xx.xx.xx.xx");            Log.logInfo("成功切换到WebView模式,开始查找WebView元素");            driver.findElement(By.cssSelector("#myWeidian > div.tpl_part > ul > li.second > span")).click();            driver.findElement(By.cssSelector("#myWeidian > div.tpl_part > ul > li.last > span")).click();            driver.findElement(By.cssSelector("#myWeidian > div.tpl_part > div")).click();            Log.logInfo("开始切换到NATIVE模式");            ((AppiumDriver) driver).context("NATIVE_APP");        } catch (Exception e) {            // anything        }    }

第二版代码:我的思路是想通过正常途径解决问题,把当前WebView的实例赋给临时对象,用完后调用close()方法(quit()会把整个Seesion关闭),还是以失败告终,有点发吼了。

public void testDemo() {        try {            Log.logInfo("开始切换到WebView模式");            AppiumDriver chromeDriver = (AppiumDriver) ((AppiumDriver) driver).context("WEBVIEW_com.xx.xx.xx.xx");            Log.logInfo("成功切换到WebView模式,开始查找WebView元素");            chromeDriver .findElement(By.cssSelector("#myWeidian > div.tpl_part > ul > li.second > span")).click();            chromeDriver .findElement(By.cssSelector("#myWeidian > div.tpl_part > ul > li.last > span")).click();            chromeDriver .findElement(By.cssSelector("#myWeidian > div.tpl_part > div")).click();            chromeDriver.close();            Log.logInfo("开始切换到NATIVE模式");            ((AppiumDriver) driver).context("NATIVE_APP");        } catch (Exception e) {             // anything        }    }

第三版代码:软的不行来硬的,放了个绝招,杀chromedriver的进程,还真的成功了,有时候真的需要暴力。。。

public void testDemo() {        try {            Log.logInfo("开始切换到WebView模式");            ((AppiumDriver) driver).context("WEBVIEW_com.xx.xx.xx.xx");            Log.logInfo("成功切换到WebView模式,开始查找WebView元素");            driver.findElement(By.cssSelector("#myWeidian > div.tpl_part > ul > li.second > span")).click();            driver.findElement(By.cssSelector("#myWeidian > div.tpl_part > ul > li.last > span")).click();            driver.findElement(By.cssSelector("#myWeidian > div.tpl_part > div")).click();            Log.logInfo("开始切换到NATIVE模式");            ((AppiumDriver) driver).context("NATIVE_APP");            Tools.killProcess("chromedriver");        } catch (Exception e) {            Tools.killProcess("chromedriver");        }    }    public static void killProcess(String processName) {        try {            String cmd = isWindows() ? "tskill " + processName : "killall \"" + processName + "\"";            cmdInvoke(cmd);        } catch (Exception e) {            Log.logInfo(e.getMessage());        }    }    public static String cmdInvoke(String cmd) {        String cmdOut = "";        BufferedReader br = null;        try {            Process p = Runtime.getRuntime().exec(cmd);            br = new BufferedReader(new InputStreamReader(p.getInputStream()));            String line = null;            while ((line = br.readLine()) != null) {                cmdOut = line;            }        } catch (Exception e) {            e.printStackTrace();        } finally {            if (br != null) {                try {                    br.close();                } catch (Exception e) {                    e.printStackTrace();                }            }        }        return cmdOut;    }

阅读全文
0 0
原创粉丝点击