四时宝库

程序员的知识宝库

小程序满天飞的时代,appium如何开展小程序自动化测试?

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


01 准备阶段


三个inspect工具可选:

  • chrome DevToolschrome://inspect/#devices
  • UC DevTools https://dev.ucweb.com/download/?spm=ucplus.11199946.c-header.6.53974692oQhbSQ
  • TBS Studio (腾讯自家的小程序调试工具)https://x5.tencent.com/tbs/guide/debug/download.html


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

https://x5.tencent.com/tbs/document/debug-detail-wifi.html


02 开启小程序debug模式


腾讯的浏览器driver是独家定制X5内核。发现腾讯家也有很详细的文章 就直接搬链接过来了:

https://x5.tencent.com/tbs/guide/debug/season7.html


03 设置初始化环境


1、配置desired_capabilities(X5内核不能用chromedriver)

# 相比之前的启动参数,小程序的启动参数需要多几项"chromedriverExecutable": chromedriverfilepath, "recreateChromeDriverSessions": True, "chromeOptions": {"androidProcess": "com.tencent.mm:appbrand0"}# chromedriverfilepath的版本需要用在inspect中看到的版本# recreateChromeDriverSessions 用于自动化配置X5内核驱动# chromeOptions 提前指定小程序webview的context


2、打开微信

# 微信的apppackage appActivity{"appPackage": "com.tencent.mm", "appActivity": "com.tencent.mm.ui.LauncherUI"}


3、进入小程序

  • 所有想要进入小程序debug状态的都要从 搜一搜 这个入口进去;有部分人的微信在定位的过程中是无法精确定位到具体元素的,此时我们推荐采用 xpath进行定位;
    有部分人的微信是可以定位到具体元素的可以使用任意方式
  • 进入到搜一搜页面,搜索框是无法进行精确定位的,但是可以xpath定位"搜索"这两个字


在此只能使用XPATH进行定位

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


4、找到小程序运行的context

  • 如图我们使用第一个命令可以得到手机当前app正在活跃的进程
  • 找到带有plugin字样的pid
  • 拿去该pid执行第二个命令即可得到该pid进程的name了
  • 一般name名为:com.tencent.mm:appbrand0 \ com.tencent.mm:tools \ com.tencent.mm:toolsmp的才是小程序的
adb shell dumpsys activity top| findstr ACTIVITYadb shell ps pid


5、切换进该context

context = driver.contexts  # 此时会有两个webview的contextdriver.switch_to.context(context[-1]) # 选取最后一个context进行切换# ['NATIVE_APP', 'WEBVIEW_com.tencent.mm:tools']


6、因为小程序的特性,每个页面都是单独的handle,所以需要我们进行切换

handle = driver.window_handles  # 获取当前页面全部的句柄for i in handle:  # 对全部句柄进行遍历    driver.switch_to.window(i)  # 切到到每一个句柄上    if keyword in driver.page_source:  # 当某个句柄里面有我们要的关键字时就跳出遍历        break


7、进行相关用例测试

  • 此处的操作即可参考我们这个系列里面H5页面的操作啦
  • 不过现在新版本的同学可能可以看到,H5页面也不再是webview这个class了,已经可以进行精确定位了

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接