【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:
    Set<String> contextHandles = driver.getContextHandles();
    System.out.println(contextHandles);//NATIVE_APP、WEBVIEW_com.lemon.lemonban
    //NATIVE_APP,表示原生app
    //WEBVIEW_com.lemon.lemonban,表示WEBVIEW控件
  2. Step2:切换到webview context——driver.context(webview context)

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

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

    当driver切回到 NATIVE_APP,WebDriver -> AndroidDriver

    driver.context(native context)
    ​
    //切换回原生app
    //⚠️一般就像下面一样用NATIVE_APP,因为大家命名基本上都是这个
    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:确认微信小程序对应的进程名

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

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

step4:X5内核启动参数配置

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

step5:编写脚本

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/708629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4_相机透镜畸变

理论上讲&#xff0c;是可能定义一种透镜而不引入任何畸变的。然而现实世界没有完美的透镜。这主要是制造上的原因&#xff0c;因为制作一个“球形”透镜比制作一个数学上理想的透镜更容易。而且从机械方面也很难把透镜和成像仪保持平行。下面主要描述两种主要的透镜畸变并为他…

ICVQUANTUMCHINA报告:《2024全球量子计算产业发展展望》

2月20日&#xff0c;《2024量子计算产业发展展望》的中文版报告通过光子盒官方平台发布&#xff0c;英文版报告通过ICV官方平台发布。 英文版报告获取地址&#xff1a; https://www.icvtank.com/newsinfo/897610.html 在过去的一年里&#xff0c;光子盒与您一同见证了全球量子…

10 款最佳硬盘分区软件知识分享(2024更新)

硬盘分区软件是您当前需要的最重要的软件之一。我们知道&#xff01; 当今的硬盘分区软件具有令人难以置信的多功能性&#xff0c;并且由于激烈的竞争&#xff0c;对于大多数人来说仍然是相对低成本的投资。 目前&#xff0c;市场上有数十种硬盘分区软件可供选择 - 找到 2024…

力扣-移除元素

问题 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长…

进销存是什么意思?如何开发一款进销存管理系统?

这篇给大家详细介绍一下&#xff0c;进销存到底是什么&#xff0c;进销存管理系统有什么用&#xff1f;企业如何开发一款进销存管理系统&#xff1f; 以下内容示例工具均来自于JDY——https://www.jiandaoyun.com 一、进销存是什么&#xff1f; 1、基本概念 进销存&#xff0…

HarmonyOS开发云工程与开发云函数

创建函数 您可直接在DevEco Studio创建函数、编写函数业务代码、为函数配置调用触发器。 1.右击“cloudfunctions”目录&#xff0c;选择“New > Cloud Function”。 2.输入函数名称后&#xff0c;点击“OK”。 函数名称仅支持小写英文字母、数字、中划线&#xff08;-&a…

vue中组合式API和选项式API的区别

组合式api&#xff08;Composition API&#xff09;是vue3对我们开发者来说变化非常大的更新&#xff0c;我们先不关注具体语法&#xff0c;先对它有一个大的感知。 通过vue2, vue3两种形式实现同一个需求&#xff0c;理解vue3的compition api 带来的好处 两个独立的功能&…

leetcode 重复的子字符串

前要推理 以abababab为例&#xff0c;这里最主要的就是根据相等前后缀进行推导 s [ 0123 ] 如 t【 0123 】 f 【01 23 】 后两个分别是前后缀&#xff0c;第一个是总的字符串&#xff0c;然后可以推导 //首先还是算出…

从Spring Boot应用上下文获取Bean定义及理解其来源

前言 在Spring框架中&#xff0c;Bean是组成应用程序的核心单元。特别是在Spring Boot项目中&#xff0c;通过使用SpringApplication.run()方法启动应用后&#xff0c;我们可以获得一个ConfigurableApplicationContext实例&#xff0c;这个实例代表了整个应用程序的运行时环境…

ArcgisForJS如何使用ArcGIS Server发布的GP服务?

