【亲测】Appium测试Android混合应用时,第二次切换到WebView失败
要解决的问题: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失败的更多相关文章
- 移动端UI自动化Appium测试——Android系统下使用uiautomator viewer查找元素
		在利用Appium做自动化测试时,最重要的一步就是获取对应的元素值,根据元素来对对象进行对应的操作,如何获得对象元素呢?Appium Server Console其实提供了一个界面对话框&qu ... 
- appium测试android环境搭建(win7)
		第一步:安装appium 1. 下载并安装Node.js(地址:https://nodejs.org/download/) 2. 下载git, 并且配置环境变量:(之前没有配置git, 报错找不到gi ... 
- Appium 在 Android UI 测试中的应用
		原文地址:https://blog.coding.net/blog/Appium-Android-UI Android 测试工具与 Appium 简介 Appium 是一个 C/S 架构的,支持 An ... 
- Android Testing学习01 介绍 测试测什么 测试的类型
		Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ... 
- 如何搭建基于C#和 Appium 的 Android自动测试环境
		本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 如果想做手机端的自动化测试,Appium是首选的测试框架,因为网上使 ... 
- Android SDK Manager for Mac 在线更新镜像地址截至2017-10-01亲测有效
		虽然国内google被墙了,但仍可利用国内的某些镜像网站实现Android SDK在线更新,使用方法如下: 1.启动 Android SDK Manager ,打开主界面,依次选择『Tools』.『O ... 
- osg for android学习之一:windows下编译(亲测通过)【转】
		1. 首先需要一个OSG for android的环境 (1)NDK 现在Eclipse 对NDK已经相当友好了,已经不需要另外cygwin的参与,具体可以参考 Android NDK开发篇(一):新 ... 
- 三分钟彻底禁用、隐藏Android设备底部虚拟按钮(亲测有效)
		转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7613970.html Android设备屏幕底部一般都有虚拟导航栏,上面有 back.home等按钮. ... 
- 转载【微信支付】jsapi支付之传参问题(使用微信官方SDK之PHP版本) V3之WxpayPubHelper 亲测有效,V3WxpayAPI_php_v3.zip版未测试,理论上也是一样的。
		本文转载至:http://blog.csdn.net/geeklx/article/details/51146151 (微信支付现在分为v2版和v3版,2014年9月10号之前申请的为v2版,之后申请 ... 
随机推荐
- URL的标准格式
			URL的标准格式 scheme://host:port/path?query#fragment 1. scheme:协议 2. host:主机 3. port:端口 4. path:路径 5. qu ... 
- iOS安全攻防之越狱设备检测
			iOS 越狱(iOS Jailbreaking),是用于获取苹果公司便携装置操作系统iOS最高权限的一种技术手段,用户使用这种技术及软件可以获取到 iOS 的最高权限,甚至可能可以进一步解开运营商对手 ... 
- JavaScript概念总结:作用域、闭包、对象与原型链
			1 JavaScript变量作用域 1.1 函数作用域 没有块作用域:即作用域不是以{}包围的,其作用域完成由函数来决定,因而if /for等语句中的花括号不是独立的作用域. 如前述,JS的在函数中定 ... 
- 织梦DedeCMS调用二级子栏目或者多级栏目的方法
			图2 当前栏目typeid值为3,所以代码如下: {dede:channelartlist typeid='3,3'} <a href="{dede:field name='typeu ... 
- DNS全局负载均衡(GSLB)基本原理
			原理 DNS全局负载均衡通过智能DNS解析来实现,通常在不同的地区设立多个数据中心,每个数据中心又使用多个运营商的线路.目前很多DNS服务商都提供了智能DNS服务,智能DNS通常是利用各运营商分省IP ... 
- js变量提升和函数提升
			变量,作为编程语言最基础的部分,每种语言的变量不尽相同,但又大径相庭.大部分编程语言的变量有块级作用域,如if.for.while... 但JavaScript不纯在块级作用域,而是函数作用域,并且有 ... 
- 安装JDK,配置环境变量有感
			前天无事,心血来潮给公司新配的笔记本(win10系统64位)装开发工具,然后不可避免的就装了JDK,顺理成章的需要配置环境变量,结果就出问题了. 配置完成,测试时,在dos命令窗口输入java命令执行 ... 
- WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code)
			我们第一步就是去了解三层架构和问题然后去看MVVM是怎么去解决这些问题的. 现在,感觉和事实是完全不同的两个东西.当你看到三层架构的框图的时候,你会觉得每层的职责被分配的很好.但是当你你真的去写代码的 ... 
- 发布.net mvc遇到的HTTP错误 403.14-Forbidden解决办法
			请检查一下"处理程序映射",里面是否有"ExtensionlessUrlHandler-Integrated-4.0",如果没有,请注册.net4.0 在运行里 ... 
- angular之$watch、$watchGroup、$watchCollection
			1,原型:$watch: function(watchExp, listener, objectEquality, prettyPrintExpression){}: 2,参数:watchExp(必须 ... 
