一、环境要求
微信版本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 )
在小程序中进行元素定位于与自动化操作 loc3 = ( MobileBy . XPATH , '//a[contains(text(),"课程")]' )
element3 = wait . until ( EC . element_to_be_clickable ( locator = loc3 ))
print ( "找到课程元素,等待5秒" )
time . sleep ( 5 )
element3 . click ()
print ( "小程序自动化测试成功" )
四、完整代码
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 ( "小程序自动化测试成功" )
1921
93
59
735
58
31
30
914
欢迎来到testingpai.com!
注册 关于