51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师论坛测试积点免费获取渠道攻略【长期招募】博为峰网校招聘兼职讲师!横扫BAT,Python全栈测试开发技能大全
【112期】:软件测试技术哪项更吃香!中国软件测试行业现状调查报告新鲜出炉! 【杂志】做测试行业不偏科的尖子生! 自学软件测试那点事
查看: 2948|回复: 1

[Appium] Appium 微信 webview 的自动化技术

[复制链接]
  • TA的每日心情
    奋斗
    2020-4-8 10:48
  • 签到天数: 499 天

    连续签到: 1 天

    [LV.9]测试副司令

    发表于 2017-1-16 16:31:44 | 显示全部楼层 |阅读模式
    文章出处:https://testerhome.com/topics/6954
    用微信打开debugx5.qq.com, 这是个微信的x5内核调试页面. 你可以在任何聊天窗口内输入这个网址. 并打开它.
    勾选"是否打开TBS内核Inspector调试功能"



    使用ChromeDriver编写测试用例
    首先安装ChromeDriver
    从官方下载或者从你的appium的安装路径里面找chromedriver. 在appium的执行日志里面其实也会打印chromedriver的路径的
    然后在电脑上启动它, 设置好端口
    1. chromedriver --url-base=wd/hub --port=8000
    复制代码
    可以使用selenium或者appium的客户端去编写测试用例.
    如下是我的scalatest的测试用例. 大家可以自己用其他的语言实现
    1. test("test chromedriver weixin") {
    2.   val options = new ChromeOptions()
    3.   options.setExperimentalOption("androidPackage", "com.tencent.mm")
    4.   options.setExperimentalOption("androidUseRunningApp", true)
    5.   options.setExperimentalOption("androidActivity", ".plugin.webview.ui.tools.WebViewUI")
    6.   options.setExperimentalOption("androidProcess", "com.tencent.mm:tools")
    7.   val capability = DesiredCapabilities.chrome()
    8.   capability.setCapability(ChromeOptions.CAPABILITY, options)
    9.   val url = "http://127.0.0.1:8000/wd/hub"
    10.   val driver = new AndroidDriver[WebElement](new URL(url), capability)
    11.   driver.get("https://testerhome.com/topics/6954")
    12.   println(driver.getPageSource)
    13.   driver.quit()
    14. }
    复制代码
    使用appium编写测试用例
    有人会经常问为什么android上appium不能自动化微信webview, 其实是可以的. 主要是目前的appium有个bug导致的.
    在appium中context的切换时, 没有带上一个关键的androidProcess配置导致的.
    他会导致appium识别webview的时候, 把com.tencent.mm:tools的webview识别成com.tencent.mm的webview. 从而导致context切换失败.
    正确的用appium测试微信h5的方法如下
    1. test("test weixin h5") {
    2.   val capability = new DesiredCapabilities()
    3.   capability.setCapability("app", "")
    4.   capability.setCapability("appPackage", "com.tencent.mm")
    5.   capability.setCapability("appActivity", ".ui.LauncherUI")
    6.   capability.setCapability("deviceName", "emulator-5554")
    7.   capability.setCapability("fastReset", "false")
    8.   capability.setCapability("fullReset", "false")
    9.   capability.setCapability("noReset", "true")
    10.   //capability.setCapability("unicodeKeyboard", "true")
    11.   //capability.setCapability("resetKeyboard", "true")

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

    16.   val url = "http://127.0.0.1:4723/wd/hub"
    17.   val driver = new AndroidDriver[WebElement](new URL(url), capability)
    18.   println(driver.getPageSource)
    19.   driver.findElementByXPath("//*[@text='我']").click
    20.   driver.findElementByXPath("//*[@text='收藏']").click
    21.   driver.findElementByXPath("//*[contains(@text, '美团外卖')]").click
    22.   println(driver.getPageSource)
    23.   println(driver.getContextHandles)
    24.   driver.context("WEBVIEW_com.tencent.mm:tools")
    25.   println(driver.getPageSource)
    26. }
    复制代码
    最关键的就是这句
    1. val options = new ChromeOptions()
    2. options.setExperimentalOption("androidProcess", "com.tencent.mm:tools")
    3. capability.setCapability(ChromeOptions.CAPABILITY, options)
    复制代码
    后记
    之前测试加上ChromeOptions配置的时候没有成功, 我以为是appium不支持ChromeOptions, 就给appium-android-driver提交了一个PR
    后来jlipps提醒了我一下



    我就又追查了几遍, 最后发现是我本地安装appium时候加上的http_proxy环境变量干扰了ChromeDriver的执行.
    Appium其实是支持ChromeOptions的
    结论也就是现在的Appium其实是可以完美的做微信自动化的
    我在想我是不是国内第一个提供微信webview自动化方法的人

    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-2-7 08:45
  • 签到天数: 157 天

    连续签到: 1 天

    [LV.7]测试师长

    发表于 2017-3-6 09:41:56 | 显示全部楼层
    学习了,感谢楼主
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2020-5-27 17:56 , Processed in 0.064866 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2020 Comsenz Inc.

    快速回复 返回顶部 返回列表