app自动化测试(九) appium 微信小程序 自动化测试

现阶段,小程序越发的火,微信也给了巨量的流量诱惑。很多公司都有进行小程序开发。
那么小程序可以进行自动化测试吗?
当然是可以的!

准备阶段

三个inspect工具可选(在APP的H5页面测试中也有提及)

  1. chrome DevTools chrome://inspect/#devices

  2. UC DevTools https://dev.ucweb.com/download/?spm=ucplus.11199946.c-header.6.53974692oQhbSQ

  3. TBS Studio (腾讯自家的小程序调试工具)https://x5.tencent.com/tbs/guide/debug/download.html

其实不管是腾讯家的调试工具还是UC家的调试工具,都是对chrome devtools的二次封装
使用上大同小异,以上三个工具选择一个即可,具体使用方式腾讯家很友好的整理了相关的文档
https://x5.tencent.com/tbs/document/debug-detail-wifi.html

开启小程序debug模式

腾讯的浏览器driver是独家定制X5内核。
发现腾讯家也有很详细的文章 就直接搬链接过来了
https://x5.tencent.com/tbs/guide/debug/season7.html

设计初始化环境的步骤

  1. 配置desired_capabilities(X5内核不能用chromedriver)
# 相比之前的启动参数,小程序的启动参数需要多几项
"chromedriverExecutable": chromedriverfilepath, "recreateChromeDriverSessions": True, "chromeOptions": {"androidProcess": "com.tencent.mm:appbrand0"}
# chromedriverfilepath的版本需要用在inspect中看到的版本
# recreateChromeDriverSessions 用于自动化配置X5内核驱动
# chromeOptions 提前指定小程序webview的context
  1. 打开微信
# 微信的apppackage appActivity
{"appPackage": "com.tencent.mm", "appActivity": "com.tencent.mm.ui.LauncherUI"}
  1. 进入小程序
  • 所有想要进入小程序debug状态的都要从 搜一搜这个入口进去
    有部分人的微信在定位的过程中是无法精确定位到具体元素的,此时我们推荐采用 xpath进行定位
    有部分人的微信是可以定位到具体元素的可以使用任意方式


    image.png
  • 进入到搜一搜页面,搜索框是无法进行精确定位的,但是可以xpath定位"搜索"这两个字


    image.png

    在此只能使用XPATH进行定位

  • tips:此搜索框必须先进行点击,再输入文字。否则将有bug
  • 进入到搜索页,此处一样有些人可以精确定位,有些不可以


    image.png
caps = {"appPackage": "com.tencent.mm", "appActivity": "com.tencent.mm.ui.LauncherUI", "chromedriverExecutable": file,
        "recreateChromeDriverSessions": True, "chromeOptions": {"androidProcess": "com.tencent.mm:appbrand0"}}
driver = startup_param(**caps)
wait = WebDriverWait(driver, 20)
loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("发现")')
wait.until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("搜一搜")')
wait.until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("微信热点")')
wait.until(EC.visibility_of_element_located(loc))
loc = (MobileBy.XPATH, "//*[@text='搜索']")
ele = driver.find_element(*loc)
ele.click()
ele.send_keys("京东")

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("京东")')
wait.until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("电商平台")')
wait.until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()
  1. 找到小程序运行的context
  1. 如图我们使用第一个命令可以得到手机当前app正在活跃的进程
  2. 找到带有plugin字样的pid
  3. 拿去该pid执行第二个命令即可得到该pid进程的name了
  4. 一般name名为:com.tencent.mm:appbrand0 \ com.tencent.mm:tools \ com.tencent.mm:toolsmp的才是小程序的
image.png
adb shell dumpsys activity top| findstr ACTIVITY
adb shell ps pid
  1. 切换进该context
context = driver.contexts  # 此时会有两个webview的context
driver.switch_to.context(context[-1]) # 选取最后一个context进行切换
# ['NATIVE_APP', 'WEBVIEW_com.tencent.mm:tools']
  1. 因为小程序的特性,每个页面都是单独的handle,所以需要我们进行切换
handle = driver.window_handles  # 获取当前页面全部的句柄
for i in handle:  # 对全部句柄进行遍历
    driver.switch_to.window(i)  # 切到到每一个句柄上
    if keyword in driver.page_source:  # 当某个句柄里面有我们要的关键字时就跳出遍历
        break
  1. 进行相关用例测试
  • 此处的操作即可参考我们这个系列里面H5页面的操作拉
  • 不过现在新版本的同学可能可以看到,H5页面也不再是webview这个class了,已经可以进行精确定位了


    image.png

参考以下:
https://mp.weixin.qq.com/s/U0jFiRsVsChHb8K9995QKQ

https://www.cnblogs.com/yyoba/p/9455519.html

你可能感兴趣的:(app自动化测试(九) appium 微信小程序 自动化测试)