解决 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
- 解决 hybird 应用中重复获取 WebView,导致页面元素无法识别的问题
- 解决 hybird 应用中重复获取 WebView,导致页面元素无法识别的问题
- 解决 hybird 应用中重复获取 WebView,导致页面元素无法识别的问题
- android webview 加载重定向页面时点击无法回退,导致重复加载当前页面问题的解决方案
- 解决:防止页面按钮被重复点击,导致页面重复提交的问题
- android webview 点击页面输入框导致页面变大问题的解决
- WebView获取当前网页的页面元素
- 通过JS向表单中增加元素后提交无法获取数据问题的解决。
- 解决Android中WebView视频无法播放的问题
- 安卓解决WebView中无法执行js的问题
- 页面刷新导致插入重复的问题
- 解决WebView文件上传无法重复选择问题
- 解决因为手机设置字体大小导致h5页面在webview中变形的BUG
- 解决因为手机设置字体大小导致h5页面在webview中变形的BUG
- 解决因为手机设置字体大小导致h5页面在webview中变形的bug
- Android——解决端口占用问题导致的模拟器无法识别
- Eclipse中无法识别插件问题的解决
- 解决Windows7中无法识别读卡器的问题
- 抓取爱问知识人问题,保存至数据库。
- Gson简要使用笔记
- [BZOJ 2038]小Z的袜子 莫队(Mo's Algorithm)模板题
- TF-IDF与余弦相似性的应用(二):找出相似文章
- 左传 —— 春秋左氏传
- 解决 hybird 应用中重复获取 WebView,导致页面元素无法识别的问题
- Python学习练习4----Functions(函数)
- python使用jdango创建web项目完整步骤
- Java 的特点----JVM(1)
- try-catch中的message提示
- 顺序表操作
- RELU 激活函数及其他相关的函数
- 深度学习类文章收集
- 快速傅里叶算法实现