Appium 微信 webview 的自动化技术

最近好多人问微信webview自动化的事情, 碰巧我也在追微信webview的自动化和性能分析方法. 先发出来一点我的进展给大家参考下. 此方法用于Android平台, iOS请自行解决

微信的设置

用微信打开debugx5.qq.com, 这是个微信的x5内核调试页面. 你可以在任何聊天窗口内输入这个网址. 并打开它. 勾选”是否打开TBS内核Inspector调试功能”

使用ChromeDriver编写测试用例

首先安装ChromeDriver
从官方下载或者从你的appium的安装路径里面找chromedriver. 在appium的执行日志里面其实也会打印chromedriver的路径的
然后在电脑上启动它, 设置好端口

chromedriver --url-base=wd/hub --port=8000

可以使用selenium或者appium的客户端去编写测试用例.
如下是我的scalatest的测试用例. 大家可以自己用其他的语言实现

test("test chromedriver weixin") {
  val options = new ChromeOptions()
  options.setExperimentalOption("androidPackage", "com.tencent.mm")
  options.setExperimentalOption("androidUseRunningApp", true)
  options.setExperimentalOption("androidActivity", ".plugin.webview.ui.tools.WebViewUI")
  options.setExperimentalOption("androidProcess", "com.tencent.mm:tools")
  val capability = DesiredCapabilities.chrome()
  capability.setCapability(ChromeOptions.CAPABILITY, options)
  val url = "http://127.0.0.1:8000/wd/hub"
  val driver = new AndroidDriver[WebElement](new URL(url), capability)
  driver.get("https://testerhome.com/topics/6954")
  println(driver.getPageSource)
  driver.quit()
}

使用appium编写测试用例

有人会经常问为什么android上appium不能自动化微信webview, 其实是可以的. 主要是目前的appium有个bug导致的. 
在appium中context的切换时, 没有带上一个关键的androidProcess配置导致的. 
他会导致appium识别webview的时候, 把com.tencent.mm:tools的webview识别成com.tencent.mm的webview. 从而导致context切换失败.

正确的用appium测试微信h5的方法如下

test("test weixin h5") {
  val capability = new DesiredCapabilities()
  capability.setCapability("app", "")
  capability.setCapability("appPackage", "com.tencent.mm")
  capability.setCapability("appActivity", ".ui.LauncherUI")
  capability.setCapability("deviceName", "emulator-5554")
  capability.setCapability("fastReset", "false")
  capability.setCapability("fullReset", "false")
  capability.setCapability("noReset", "true")
  //capability.setCapability("unicodeKeyboard", "true")
  //capability.setCapability("resetKeyboard", "true")

  //关键是加上这段
  val options = new ChromeOptions()
  options.setExperimentalOption("androidProcess", "com.tencent.mm:tools")
  capability.setCapability(ChromeOptions.CAPABILITY, options)

  val url = "http://127.0.0.1:4723/wd/hub"
  val driver = new AndroidDriver[WebElement](new URL(url), capability)
  println(driver.getPageSource)
  driver.findElementByXPath("//*[@text=‘我‘]").click
  driver.findElementByXPath("//*[@text=‘收藏‘]").click
  driver.findElementByXPath("//*[contains(@text, ‘美团外卖‘)]").click
  println(driver.getPageSource)
  println(driver.getContextHandles)
  driver.context("WEBVIEW_com.tencent.mm:tools")
  println(driver.getPageSource)
}

最关键的就是这句

val options = new ChromeOptions()
options.setExperimentalOption("androidProcess", "com.tencent.mm:tools")
capability.setCapability(ChromeOptions.CAPABILITY, options)

后记

之前测试加上ChromeOptions配置的时候没有成功, 我以为是appium不支持ChromeOptions, 就给appium-android-driver提交了一个PR
后来jlipps提醒了我一下

我就又追查了几遍, 最后发现是我本地安装appium时候加上的http_proxy环境变量干扰了ChromeDriver的执行.
Appium其实是支持ChromeOptions的

结论也就是现在的Appium其实是可以完美的做微信自动化的

我在想我是不是国内第一个提供微信webview自动化方法的人 
借鉴此思路的同学转发请注明原链. https://testerhome.com/topics/6954

时间: 2024-08-01 10:41:20

Appium 微信 webview 的自动化技术的相关文章

appium 获取微信webview设置

appium 设置获取微信webview信息 (注:此贴参考网上文章,经测试确实可以获取微信webview信息) 具体步骤如下: 1.扫描二维码,进入微信的debug模式 2.勾选Inspector调式功能 3.在adb shell 指令可查看到相关信息,执行:adb shell dumpsys activity top | findstr ACTIVITY ,可获取到进程编号. 在通过,进程编号查询到当前微信的活动名称,执行:adb shell ps [pID] 4.重新执行,并打印drive

《自动化技术中的进给电气运动》及学科学习笔记二

