Appium微信小程序自动化之开启webview调试功能方法封装

简介: Appium微信小程序自动化之开启webview调试功能方法封装

一、前置说明


Appium在微信小程序自动化时,需要开启微信的webview调试功能,以方便对webview的元素进行定位。


二、操作步骤


import time
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver.common.touch_action import TouchAction
from selenium.common import NoSuchElementException
from common.check_utils import CommonChecker
from common.exception import WechatMiniProgramError
from common.logger import logger
from driver.appium.webdriver.webdriver import WebDriver
class WechatMiniProgramDriver:
    """
    - 封装背景:微信从8.0.19开始将内核从x5换成了xweb
        - 需要使用 http://debugxweb.qq.com/?inspector=true 开启微信webview调试功能
        - 使用 http://debugx5.qq.com 不能再开启webview的调试功能,会报 503 错误
    - 小程序的本质:WebView
    - Appium微信小程序自动化的流程:
        - 手机开启usb调试功能, 连接至电脑
        - 开启微信 webview 调试功能
        - 微信内打开相应的小程序
        - chrome浏览器中定位小程序元素,chrome://inspect/#devices
        - 自动化操作元素
    """
    DEBUG_LINK = 'http://debugxweb.qq.com/?inspector=true'
    def __init__(self, webdriver: WebDriver):
        self.driver = webdriver
    @property
    def wrapped_driver(self):
        return self.driver
    def enable_webview_debugging(self):
        """
        如果小程序页面,可以直接定位到元素,则可以不用开启webview_debugging功能;
        如果小程序页面,不能直接定位到元素,需要使用 chrome://inspect/#devices 定位元素,则需要使用本方法开启允许调试功能。
        实现逻辑:将 'http://debugxweb.qq.com/?inspector=true' 在聊天窗口发送给自己,然后在消息窗口点击该链接即可开启webview调试功能
        """
        try:
            # 不直接使用文本定位,避免微信设置为英文时,获取不到元素
            elements = {
                '微信': ('xpath', '//android.widget.RelativeLayout[@resource-id="com.tencent.mm:id/nvt"][1]'),
                '通讯录': ('xpath', '//android.widget.RelativeLayout[@resource-id="com.tencent.mm:id/nvt"][2]'),
                '发现': ('xpath', '//android.widget.RelativeLayout[@resource-id="com.tencent.mm:id/nvt"][3]'),
                '我': ('xpath', '//android.widget.RelativeLayout[@resource-id="com.tencent.mm:id/nvt"][4]'),
            }
            # 从微信首页,点击"我"
            self.driver.find_element(*elements.get('我')).click()
            nick_name_ele = self.driver.find_element('id', 'com.tencent.mm:id/kbb')
            nick_name = nick_name_ele.text
            # 在通讯录中,搜索用户昵称
            self.driver.find_element(*elements.get('通讯录')).click()
            # 点击搜索
            self.driver.find_element('id', 'com.tencent.mm:id/jha').click()
            # 输出用户昵称
            self.driver.find_element('id', 'com.tencent.mm:id/d98').send_keys(nick_name)
            # 点击联系人
            self.driver.find_element('xpath',
                                     f'//android.widget.TextView[@text="{nick_name}"][@resource-id="com.tencent.mm:id/odf"]').click()
            # 给自己发送消息
            self.driver.find_element('id', 'com.tencent.mm:id/bkk').clear().send_keys(self.DEBUG_LINK)
            self.driver.find_element('id', 'com.tencent.mm:id/bql').click()
            # 点击链接
            self.driver.find_elements('id', 'com.tencent.mm:id/bkl')[-1].click()
            # 查找页面名称'微信,是一个生活方式'是否出现,如果出现,表示启动webview调试成功
            self.driver.find_element('id', 'com.tencent.mm:id/oct')
            # 点击X, 关闭‘微信,是一个生活方式’页面,
            self.driver.find_element('id', 'com.tencent.mm:id/actionbar_up_indicator').click()
            # 在聊天窗口,点击返回
            self.driver.find_element('id', 'com.tencent.mm:id/a4p').click()
            # 在搜索页面,点击取消
            self.driver.find_element('id', 'com.tencent.mm:id/b5i').click()
            # 回到"微信"首页
            self.driver.find_element(*elements.get('微信')).click()
            logger.info('Successfully enabled wechat webview debugging.')
        except:
            logger.error('Failed to enable wechat webview debugging.')
    def quit(self):
        return self.driver.quit()


