微信公众号webview测试

作者: 迈阿密小白 | 来源:发表于2018-07-03 20:28 被阅读72次

    前提条件

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

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

    打开微信调试功能

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

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


      debugx5.png
    • 点击网址 -- 勾选【打开TBS内核Inspector调试功能】


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


      chrome .png
      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下载到本地


      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')
    

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

    相关文章

      网友评论

        本文标题:微信公众号webview测试

        本文链接:https://www.haomeiwen.com/subject/dwijuftx.html