码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【appium】Hybrid应用自动化|微信小程序自动化


    目录

    一、Hybrid(native+webview)应用自动化

    1、webview

    2、Hybrid应用自动化实现

    2.1准备工作

    Step1:准备android 4.4+版本以上的手机/模拟器

    Step2:在app源码中将webview调试模式打开

    Step3:安装UC开发者工具 UC-devtools 识别webview版本 识别web页面元素

    Step4:

    2.2 脚本编写

    Step1:获取所有的contexts:

    Step2:切换到webview context——driver.context(webview context)

    Step3:定位webview中的元素,并执行操作:web网页元素定位和操作。

    Step4:切换回默认的context:

    3  其他操作

    二、微信小程序自动化

    step1:打开微信小程序webview调试开关(微信小程序页面的元素)

    step2:UC开发者工具识别小程序的web元素信息—UCdevtools

    step3:确认微信小程序对应的进程名

    ​编辑step4:X5内核启动参数配置

    step5:编写脚本


    一、Hybrid(native+webview)应用自动化

    1、webview

    Android系统的控件,android是google开发的 用来展示web页面 在系统中作为单独的系统应用存在(特殊)

    2、Hybrid应用自动化实现

    基于UIAutomator+ChromeDriver 、native元生部分走UIAutomator,web部分走Chromedriver,两者结合混搭,从而实现Hybrid自动化

     

    2.1准备工作

    1. Step1:准备android 4.4+版本以上的手机/模拟器
    2. Step2:在app源码中将webview调试模式打开
      ——webview.setWebContentsDebuggingEnabled(true);
    3. Step3:安装UC开发者工具 UC-devtools 识别webview版本 识别web页面元素
    4. Step4:
      • 下载UC-devtools中webview对应匹配的chromedriver chromeDriver下载地址:CNPM Binaries Mirroricon-default.png?t=N7T8https://npm.taobao.org/mirrors/chromedriver/

        CNPM Binaries Mirroricon-default.png?t=N7T8https://registry.npmmirror.com/binary.html?path=chromedriver/

      • 替换Appium自带的chromeDriver:

        • WINDOWS:Appium.exe所在路径\resources\app\node_modules\appium\node_modules\appiumchromedriver\chromedriver\win

        • MAC:/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-chromedriver/chromedriver/mac

    2.2 脚本编写

    1. Step1:获取所有的contexts:
      1. Set contextHandles = driver.getContextHandles();
      2. System.out.println(contextHandles);//NATIVE_APP、WEBVIEW_com.lemon.lemonban
      3. //NATIVE_APP,表示原生app
      4. //WEBVIEW_com.lemon.lemonban,表示WEBVIEW控件
    2. Step2:切换到webview context——driver.context(webview context)

      当driver切换context ,底层存在把AndroidDriver转换成WebDriver, 他们都是remoteWebDriver的子类, 接下来的操作都是web操作

      1. //知道WEBVIEW控件名字的前提下,可以这样切换:
      2. driver.context("WEBVIEW_com.XXXX");
      3. //一般情况下一个页面嵌入一个webview网页,如果嵌了多个webview网页,只能通过不同的名字
      4. //如果一个页面只嵌入了一个webview网页 可以用遍历的形式 只要包含webview 就切换到想要的webview
      5. //这种情况不需要查询
      6. for(String contextHandle:contextHandles){
      7.    if(contextHandle.contains("WEBVIEW")){
      8.        driver.context("WEBVIEW_com.XXX");
      9.   }
      10. }
    3. Step3:定位webview中的元素,并执行操作:web网页元素定位和操作。
    4. Step4:切换回默认的context:

      当driver切回到 NATIVE_APP,WebDriver -> AndroidDriver

      1. driver.context(native context)
      2. ​
      3. //切换回原生app
      4. //⚠️一般就像下面一样用NATIVE_APP,因为大家命名基本上都是这个
      5. driver.context("NATIVE_APP");

    3  其他操作

    比如,滑动

    滑动可以退回到native用页面的滑动api——SlideUp(2)

    也可以在退出之前在webview里面用web的js滑动

    二、微信小程序自动化

    由于腾讯系QQ、微信是基于腾讯自研X5内核,不是谷歌原生webview,所以调试会有些许差异(有很多 app厂商也开始采用X5内核) 微信小程序只能够支持手机,模拟器是不行的

    微信小程序自动化 模拟器应用——显示系统进程——可以看到Android System Webview

    step1:打开微信小程序webview调试开关(微信小程序页面的元素)

    聊天窗口输入如下URL: http://debugmm.qq.com/?forcex5=true http://debugx5.qq.com

    打开X5调试页面,勾选中【打开TBS内核Inspector调试功能】

    相当于进行了【在app源码中将webview调试模式打开】

    step2:UC开发者工具识别小程序的web元素信息—UCdevtools

    step3:确认微信小程序对应的进程名

    微信有很多的进程,微信和小程序的进程是分开的,我们要确定当前小程序是位于哪个进程中:(⚠️最好只开一个小程序,保证只有一个小程序进程)

    1. adb shell dumpsys activity top |  grep/findstr ACTIVITY
    2. ​
    3. 找到ACTIVITY com.tencent.mm/.plugin.appbrand.ui.AppBrandUI 868fc95 pid=7989 的PID
    4. ​
    5. adb shell ps PID

    step4:X5内核启动参数配置

    1. //不清除app数据 !!!!一定要加!!!!
    2. capabilities.setCapability("noReset", true);
    3. //支持X5内核应用自动化配置
    4. //支持小程序自动化测试
    5. capabilities.setCapability("recreateChromeDriverSessions", true);
    6. //ChromeOptions使用来定制启动选项,因为在appium中切换context识别webview的时候,
    7. //把com.tencent.mm:appbrand0的webview识别成com.tencent.mm的webview. 所以为了避免这个问题,加上androidProcess: com.tencent.mm:appbrand0
    8. ChromeOptions options = new ChromeOptions();
    9. //设置小程序进程
    10. options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");
    11. capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    12. //初始化会默认将chrome浏览器打开,需要将Browser置为空
    13. capabilities.setBrowserName("");
    14. //每次启动时覆盖session,否则第二次后运行会报错不能新建session
    15. //capabilities.setCapability("sessionOverride", true);

    step5:编写脚本

    注意:小程序X5内核(webview)版本和chromeDriver版本匹配的时候不能按照常规的chromeDriver版本对照,使用V2.40 chromeDriver

    1. //微信向下滑动,找到小程序
    2. SlideDown(2);
    3. //小程序本质上也是web页面 所以我们也需要切换webview 获取context
    4. System.out.println(driver.getContextHandles());
    5. //切换小程序webview(X5内核)
    6. //driver.context("WEBVIEW_com.tencent.mm:appbrand0");
    7. //driver.context("WEBVIEW_com.tencent.mm:toolsmp");
    8. //进入到web模式,定位小程序页面的元素
    9. //driver.findElementByXPath("//a[contains(text(),'课程')]").click();
    10. //直接定位报错:NoSuchElementException --->因为小程序打开之后会有三个web窗口
    11. //System.out.println(driver.getWindowHandles());显示有三个window句柄
    12. //需要找到正确的web窗口--- 需要切换句柄
    13. //这个API是用来获取所有的窗口句柄
    14. Set windowHandles = driver.getWindowHandles();
    15. for (String windowHandle : windowHandles) {
    16. System.out.println(driver.getCurrentUrl());
    17. //通过窗口的标题来判断
    18. if(driver.getTitle().equals("XXX")) {
    19. //如果是所需页面的title,不再切换,并且退出
    20. break;
    21. }else {
    22. //继续来切换句柄
    23. driver.switchTo().window(windowHandle);
    24. }
    25. }

  • 相关阅读:
    IO流文件相关部分
    【面试专线】【基础知识】【JAVA】基础(二)
    新手做抖店都需要避开哪些坑?怎么做省钱省时,不走弯路做好店
    《The Art of InnoDB》第二部分|第4章:深入结构-磁盘结构-撕裂的页面(doublewrite buffer)
    【C++11】shared_ptr
    利用XtraDiagram.DiagramControl进行流程图形的绘制和控制
    Vue.js模板语法概述
    如何基于 spdlog 在编译期提供类 logrus 的日志接口
    二叉树浅见
    线上HTTP请求导致OOM【max-http-header-size配置不当引起】
  • 原文地址:https://blog.csdn.net/weixin_40772077/article/details/136329681
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号