微信公众号webview测试

前提条件

进行微信webview相关测试,需要准备:

  • 1.一台科学上网的电脑
  • 2.装了微信的安卓机(或模拟器)
  • python/appium环境安装配置好

打开微信调试功能

申明: 这个操作主要参考 文章 ,写的不详细的地方,可以参考原文章

  • 打开微信,任意对话框输入:debugx5.qq.com

    《微信公众号webview测试》 debugx5.png

  • 点击网址 — 勾选【打开TBS内核Inspector调试功能】

    《微信公众号webview测试》 TBS.png

  • chrome inspect
    打开一个微信公众号,以中国电信为例 (这边需要科学上网)

    《微信公众号webview测试》 chrome .png
    《微信公众号webview测试》 inspect.png

简单Demo

大致操作步骤:

  • 打开微信
  • 点击订阅号
  • 点击中国电信
  • 选择 厉害我的国
  • 返回,关闭
# coding=utf-8
# author='Shichao-Dong'
# create time: 2018/7/3 

from appium import webdriver
import time
desired_caps = {
                'platformName': 'Android',
                'platformVersion': '7.0',
                'deviceName': 'WTKGY17811000030',
                'appPackage': 'com.tencent.mm',
                'appActivity': '.ui.LauncherUI',
                'unicodeKeyboard': True,
                'resetKeyboard': True,
                'noReset': True,
                'chromedriverExecutableDir':"D://chromedriver//2.20",
                'chromeOptions': {'androidProcess': 'com.tencent.mm:tools'}
                }

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(10)
driver.save_screenshot('D://code//test/demo.png')
#进入订阅号
driver.find_elements_by_id("com.tencent.mm:id/apv")[3].click()
driver.find_elements_by_id("com.tencent.mm:id/apv")[0].click()
driver.find_elements_by_id("com.tencent.mm:id/aaq")[0].click()
driver.find_elements_by_class_name("android.widget.TextView")[0].click()
time.sleep(3)
#切换webview
print(driver.contexts)
driver.switch_to.context('WEBVIEW_com.tencent.mm:tools')
time.sleep(2)
handles = driver.window_handles
print len(handles)

try:
    driver.switch_to_window(handles[1])
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="namespace_1"]/div[2]/div[1]/a[1]').click()
    time.sleep(2)
    print('定位成功')
except Exception :
    print('切换之下一个handle')

print('开始截图')
driver.switch_to.context('NATIVE_APP')
driver.save_screenshot('D://code//test/lihai.png')
print('截图成功')
driver.find_element_by_id('com.tencent.mm:id/i2').click()
time.sleep(1)
driver.find_element_by_id('com.tencent.mm:id/hm').click()
driver.save_screenshot('D://code//test/dingyue.png')
driver.quit()

更多Demo可见我的Github

几个坑

1.chrome和chromedriver版本要对应好

根据chrome://inspect 上显示的chrome,下载对应的chromedriver
chromedriver下载地址
对应关系,请自行搜索
如上图,我的chrome版本为:53.0.2785.49
对应的chromedriver为 2.26
但是我chromedriver切换为2.26之后,报错

Original error: session not created exception: please close ” and try again

最终解决方案:将版本,将chromedriver版本将为2.20

解决方案,参考这篇文章

2.增加的参数说明

可以看到desired_caps中增加两个参数:

  • chromedriverExecutableDir
    这个参数后面跟着对应的chromedriver地址
    将一些需要的chromedriver下载到本地

    《微信公众号webview测试》 chromedriver

    按需切换所需的chromedriver

  • chromeOptions
    chromeOptions一般用来定制启动选项,由于在appium中切换context识别webview的时候, 把com.tencent.mm:tools的webview识别成com.tencent.mm的webview.,所以为了避免这边问题,加上{‘androidProcess’: ‘com.tencent.mm:tools’}

  • noReset
    这边一定要填 True ,要不然你和女朋友/男朋友的聊天记录,就全部被清空了,吼吼吼

3.切换webview之后无法定位元素

原因是进入webview后会存在多个handle,通过switch_to_window进行handle切换,然后进行元素定位

try:
    driver.switch_to_window(handles[1])
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="namespace_1"]/div[2]/div[1]/a[1]').click()
    time.sleep(2)
    print('定位成功')
except Exception :
    print('切换之下一个handle')

以上所有,欢迎交流学习,批评指正。

    原文作者:迈阿密小白
    原文地址: https://www.jianshu.com/p/8d0dc076458c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