学会这一招,轻松玩转小程序自动化
上次给同学们介绍了 app 中混合应用自动化怎么做,今天我们再来学习下,app 自动化之——小程序自动化。 |
前言
一、环境要求
-
微信版本 weixin7.0.10.apk 版本,否则 uc-devtools 检测不到 webview 无法进入 inspect 调试模式
-
JDK 版本 1.8
-
android-sdk 版本 29.0.2
-
微信的 webview 版本驱动版本 89
-
appium==1.21.0
-
uc-devtools 去官网下载最新版本即可
二、步骤
-
打开手机 usb 开发者调试模式并连接电脑
-
安装 weixin7.0.10.apk 版本,开启微信 WebView 调试模式
-
下载对应驱动(WebView),7.0.10 版本的微信是 89 版本的驱动
-
启动参数修改为微信的【包名】和【界面名】
-
增加启动参数,配置使用微信的 webview 版本(默认是使用 Android 自带的 webview)
-
增加启动参数,配置 webview 驱动路径
-
增加启动参数,中文输入兼容处理
-
操作安卓手机进入小程序入口
-
定位柠檬班软件测试小程序点进去
-
获取柠檬班软件测试小程序名称
-
增加启动参数,指定需要操作的小程序名称,拿到 10 步骤回去的小程序名称
-
从 native 切换到微信 webview,通过 10 步骤拿到的小程序名称切换
-
通过元素定位,在小程序 webview 中切换到【柠檬班软件测试】窗口
-
在小程序中进行元素定位于与自动化操作
三、步骤详解
-
打开手机 usb 开发者调试模式并连接电脑
安卓手机开启调试模式各个品牌手机方法都不太一样,各位看官自学百度,或者参考手机厂商官方文档。 -
安装 weixin7.0.10.apk 版本,开启微信 WebView 调试模式
豌豆荚下载微信历史版本:https://www.wandoujia.com/apps/596157/history_v1840 -
下载对应驱动(WebView),7.0.10 版本的微信是 89 版本的驱动
驱动下载:http://npm.taobao.org/mirrors/chromedriver/ -
启动参数修改为微信的【包名】和【界面名】
adb shell dumpsys window windows | findstr mFocusedApp
'appPackage':'com.tencent.mm',
'appActivity':'com.tencent.mm.ui.LauncherUI', -
增加启动参数,配置使用微信的 webview 版本
'recreateChromeDriverSessions':True, -
增加启动参数,配置 webview 驱动路径
'chromedriverExecutable':r'D:\chromeDriver\89\chromedriver.exe', -
增加启动参数,中文输入兼容处理
'unicodeKeyboard':True -
操作安卓手机进入小程序入口? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
size = driver.get_window_size() driver.swipe(start_x=size["width"] * 0.5,start_y=size["height"] * 0.2,end_x=size["width"] * 0.5,end_y=size["height"] * 0.9,duration=200) print("滑动成功等待 3 秒") time.sleep(3)
-
定位柠檬班软件测试小程序点进去
loc = (MobileBy.ANDROID_UIAUTOMATOR,'resourceId("com.tencent.mm:id/dd").text("柠檬班软件…")')
element = wait.until(EC.visibility_of_element_located(locator=loc))
element.click()
print("点击柠檬班小程序成功,等待 15 秒")
time.sleep(15)
-
获取柠檬班软件测试小程序名称
获取进程号:adb shell dumpsys activity top | findstr ACTIVITY
获取进程名称:adb shell ps 进程号 -
增加启动参数,指定需要操作的小程序名称,拿到 10 步骤回去的小程序名称
'chromeoptions':{"androidprocess":"com.tencent.mm:appbrand0"} -
从 native 切换到微信 webview,通过 10 步骤拿到的小程序名称切换
driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0') -
通过元素定位,在小程序 webview 中切换到【柠檬班软件测试】窗口
all_handles = driver.window_handles
for handle in all_handles:
driver.switch_to.window(handle)
loc2=(MobileBy.XPATH,'//h1[text()="柠檬班软件测试"]')
try:
if wait.until(EC.visibility_of_element_located(loc2)):
pass
except Exception as e :
print("元素定位没找到继续找")
else:
print("找到了柠檬班软件测试小程序窗口")
break
print("切换窗口从native切换到h5成功,等待5秒")
time.sleep(5)
-
在小程序中进行元素定位于与自动化操作
四、完整代码
import time
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
desired_caps = {
'automationName':'UiAutomator2',
'platformName':'Android',
'platformVersion':'9.0', #真机android系统版本号
'deviceName': 'xiaomi',
'appPackage':'com.tencent.mm',
'appActivity':'com.tencent.mm.ui.LauncherUI',
'noReset':'True',
'chromedriverExecutable':r'D:\chromeDriver\89\chromedriver.exe', #绝对路径使用
'recreateChromeDriverSessions':True, # 使用微信自带的webview
'chromeoptions':{"androidprocess":"com.tencent.mm:appbrand0"}, # 指定小程序
'unicodeKeyboard':True # 中文输入兼容处理
}
driver = webdriver.Remote(command_executor='http://localhost:4723/wd/hub', desired_capabilities=desired_caps)
print("微信启动成功等待20秒")
wait = WebDriverWait(driver=driver,timeout=20)
time.sleep(20)
"""==============================滑动找到小程序入口=============================="""
#滑动找到小程序
size = driver.get_window_size()
driver.swipe(start_x=size["width"] * 0.5,
start_y=size["height"] * 0.2,
end_x=size["width"] * 0.5,
end_y=size["height"] * 0.9,
duration=200)
print("滑动成功等待3秒")
time.sleep(3)
"""==============================点柠檬班软件测试小程序=============================="""
loc = (MobileBy.ANDROID_UIAUTOMATOR,'resourceId("com.tencent.mm:id/dd").text("柠檬班软件…")')
element = wait.until(EC.visibility_of_element_located(locator=loc))
element.click()
print("点击柠檬班小程序成功,等待15秒")
time.sleep(15)
"""==============================切换到切换微信webview=============================="""
#获取所有的contexts
#all_contexts = driver.contexts
#print("获取所有的contexts:",all_contexts)
#切换到微信webview,小程序名称固定的可以写死
driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0')
print("切换微信webview成功,等待3秒")
time.sleep(3)
"""==============================切换窗口找到柠檬班小程序=============================="""
#切换窗口从native切换到h5(handle,遍历获取)
all_handles = driver.window_handles
for handle in all_handles:
driver.switch_to.window(handle)
loc2=(MobileBy.XPATH,'//h1[text()="柠檬班软件测试"]')
try:
if wait.until(EC.visibility_of_element_located(loc2)):
pass
except Exception as e :
print("元素定位没找到继续找")
else:
print("找到了柠檬班软件测试小程序窗口")
break
print("切换窗口从native切换到h5成功,等待5秒")
time.sleep(5)
"""==============================柠檬班小程序中进行元素定位操作=============================="""
#web自动化元素定位,点击课程按钮
loc3 = (MobileBy.XPATH,'//a[contains(text(),"课程")]')
element3 = wait.until(EC.element_to_be_clickable(locator=loc3))
print("找到课程元素,等待5秒")
time.sleep(5)
element3.click()
print("小程序自动化测试成功")
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!