<自动化技术中的进给电气运动> 阅读内容:第1.3节 知识要点: 本节主要以不可调节电气传动系统为例,介绍了系统在时间域的静态和动态特性以及电气系统对于简单信号的响应. 1.采用微分方程分析系统 对于只有一个输入和输出的线性系统都可表示成如下的微分方程形式.其中u为输入,v为输出,且对于实际系统有m≤n. 以不可调电气传动系统为例,列出系统的机械和电气微分方程. (1)JGes=JM+JL (2)uA-eM=RAiA+LAdiA/dt (3)eM=cMωM (4)MM=ML+MB=ML+JGe

微信公众号开发技术基础(二):外网映射工具ngrok的简介和使用

本文结构:(一)用法(二)示例(三)qydev ngrok的下载链接及相关网站 微信公众号开发的时候,微信服务器是需要访问我们的一个公网服务器地址的,但我们又是在本地调试自己的程序的,那怎样让微信服务器能访问到我们本地的服务器呢?那就需要用外网映射工具,将本地IP映射成公网IP,这样就能在公网上访问本地服务了,这里使用ngrok.ngrok原版程序的服务器是在国外的,访问速度极慢或者干脆访问不了,所以这里提供一个服务器搭建在国内的基于ngrok的一个软件:qydev,百度网盘下载链接见文章结尾.

微信小程序 -- 前端技术API手册

小时候随手拿着英语小本子,在厕所或者路上随时翻看的场景大家还记得吗? 现在它有回来了,本次工程主要收录前端各项技术API,整合在微信小程序中,在首页选择要学习的技术就可以进到相关页面. 小程序长这样:               目前的进展是 jQuery API 收录到一半,预计下周 小程序 会先上线,其他内容后续进行补充. 大家有兴趣或者想贡献自己力量的可以联系我,在公众号底部菜单中有联系方式. 如果有想学习微信小程序开发的也可以联系我. 广播: 关注微信公众号 "jQuery每日经典&qu

微信支付开发关键点技术解析

微信支付是由微信及财付通联合推出的移动支付创新产品.如今,随着微信支付的全面开放,相关需求也越来越多,很多开发人员进行微信支付开发及 商家申请微信支付时,面临着诸多疑惑.本文将结合微信支付接口开发的实践,从支付申请到各主要接口的使用方法等方面介绍微信支付的关键点技术. URL设置 目前,微信支付只能由通过微认证的服务号进行申请,订阅号及未认证的服务号均无法申请.登录微信公众平台后台,在左侧的栏目中可找到“微信支付”,点击进入申请界面,可以看到第一项中的“商户基本资料”,点击右侧的“填写”按钮后就

转:微信支付开发关键点技术解析

原文来自于:http://www.csdn.net/article/2014-10-21/2822207-weiixn 微信支付是由微信及财付通联合推出的移动支付创新产品.如今,随着微信支付的全面开放,相关需求也越来越多,很多开发人员进行微信支付开发及商家申请微信支付时,面临着诸多疑惑.本文将结合微信支付接口开发的实践,从支付申请到各主要接口的使用方法等方面介绍微信支付的关键点技术. URL设置 目前,微信支付只能由通过微认证的服务号进行申请,订阅号及未认证的服务号均无法申请.登录微信公众平台后

舍本求末的运维自动化技术热潮

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://caoyameng.blog.51cto.com/4975863/1359732 运维自动化是2010年开始炒得很热的一个概念,也让很多工程师.用人单位瞎激动了很久,我也跟风学过puppet和python,求职双方也经常在面试时花大量时间谈运维自动化. 但冷静下来想想,所谓自动化,只是让培训机构赚钱的噱头而已. 一句话概括运维自动化 单说“运维自动化”几个字太抽象容易被主观塞进去

猴子数据带您解析2019最新微信域名防封技术

有没有这样的情况,有时候运行的好好的网站,因为不小心上传了不符合微信规定的网页,或者被同行恶意举报,而出现被屏蔽,内容无法查看的字样,放弃??不甘心!!于是进入了域名防封的流程,百度上有许多微信域名防封检测的网页,甚至还有一些打着包票说百分之百的防封,在这里,我要提醒大家,没有谁能那样保证,没有百分百一说,好吧,我们进入正题,猴子数据带您具体来解析下微信域名防封技术. 1.检测微信域名并将域名切换.首先你要有一个微信域名检测接口,配置好你的接口请求程序,准备2套域名A和B.我们分享出去的域名是A

解析2019最新微信域名防封技术

的网页,或者被同行恶意举报,而出现被屏蔽,内容无法查看的字样,放弃??不甘心!!于是进入了域名防封的流程,百度上有许多微信域名防封检测的网页,甚至还有一些打着包票说百分之百的防封,在这里,我要提醒大家,没有谁能那样保证,没有百分百一说,好吧,我们进入正题,猴子数据带您具体来解析下微信域名防封技术. 1.检测微信域名并将域名切换.首先你要有一个微信域名检测接口,配置好你的接口请求程序,准备2套域名A和B.我们分享出去的域名是A,但点开后跳到B,前提是要检测一下B有没有被封,这里我们的 B一般需要准