要解决的问题:Appium测试Android混合应用时,第二次切换到WebView时失败

原因分析:在用Appium测试Android混合应用时,当程序第一次切换到WebView时,可以正常进行自动化测试。可是当程序第二次切换到WebView时,Appium会自动找到到第一次打开的Html页面,那么这时Appium就无法定位我们第二次打开的Html页面中的元素。

Appium第一次切换到Html页面时,会新生成一个Chromedriver;当第二次切换到Html时,会使用已经存在的Chromedriver。但其实在我们的应用里面每次打开一个Activity时一般都是会重新创建一个WebChromeClient,所以这里就把它改成无论如何都生成一个新的Chromedriver。

解决步骤:修改Appium源码

      Appium安装目录下的文件

      Appium\node_modules\appium\lib\devices\android\android-hybrid.js,文件中有这样一个函数:

      androidHybrid.startChromedriverProxy = function (context, cb) {
       cb = _.once(cb);
       logger.debug("Connecting to chrome-backed webview");
       if (this.chromedriver !== null) {
       return cb(new Error("We already have a chromedriver instance running"));
       }        if (this.sessionChromedrivers[context]) {
       // in the case where we've already set up a chromedriver for a context,
      // we want to reconnect to it, not create a whole new one
      this.setupExistingChromedriver(context, cb);
      } else {
       this.setupNewChromedriver(context, cb);
       }
      };

      改为:

      androidHybrid.startChromedriverProxy = function (context, cb) {
      cb = _.once(cb);
      logger.debug("Connecting to chrome-backed webview");
      if (this.chromedriver !== null) {
      return cb(new Error("We already have a chromedriver instance running"));
      }       // if (this.sessionChromedrivers[context]) {
       // // in the case where we've already set up a chromedriver for a context,
      // // we want to reconnect to it, not create a whole new one
      // this.setupExistingChromedriver(context, cb);
      // } else {
       // this.setupNewChromedriver(context, cb);
       // }
       this.setupNewChromedriver(context, cb);
      };

【亲测】Appium测试Android混合应用时,第二次切换到WebView失败的更多相关文章

  1. 移动端UI自动化Appium测试——Android系统下使用uiautomator viewer查找元素

        在利用Appium做自动化测试时,最重要的一步就是获取对应的元素值,根据元素来对对象进行对应的操作,如何获得对象元素呢?Appium Server Console其实提供了一个界面对话框&qu ...

  2. appium测试android环境搭建(win7)

    第一步:安装appium 1. 下载并安装Node.js(地址:https://nodejs.org/download/) 2. 下载git, 并且配置环境变量:(之前没有配置git, 报错找不到gi ...

  3. Appium 在 Android UI 测试中的应用

    原文地址:https://blog.coding.net/blog/Appium-Android-UI Android 测试工具与 Appium 简介 Appium 是一个 C/S 架构的,支持 An ...

  4. Android Testing学习01 介绍 测试测什么 测试的类型

    Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...

  5. 如何搭建基于C#和 Appium 的 Android自动测试环境

    本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 如果想做手机端的自动化测试,Appium是首选的测试框架,因为网上使 ...

  6. Android SDK Manager for Mac 在线更新镜像地址截至2017-10-01亲测有效

    虽然国内google被墙了,但仍可利用国内的某些镜像网站实现Android SDK在线更新,使用方法如下: 1.启动 Android SDK Manager ,打开主界面,依次选择『Tools』.『O ...

  7. osg for android学习之一:windows下编译(亲测通过)【转】

    1. 首先需要一个OSG for android的环境 (1)NDK 现在Eclipse 对NDK已经相当友好了,已经不需要另外cygwin的参与,具体可以参考 Android NDK开发篇(一):新 ...

  8. 三分钟彻底禁用、隐藏Android设备底部虚拟按钮(亲测有效)

       转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7613970.html Android设备屏幕底部一般都有虚拟导航栏,上面有 back.home等按钮. ...

  9. 转载【微信支付】jsapi支付之传参问题(使用微信官方SDK之PHP版本) V3之WxpayPubHelper 亲测有效,V3WxpayAPI_php_v3.zip版未测试,理论上也是一样的。

    本文转载至:http://blog.csdn.net/geeklx/article/details/51146151 (微信支付现在分为v2版和v3版,2014年9月10号之前申请的为v2版,之后申请 ...

随机推荐

  1. springboot 获取hibernate 的 SessionFactory

    注入bean package cn.xiaojf; import cn.xiaojf.today.data.rdb.repository.RdbCommonRepositoryImpl; import ...

  2. 观《IT培训行业揭秘》触发北大青鸟回忆

    在园子里看到这篇文章<IT培训行业解密(六)>时,挺有感触,回忆顿时涌上心头: 我想起了当年单纯的我们因为各自的原因来到北大青鸟,或因前途迷茫而选择想找一条出路,或因父母的信息闭塞而想给我 ...

  3. android相对布局中控件的常用属性【转】

    Android布局属性详解 RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false android:layout_centerHorizontal 水平居中 andr ...

  4. 码工具通过ICP备案

    5月22日,为广大程序员造福的在线工具--码工具 通过了ICP备案,这也意味着本站也越来越正规化,规范化.大家从今日起就可以在网站底部看到本站的ICP备案号. 备案/许可证编号:粤ICP备170597 ...

  5. linux下查看账号密码的过期时间和设置时间

    [root@localhost myshell]# chage -l Usage: chage [options] [LOGIN] Options: -d, --lastday LAST_DAY se ...

  6. JavaSE教程-02Java基本语法-思维导图

    思维导图看不清楚时: 1)可以将图片另存为图片,保存在本地来查看 2)右击在新标签中打开放大查看 1.注释 定义:用于解释说明程序作用的文字 注释类别 单行注释 格式: //注释文字 多行注释 格式: ...

  7. Java中常见的数据结构的区别

    把多个数据按照一定的存储方式,存储起来,称存储方式之为数据结构. 数据的存储方式有很多,数组,队列,链表,栈,哈希表等等. 不同的数据结构,性能是不一样的,比如有的插入比较快,查询比较快,但是删除比较 ...

  8. jsonp跨域再谈

    昨天面试雷锋网,问到了jsonp跨域的问题,其实这个问题之前就会的,没有多大的深入,记得有一个名词在跨域中出现,就是同源机制, JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在J ...

  9. CentOS7安装使用Docker

    安装 Docker 官方为了简化安装流程,提供了一套安装脚本,CentOS 系统上可以使用这套脚本安装: curl -sSL https://get.docker.com/ | sh 执行这个命令后, ...

  10. .Net Core 图片文件上传下载

    当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...