Appium 微信 webview 的自动化技术
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
Appium 微信 webview 的自动化技术的更多相关文章
- py+appium微信公众号自动化(已搞定多个坑)
最近需要做微信公众号的自动化测试,遇到了不少坑. 微信公众号自动化与app自动化还是有区别的,因为多了不少坑.打开微信x5内核调试的就不说了,百度有. 1.首先,微信公众号有webview,uiaut ...
- android appium微信等自动化的那些坑儿
1.下载appium自动化安装环境: appium客户端 python语言支持 android studio(包含android sdk和adb) java开发环境 2.微信x5内核调试(网上有详细配 ...
- 微信小程序自动化,记录趟过的坑!
项目思想:关键字+数据驱动混合测试 基于Android-微信小程序自动化的关键是:webview的切换 对于微信App来说如何从NATIVE切换到webview的过程 测试版本信息 1.微信版本:7. ...
- Appium切换webview时候报chromedriver版本问题
前言 用appium切换webview的时候报chrome和chromedriver版本的问题:session not created exception: Chrome version must b ...
- vivo营销自动化技术解密|开篇
一.营销自动化概览 1.1. 什么是营销自动化 营销自动化是指专门为营销部门或组织设计的软件平台和技术,可以更有效地在线进行多渠道营销并使重复性任务自动化.营销部门和销售人员通过制定任务和流程的操作标 ...
- 禁用微信 webview 调整字体大小
原文:http://www.grycheng.com/?p=2411 微信 webview 内置了调整字体大小的功能,对于网页的可用性来说是一个很实用的功能.一些网页的字体设置过小导致用户看不清文字, ...
- (转)iOS Wow体验 - 第八章 - 易用性与自动化技术
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第八章译文精选,也是全书译文的最后一篇.上一篇:W ...
- 微信屏蔽APP分享链接的解决方案原理,剖析微信域名防封技术
为什么很多商家在微信封域名如此严格的情况下,还会挤破头皮去做微信营销和推广呢?又有些人问,为什么别人的域名长时间推广都没事,自己的链接在微信内一推就被拦截呢?这里你可能需要注意一点事,事出无常必有妖. ...
- 微信内转发APP及h5类域名怎么做到防封防拦截,微信域名防红技术原理
我们常常遇到自己正规的网站链接,无端被微信拦截,大家都为这问题苦恼不已.但凡想使用微信来推广产品或者从事活动营销的用户,就一定会遇到域名被微信拦截甚至封停的情况.域名没被封过,那你的营销人生肯定是不完 ...
随机推荐
- JAVA API 实现hdfs文件操作
java api 实现hdfs 文件操作会出现错误提示: Permission denied: user=hp, access=WRITE, inode="/":hdfs:supe ...
- 用CSS3制作50个超棒动画效果教程
这50个CSS动画集合可以让你通过使用JavaScript函数来让动画更生动.为了能够预览到这些惊人的CSS3技术带来的动画特效,请大家使用如Safari和Chrome这类基于WebKit内核的浏览器 ...
- UserCF算法和ItemCF算法的对比
- 解决Google Chrome浏览器字体模糊的问题
之前使用Google的Chrome浏览器一直觉得有时候,其显示的字体比较模糊,不管是Windows XP还是Windows 7都会出现要么显示的网页字体模糊,要么是Chrome浏览器本身显示的菜单模糊 ...
- Saks就const解释
In my last column, I discussed one of the reasons why the rules by which a compiler can place data i ...
- 任意两点间的最短路问题(Floyd-Warshall算法)
/* 任意两点间的最短路问题(Floyd-Warshall算法) */ import java.util.Scanner; public class Main { //图的顶点数,总边数 static ...
- delphi xe10 获取屏幕截图
//截取屏幕图片 function MakeScaleScreenshot(Sender: TControl): TBitmap; function GetScreenScale: Single; v ...
- NX二次开发-算法篇-创建最大边界包容盒
NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <u ...
- linux centos 安装配置rsync
先安装rsync yum install rsync 创建文件,并配置权限 touch /etc/rsyncd.conf touch /etc/rsyncd.secrets /etc/rsyncd.s ...
- ionic-CSS:ionic 按钮
ylbtech-ionic-CSS:ionic 按钮 1.返回顶部 1. onic 按钮 按钮是移动app不可或缺的一部分,不同风格的app,需要的不同按钮的样式. 默认情况下,按钮显示样式为:dis ...