三、Demo验证


import os.path
import pytest
from common import path
from driver.appium.support.wechat import WechatMiniProgramDriver
from driver.appium.webdriver.webdriver import WebDriver
from driver.appium.webdriver.appium_service import AppiumService
def setup_module():
    import logging
    logging.basicConfig(level=logging.DEBUG)
    # 启动 appium server
    server_manager = AppiumService()
    server_manager.start()
@pytest.fixture(scope='module')
def driver():
    appium_server_url = 'http://localhost:4723'
    apk_path = os.path.join(path.get_apk_resources_dir(), 'wechat-8.0.43.apk')
    capabilities = {
        "platformName": "Android",
        "automationName": "uiautomator2",
        "deviceName": "192.168.2.106:5555",
        "udid": "192.168.2.106:5555",
        "app": apk_path,
        # "appPackage": "com.tencent.mm",
        # "appActivity": ".ui.LauncherUI",
        "noReset": "true",
        "forceAppLaunch": "true",  # 注意:加上这个参数才能启动微信
    }
    webdriver = WebDriver(command_executor=appium_server_url, capabilities=capabilities)
    # 实例化WechatMiniProgramDriver
    driver = WechatMiniProgramDriver(webdriver)
    yield driver
    driver.quit()
def test_enable_webview_debugging(driver):
    driver.enable_webview_debugging()


运行代码之后,可以顺利打开微信,通过向自己发送消息并点击消息,开启webview调试功能:

看到这个页面后,表示启动微信webview调试功能启动生效。

目录
相关文章
|
3月前
|
数据安全/隐私保护
陌陌头像留V的最好方法,陌陌最新留QQ号技巧,陌陌动态最聪明的留微信
本资料分享社交平台隐秘留联系方式的方法,包含微信头像艺术化处理、二维码变形术,以及QQ号谐音替换、图片分割等技巧。
|
6月前
|
Web App开发 移动开发 小程序
公众号小程序H5网页像素流送UE5模型的方法分享
本文探讨了如何通过像素流送技术在小程序、公众号等平台展示复杂的3D模型(如UE5引擎开发的楼盘模型、数字孪生展厅)。该技术将GPU和CPU算力需求转移到服务器端,使用户侧无需高性能硬件即可流畅体验。通过Webrtc实现实时云渲染,确保毫秒级响应,且兼容多种浏览器。使用点量云流等产品级软件,老项目只需重新打包为EXE格式,即可轻松嵌入H5网页、小程序或公众号中,支持Unity、WebGL等多种3D应用及传统CAD模型。
211 1
|
7月前
|
机器学习/深度学习 算法 文件存储
神经架构搜索:自动化设计神经网络的方法
在人工智能(AI)和深度学习(Deep Learning)快速发展的背景下,神经网络架构的设计已成为一个日益复杂而关键的任务。传统上,研究人员和工程师需要通过经验和反复试验来手动设计神经网络,耗费大量时间和计算资源。随着模型规模的不断扩大,这种方法显得愈加低效和不够灵活。为了解决这一挑战,神经架构搜索(Neural Architecture Search,NAS)应运而生,成为自动化设计神经网络的重要工具。
|
小程序
小程序消除图片下边距的三个方法
小程序消除图片下边距的三个方法
229 69
|
10月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
585 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
9月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
376 7
|
11月前
|
监控 Devops 持续交付
掌握 GitOps:实现 DevOps 自动化的现代方法
【10月更文挑战第19天】GitOps 是一种基于 Git 仓库管理应用配置和集群状态的现代化 DevOps 方法,通过自动化工具实现声明式配置和持续部署。本文介绍了 GitOps 的核心概念、优势、挑战及实施的最佳实践,帮助团队提高部署效率和系统可靠性。
|
11月前
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
300 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
11月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
349 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法

热门文章

最新文章