学会这一招,轻松玩转小程序自动化

一、环境要求

  1. 微信版本 weixin7.0.10.apk 版本,否则 uc-devtools 检测不到 webview 无法进入 inspect 调试模式

  2. JDK 版本 1.8

  3. android-sdk 版本 29.0.2

  4. 微信的 webview 版本驱动版本 89

  5. appium==1.21.0

  6. uc-devtools 去官网下载最新版本即可

二、步骤
  1. 打开手机 usb 开发者调试模式并连接电脑

  2. 安装 weixin7.0.10.apk 版本,开启微信 WebView 调试模式

  3. 下载对应驱动(WebView),7.0.10 版本的微信是 89 版本的驱动

  4. 启动参数修改为微信的【包名】和【界面名】

  5. 增加启动参数,配置使用微信的 webview 版本(默认是使用 Android 自带的 webview)

  6. 增加启动参数,配置 webview 驱动路径

  7. 增加启动参数,中文输入兼容处理

  8. 操作安卓手机进入小程序入口

  9. 定位柠檬班软件测试小程序点进去

  10. 获取柠檬班软件测试小程序名称

  11. 增加启动参数,指定需要操作的小程序名称,拿到 10 步骤回去的小程序名称

  12. 从 native 切换到微信 webview,通过 10 步骤拿到的小程序名称切换

  13. 通过元素定位,在小程序 webview 中切换到【柠檬班软件测试】窗口

  14. 在小程序中进行元素定位于与自动化操作

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337

三、步骤详解
  1. 打开手机 usb 开发者调试模式并连接电脑
    安卓手机开启调试模式各个品牌手机方法都不太一样,各位看官自学百度,或者参考手机厂商官方文档。

  2. 安装 weixin7.0.10.apk 版本,开启微信 WebView 调试模式
    豌豆荚下载微信历史版本:https://www.wandoujia.com/apps/596157/history_v1840

  3. 下载对应驱动(WebView),7.0.10 版本的微信是 89 版本的驱动
    驱动下载:http://npm.taobao.org/mirrors/chromedriver/

  4. 启动参数修改为微信的【包名】和【界面名】
    adb shell dumpsys window windows | findstr mFocusedApp
    'appPackage':'com.tencent.mm',
    'appActivity':'com.tencent.mm.ui.LauncherUI',

  5. 增加启动参数,配置使用微信的 webview 版本
    'recreateChromeDriverSessions':True,

  6. 增加启动参数,配置 webview 驱动路径
    'chromedriverExecutable':r'D:\chromeDriver\89\chromedriver.exe',

  7. 增加启动参数,中文输入兼容处理
    'unicodeKeyboard':True

  8. 操作安卓手机进入小程序入口
     

    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)
  9. 定位柠檬班软件测试小程序点进去

    
     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)
  10. 获取柠檬班软件测试小程序名称
    获取进程号:adb shell dumpsys activity top | findstr ACTIVITY
    获取进程名称:adb shell ps 进程号

  11. 增加启动参数,指定需要操作的小程序名称,拿到 10 步骤回去的小程序名称
    'chromeoptions':{"androidprocess":"com.tencent.mm:appbrand0"}

  12. 从 native 切换到微信 webview,通过 10 步骤拿到的小程序名称切换
    driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0')

  13. 通过元素定位,在小程序 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)

  14. 在小程序中进行元素定位于与自动化操作

四、完整代码
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("小程序自动化测试成功")

你可能感兴趣的:(小程序,自动化,测试工具,python,分布式,rabbitmq)