相关文章推荐
有腹肌的斑马  ·  微信小程序自动化实战(appium+pyth ...·  6 月前    · 
有腹肌的斑马  ·  Appium微信小程序自动化之开启webvi ...·  6 月前    · 
有腹肌的斑马  ·  微信小程序UI自动化调研&miniu ...·  6 月前    · 
有腹肌的斑马  ·  appium操控微信小程序的坑原创 - ...·  6 月前    · 
有腹肌的斑马  ·  自动化-Appium-微信小程序(Pytho ...·  6 月前    · 
小百科  ›  自动化-Appium-微信小程序(Python版) - 腾讯云
Appium(测试) 软件 微信小程序 webview appium
有腹肌的斑马
6 月前
wangmcn

自动化-Appium-微信小程序(Python版)

腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
发布
wangmcn
社区首页 > 专栏 > 自动化-Appium-微信小程序(Python版)

自动化-Appium-微信小程序(Python版)

作者头像
wangmcn
发布 于 2022-07-25 13:27:05
发布 于 2022-07-25 13:27:05
7.7K 0
举报
文章被收录于专栏: AllTests软件测试 AllTests软件测试

微信小程序

微信小程序其实也是正常的webview,但需要在微信里打开X5调试页面进行设置,脚本添加androidProcess参数才可以执行自动化测试。

本章示例为微信Android版本进行讲解(Windows与Mac环境下操作基本一致,此次示例为在Windows环境)。

1、编写脚本

1、首先获取真机设备标识,命令行输入命令 adb devices

2、真机设备里安装微信应用程序,输入安装命令 adb install -r 进行安装,或者使用手机助手进行安装。本章示例微信版本6.6.5

3、打开X5调试页面

打开微信,在任何聊天窗口内输入debugx5.qq.com,之后点击打开。

或者,通过微信扫一扫,扫描下面的二维码,进入X5调试页面。

4、信息页中,勾选“打开TBS内核Inspector调试功能”。

5、接下来开始使用查找元素定位工具来获取元素的属性值等信息,微信应用程序的原生例如可以使用Android SDK的uiautomatorviewer工具查找元素,小程序页面识别不到webview中的元素,例如显示android.webkit.WebView,那么要用什么工具查找定位呢?例如:京东购物。

接下来打开PC的Chrome浏览器,输入访问地址chrome://inspect/

如图所示,当前打开的小程序界面就是Webview。

点击页面链接(链接很多,要挨个点击查看哪个是),弹出新窗口,显示当前页面的Webview元素信息(由于国内网络问题,第一次页面加载可能需要FANQIANG)。元素定位方法同Selenium WebDriver一致。

6、获取当前小程序的进程

微信有很多的进程,每一个小程序都运行在不同的进程中。 微信打开小程序(例如:京东购物),查看当前运行在哪个进程中。

(1)查询pid,命令行输入 adb shell dumpsys activity top | findstr ACTIVITY

(2)查询当前小程序进程,命令行输入 adb shell ps 查询的pid

脚本参数添加:

代码语言: javascript
复制
# 启动微信小程序,要设置这里
# 查询pid,命令行输入 adb shell dumpsys activity top | findstr ACTIVITY
# 查询当前小程序进程,命令行输入 adb shell ps 查询的pid
desired_caps['chromeOptions'] = {'androidProcess': 'com.tencent.mm:appbrand0'}

7、切换NATIVE_APP还是WEBVIEW_com.tencent.mm:tools,使用switch_to.context方法。

8、脚本代码:

代码语言: javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
import time
微信小程序
# 定义启动设备需要的参数
desired_caps = {}
# 使用哪个自动化测试引擎
# 默认为Appium,或Selendroid或UiAutomator2或Espresso用于Android;或XCUITest用于IOS
desired_caps['automationName'] = 'Appium'
# 使用哪个移动操作系统平台 iOS, Android, FirefoxOS
desired_caps['platformName'] = 'Android'
# 移动操作系统版本
desired_caps['platformVersion'] = '6.0'
# 使用的移动设备或模拟器的类型
# iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4 等等
# 在IOS上,这个关键字的值必须是使用`instruments -s devices`得到的可使用的设备名称之一
# 在Android上,这个关键字目前不起作用
desired_caps['deviceName'] = 'honor'
# 连接的物理设备的唯一设备标识
desired_caps['udid'] = 'MYV0215825000026'
# 要运行Android应用的包名
desired_caps['appPackage'] = 'com.tencent.mm'
# 要从包中启动的Android activity的活动名称
desired_caps['appActivity'] = 'com.tencent.mm.ui.LauncherUI'
# 启用Unicode输入法,设置为true可以输入中文字符,默认为false
desired_caps['unicodeKeyboard'] = True
# 在设定了`unicodeKeyboard`关键字运行Unicode测试结束后,将键盘重置为其原始状态
# 如果单独使用,将会被忽略,默认值`false`
desired_caps['resetKeyboard'] = True
# 在此会话之前不要重置应用程序状态
# Android 不要停止应用程序,不要清除应用程序数据,也不要卸载apk
# IOS 测试后不要销毁或关闭SIM卡。开始测试运行在任何模拟运行,或设备插入
desired_caps['noReset'] = True
# 执行完整的重置
# Android 停止应用程序,清除应用程序数据并在测试后卸载apk
# IOS 在真机设备测试后卸载应用程序,在模拟器测试后摧毁模拟器
desired_caps['fullReset'] = False
# 设置命令超时时间,单位:秒
# 达到超时时间仍未接收到新的命令时Appium会假设客户端退出然后自动结束会话
desired_caps['newCommandTimeout'] = 60
# 启动微信小程序,要设置这里
# 查询pid,命令行输入 adb shell dumpsys activity top | findstr ACTIVITY
# 查询当前小程序进程,命令行输入 adb shell ps 查询的pid
desired_caps['chromeOptions'] = {'androidProcess': 'com.tencent.mm:appbrand0'}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
print("启动微信应用程序")
time.sleep(10)
# 点击发现
driver.find_element_by_xpath("//*[@text='发现']").click()
time.sleep(5)
# 向下滑动
TouchAction(driver).press(x=170, y=530).wait(1000).move_to(x=170, y=230).release().perform()
time.sleep(2)
# 点击小程序
driver.find_element_by_xpath("//*[@text='小程序']").click()
time.sleep(2)
# 点击京东购物
driver.find_element_by_xpath("//*[contains(@text, '京东购物')]").click()
time.sleep(8)
contexts = driver.contexts
for context in contexts:
    # 打印出来看看有哪些context
    print(context)
# 切换到webview模式以便查找web元素
driver.switch_to.context("WEBVIEW_com.tencent.mm:tools")
# 获取当前窗口的句柄
Handle = driver.current_window_handle
print("当前句柄: " + Handle)
# 获取所有窗口的句柄
Handles = driver.window_handles
for h in Handles:
    if h == Handle:
        print("忽略句柄: " + h)
    else:
        driver.switch_to.window(h)
        print("跳到句柄: " + h)
        # 打印当前网页源码
        print("句柄 " + h + " 网页源码:" + driver.page_source)
time.sleep(2)
# 点击领优惠券
driver.find_element_by_xpath("//wx-view[text()='领优惠券']").click()
time.sleep(5)
driver.keyevent(4)
# 切换到App模式
driver.switch_to.context("NATIVE_APP")
time.sleep(5)
# 点击分类
driver.find_element_by_xpath("//android.widget.TextView[@text='分类']").click()
time.sleep(5)
driver.quit()

2、执行脚本

1、开启Appium服务(任选一种即可)

方式一:开启Appium Server

打开命令行,输入 appium --address 127.0.0.1 --port 4723 --no-reset --session-override

如图所示,Appium服务开启。

方式二:开启Appium Desktop

打开Appium Desktop

如服务IP和端口默认的情况下,直接点击Start Server v1.8.0来开启Appium服务,如图所示。

2、选中脚本鼠标右键Run,执行测试脚本。

脚本执行步骤:

(1)启动微信应用程序

(2)点击发现

(3)向下滑动

(4)点击小程序

(5)点击京东购物

(6)打印出被测App的NATIVE_APP和WEBVIEW

代码语言: javascript
复制
NATIVE_APP
WEBVIEW_com.tencent.mm:appbrand1
WEBVIEW_com.tencent.mm:appbrand0
 
推荐文章
有腹肌的斑马  ·  微信小程序自动化实战(appium+python) 原创 - CSDN博客
6 月前
有腹肌的斑马  ·  Appium微信小程序自动化之开启webview调试功能方法封装
6 月前
有腹肌的斑马  ·  微信小程序UI自动化调研&minium的环境搭建和最佳实践
6 月前
有腹肌的斑马  ·  appium操控微信小程序的坑原创 - CSDN博客
6 月前
有腹肌的斑马  ·  自动化-Appium-微信小程序(Python版) - 腾讯云
6 月前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号