【亲测】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);
      };
时间: 2024-10-06 21:24:15

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

解决android SDK不能更新,appium测试混合app无法返回webview问题

问题:1.connection to the server is unsuccessful(file:///www/asset/index.html)(原因:android系统问题,需要更新)2.appium测试混合app,没有返回webview(原因:主要由于android版本问题,需要原生系统android4.4)3.android SDK不能更新package 4.android SDK中extra文件更新失败问题 解决:一.更新sdk,步骤如下:1.修改hosts文件打开c:/windo

【Android】Activity生命周期(亲测)

测试手机:Nexus 5   系统:4.4 一.测试 测试代码: 1 package com.example.androidalarm; 2 3 import android.app.Activity; 4 import android.content.Context; 5 import android.content.res.Configuration; 6 import android.os.Bundle; 7 import android.util.AttributeSet; 8 impo

Appium - WebView测试(Android)

Appium - WebView测试 作者: Max.Bai 时间: 2015/07 Appium - WebView测试(Android) 现在App都是混合型的,有原生的也包含WebView的,appium测试的时候就需要在原生和WebView之间切换才能完成测试. 1. 查看所有context 查看当前所有的窗口 Set<String> contextNames = driver.getContextHandles(); System.print(contextNames); 结果包含目

Android蓝牙自动配对Demo,亲测好使!!!

蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框. 转载请注明出处http://blog.csdn.net/qq_25827845/article/details/52400782 经过最近一段时间得研究,针对网上给出的案例.总结了一个亲测好使的Demo. 说明如下: 1.本Demo用来连接蓝牙设备HC-05,如果你要连接其他蓝牙设备,注意修改相关名字以及修改设备初试pin值. 2.将Demo安装在Android手机上,点击按钮,可以实现与目标蓝牙设备的自动

Android: 亲测解决模拟器启动慢的问题

1.首先在对应的sdk manager里面下载一个4.03以上的api. 这里我选择的是4.2.2 (api17) 2.选择里面的" Intel Hardware Accelerated Execution Manager" "Intel x86 Atom System Image" 来下载. 当然其他必备的也要下载. 看我勾选的项: 3. 下载完后. 对应的目录找到这个文件,安装.一直默认即可.然后重启电脑. 4. 创建模拟器 剩下的就是享受了.试试看 转自:ht

Android Studio常用快捷键(个人亲测,常用!)

Android Studio亲测快捷键!!!本人亲测,常用!!! 由于最近从eclipse转到as,以前很多的快捷键都不能用了啊,感到很头疼. ctrl+shift+s,ctrl+o,ctrl+d,有的快捷键要不就是不管用了,要不就是改了. 于是把网上的找了一下,自己整理一下,最长用的都放在这里,以后有需要的话再添加.我觉得把很多快捷键一大坨一大坨的放在这里,既不好看,又不美观,以下是本人亲测的. ctrl + alt + left/right  跳到上一个位置,下一个位置 ctrl + h 列

解决Android Studio启动项目后一直处于refreshing &#39;View&#39; gradle project,快速解决亲测有效

一直处于refreshing 'View' gradle project最根本的原因是项目中所用到的gradle版本在GRADLE_USER_HOME这个路径下没有找到,所以就利用distributionUrl这个路径进行下载,但是呢下载的时候会非常非常慢,So就一直卡在了refreshing 'View' gradle project 我的这个GRADLE_USER_HOME="C:\Users\Ivan\.gradle\wrapper\dists",大家可以根据自己的路径找到 要快

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

   转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7613970.html Android设备屏幕底部一般都有虚拟导航栏,上面有 back.home等按钮. 虽然现在很多版本的android系统提供了暂时隐藏底部导航栏的功能,但是对于一些需要彻底禁用虚拟按钮的应用来说,暂时隐藏是不足够的. 网上搜索到的在代码中隐藏导航栏的方法都是暂时的,例如: View decorView = getWindow().getDecorView(); int uiOpti

Android蓝牙自动配对Demo,亲测好使!!!(转)

蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框. 转载请注明出处http://blog.csdn.net/qq_25827845/article/details/52400782 源码下载地址:https://github.com/chaohuangtianjie994/BlueTooth-AutoPair 经过最近一段时间得研究,针对网上给出的案例.总结了一个亲测好使的Demo. 说明如下: 1.本Demo用来连接蓝牙设备HC-05,如果你要连接其他蓝牙