Appium测试Android混合应用时,第二次切换到WebView时的定位问题
2017-06-06 16:37
831 查看
在混合应用中,经常会遇到切换Webview之后,页面还停留在上个页面的问题,当前页面的元素怎么也找不到,网上有说杀掉chromedriver进程来解决,杀进程方式适合Appium和代码在一台机器的情况,如果代码在一台机器上,appium安装在另一台机器上,呵呵,这样杀进程也是解决不了的。既然混合应用切换到webview下,应该和处理web页面一样的,直接使用driver.get(url)方法,url 就是你要跳转到的页面,需要跳转的页面可以通过chrome inspector 找到,或者去问开发。
下面这种方式是转自别人的一遍文章,改了源码,但是如果使用的是客户端的Appium,恐怕只改源码是不能生效的,需要通过编译才能生效。如果使用的是npm 安装的appium,改源码编译后是可以生效的。貌似最新的appium 的npm安装包已经不存在webview缓存的问题了。
转自:http://laocaixw.github.io/2016/11/01/Appium%E6%B5%8B%E8%AF%95Android%E6%B7%B7%E5%90%88%E5%BA%94%E7%94%A8%E6%97%B6,%E7%AC%AC%E4%BA%8C%E6%AC%A1%E5%88%87%E6%8D%A2%E5%88%B0WebView%E6%97%B6%E7%9A%84%E5%AE%9A%E4%BD%8D%E9%97%AE%E9%A2%98/?utm_source=tuicool&utm_medium=referral
在用Appium测试Android混合应用时,当程序第一次切换到WebView时,可以正常进行自动化测试。可是当程序第二次切换到WebView时,Appium会自动找到到第一次打开的Html页面,那么这时Appium就无法定位我们第二次打开的Html页面中的元素。
最近在做Android自动化测试开发,遇到了一个对我这种初学者来说非常棘手的难题,网上怎么找也找不到解决方案,不过最终还是被自己瞎猫碰到了死耗子~~在这里做个记录。废话就不多说,这里就直接提供我的解决方案。
Appium安装目录下的文件
Appium\node_modules\appium\lib\devices\android\android-hybrid.js,文件中有这样一个函数:
改为:
Appium第一次切换到Html页面时,会新生成一个Chromedriver;当第二次切换到Html时,会使用已经存在的Chromedriver。但其实在我们的应用里面每次打开一个Activity时一般都是会重新创建一个WebChromeClient,所以这里就把它改成无论如何都生成一个新的Chromedriver。
下面这种方式是转自别人的一遍文章,改了源码,但是如果使用的是客户端的Appium,恐怕只改源码是不能生效的,需要通过编译才能生效。如果使用的是npm 安装的appium,改源码编译后是可以生效的。貌似最新的appium 的npm安装包已经不存在webview缓存的问题了。
转自:http://laocaixw.github.io/2016/11/01/Appium%E6%B5%8B%E8%AF%95Android%E6%B7%B7%E5%90%88%E5%BA%94%E7%94%A8%E6%97%B6,%E7%AC%AC%E4%BA%8C%E6%AC%A1%E5%88%87%E6%8D%A2%E5%88%B0WebView%E6%97%B6%E7%9A%84%E5%AE%9A%E4%BD%8D%E9%97%AE%E9%A2%98/?utm_source=tuicool&utm_medium=referral
在用Appium测试Android混合应用时,当程序第一次切换到WebView时,可以正常进行自动化测试。可是当程序第二次切换到WebView时,Appium会自动找到到第一次打开的Html页面,那么这时Appium就无法定位我们第二次打开的Html页面中的元素。
最近在做Android自动化测试开发,遇到了一个对我这种初学者来说非常棘手的难题,网上怎么找也找不到解决方案,不过最终还是被自己瞎猫碰到了死耗子~~在这里做个记录。废话就不多说,这里就直接提供我的解决方案。
解决方案:修改Appium源码
Appium安装目录下的文件Appium\node_modules\appium\lib\devices\android\android-hybrid.js,文件中有这样一个函数:
123456789101112131415 | 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); }}; |
12345678910111213141516 | 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失败
- Appium 对于 Android 中webview 页面测试注意的问题
- 【腾讯TMQ】Appium:轻松玩转app+webview混合应用自动化测试
- Android webview 第二次进入字体放大问题
- Android开发之如何在WebView中点击链接使用自身打开(解决出现的选择使用第三方应用的问题)
- appium 切换到 webview 下,执行 webview 下的第二次操作时,proxying chromedriver 的 session 请求无响应
- Android使用WebView无法定位问题的解决方法
- android webview 字体切换 反白乱的问题解决
- android h5 js 混合开发解决webview加载白屏,不加载网页的问题(硬件加速网页渲染,优化体验)
- Appium Hybrid混合应用测试——Native切换WebView(转)
- Appium - WebView测试(Android)
- Appium - WebView测试(Android)
- Android中WebView,打开第三方应用的问题
- android 异常问题 Scrollview中嵌套webview出现大面积空白(第二次打开同一个地址下面才出现空白)
- 解决android 5.0 webview不能加载http与https混合内容的问题
- appium对于混合app的webview页面的测试
- android-使用webview来开发混合应用
- Android中WebView,打开第三方应用的问题
- Appium - WebView测试(Android)