文章目录 0.引言1.ArcGIS创建GP服务2.ArcGIS Server发布GP服务3.ArcgisForJS使用ArcGIS Server发布的GP服务 0.引言 ArcGIS for JavaScript&#xff08;或简称AGJS&#xff09;是一个强大的工具&#xff0c;它允许开发者使用JavaScript在Web浏览器中创建和运行ArcGIS应用程序。…

❤ git操作Github、git操作github

❤ 操作github 一、git操作Github 1、设置用户名和邮件地址 git config --global user.name "nexuslin" git config --global user.email "2455067339qq.com"2、生成本地密钥 ssh-keygen -t rsa -C 2455067339qq.com3、接下来就一直回车&#xff0c;然…

Docker数据集与自定义镜像:构建高效容器的关键要素

目录 博客前言 一.数据卷 1.数据卷介绍 2.实战 宿主机和容器共享目录 容器和容器之间共享目录 二.自定义镜像 1.自定义镜像介绍 2.实战 2.1自定义centos&#xff0c;具备vim及ifconfig作用 构建镜像 通过镜像运行一个容器进行测试 2.2自定义tomact&#xff08;文件为…

(转载)SpringCloud 微服务(三)-Seata解决分布式事务问题

ps:这个原文写的很好&#xff0c;怕后续这个地址失效&#xff0c;备份一个留着自己学习 转自&#xff1a;SpringCloud 微服务&#xff08;三&#xff09;-Seata解决分布式事务问题_seata 黑马 代码-CSDN博客 看完了黑马程序员的免费课程&#xff0c;感觉受益匪浅&#xff0c;…

【Oracle】玩转Oracle数据库(七):RMAN恢复管理器

前言 嘿&#xff0c;数据库大魔法师们&#xff01;准备好迎接新的技术大招了吗&#xff1f;今天我们要探索的是Oracle数据库中的神奇利器——RMAN恢复管理器&#xff01;&#x1f6e1;️&#x1f4be; 在这篇博文【Oracle】玩转Oracle数据库&#xff08;七&#xff09;&#xf…

【4.3计算机网络】网络规划与设计

目录 1.网络规划2.逻辑网络设计3.物理网络设计 1.网络规划 需求分析->通信规范分析->逻辑网络设计->物理网络设计->实施阶段 2.逻辑网络设计 3.物理网络设计 例题1&#xff1a; 解析&#xff1a;选A。 例题2&#xff1a; 解析&#xff1a;选A。 例题3. 解析&am…

自动化威胁检测和响应

网络安全变得比以往任何时候都更加复杂和疯狂。网络威胁在不断演变&#xff0c;资金充足且持续存在的不良行为者变得更加复杂且更难以检测。预算和资产捉襟见肘&#xff0c;现代网络安全团队的任务是通过持续监控威胁、实施强有力的安全措施、教育组织最佳安全实践以及迅速修复…

关于uniapp小程序的分包问题

开发uniapp小程序时&#xff0c;在打包上传代码时会出现超出2M的打包限制不能上传&#xff0c;那么我们该怎么做呢&#xff1f; 1.对于图片&#xff0c;将图片从后端服务取&#xff0c;尽量不要放在静态资源&#xff0c;图片体积会影响打包大小。 2.使用分包&#xff0c;tabb…

全国产飞腾E2000Q +复旦微FPGA的轨道交通、电力解决方案

产品概述 ITX-XMF201是一款高性能边缘计算网关主板&#xff0c;采用飞腾E2000Q 4核处理器&#xff0c;国产化率达到95%国产化。 板载2电口&#xff0c;2路CAN&#xff0c;6路RS232接口&#xff0c;1路RS485接口&#xff0c;16路GPIO&#xff0c;可以满足银行、轨道交通、电力等…

VR元宇宙的概念|VR体验店加盟|虚拟现实设备销售

VR元宇宙是一个结合了虚拟现实&#xff08;Virtual Reality&#xff09;和增强现实&#xff08;Augmented Reality&#xff09;等技术的概念&#xff0c;代表着一个虚拟的多维度世界。它是一个由数字化的空间构成的虚拟环境&#xff0c;可以通过虚拟现实设备进行交互和探索。 元…

JavaScript 解决切换图片问题

代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style…