热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:appium——微信小程序自动化

篇首语:本文由编程笔记#小编为大家整理,主要介绍了appium——微信小程序自动化相关的知识,希望对你有一定的参考价值。由于腾讯系QQ、微信是基于腾

篇首语:本文由编程笔记#小编为大家整理,主要介绍了appium——微信小程序自动化相关的知识,希望对你有一定的参考价值。



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


step1:手机打开开发者模式连接上电脑,打开微信小程序webview调试开关

在微信聊天窗口发送如下URL:

http://debugmm.qq.com/?forcex5=true

http://debugx5.qq.com


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


step3:确认微信小程序对应的进程名 -- com.tencent.mm:appbrand0

微信有很多的进程,我们要确定当前小程序是位于哪个进程中:

adb shell dumpsys activity top | findstr ACTIVITY 查询前台运行的所有进程

找到AppBrandUI后面的pid

adb shell ps + pid得到进程名

 

 

 

注意

1、不清除微信数据

2、微信小程序自动化chromeDriver 一定得要用V2.40版本,版本匹配跟正常chrome~ChromeDriver不一样,比较特殊,在appium的chromdriver目录下替换2.40的chromedriver.exe文件

替换文件夹路径参考:https://www.cnblogs.com/erchun/p/13335305.html

3、微信小程序可能会打开很多窗口,有些窗口是没有用的,所以要切换句柄


public class SmallProgramTeest {
//driver定义成全局变量
public androidDriver driver;
@BeforeTest
public void setUp() throws MalformedURLException {
//创建一个配置对象,保存这四个配置
DesiredCapabilities capabilities = new DesiredCapabilities();
//1、指定platformName--平台名
capabilities.setCapability("platformName","Android");
//2、指定deviceName-设备名
capabilities.setCapability("deviceName","08e7c5997d2a");
//3、指定appPackage --测试App标识
capabilities.setCapability("appPackage","com.tencent.mm");
//4、指定appActivity --启动App的
capabilities.setCapability("appActivity","com.tencent.mm.ui.LauncherUI");
//!!!不清除掉微信的数据
capabilities.setCapability("noReset",true);
//让配置生效--要和Appium Server建立通讯连接,把这些配置传递给Appium服务 --驱动
//两个参数:第一个参数:Appium通讯地址(包括IP地址+端口号) 第二个参数:配置对象
// 支持X5内核应用自动化配置
capabilities.setCapability("recreateChromeDriverSessions", true);
// ChromeOptions使用来定制启动选项,因为在appium中切换context识别webview的时候,
// 由于小程序是在一个单独的进程中,所以需要加上androidProcess: com.tencent.mm:appbrand0
ChromeOptions optiOns= new ChromeOptions();
// 第二个参数要改成你查询到的小程序进程名--只需要改androidProcess对应的值-查询到的微信小程序的进程名
options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
// 初始化会默认将chrome浏览器打开,需要将Browser置为空
capabilities.setBrowserName("");
URL url
= new URL("http://127.0.0.1:4723/wd/hub");
//初始化动作,打开测试App
driver = new AndroidDriver(url,capabilities);
//隐式等待
driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
}
@Test
public void testSmallProgram() throws InterruptedException {
//1、等待一会儿,等待微信主页加载完毕
Thread.sleep(20000);
//2、向下滑动
swipeDown();
//3、点击选择小程序
driver.findElementByAndroidUIAutomator("new UiSelector().text(\\"微信app里定位到的小程序名\\")").click();
//4、等待小程序加载完毕
Thread.sleep(10000);
//切换context -- 》 context名字:WEBVIEW_com.tencent.mm:appbrand0
driver.context("WEBVIEW_com.tencent.mm:appbrand0");
//获取到微信小程序打开所有窗口的句柄(小程序可能会打开很多窗口,有些窗口是没有用的)
Set handlers = driver.getWindowHandles();
//遍历所有的句柄,找到正确的窗口
for (String handle : handlers){
//如果当前窗口的名字=想要的小程序窗口名
if(driver.getTitle().equals("想要的小程序窗口名")){
//找到了对应的窗口,退出循环
break;
}
else {
//找到的窗口不符合,切换句柄,直到找到正确的为止
driver.switchTo().window(handle);
}
}
//在正确的窗口里面去定位元素
driver.findElement(By.xpath("//a[contains(text(),\'课程\')]")).click();
//chromeDriver 一定得要用V2.40版本
//版本匹配跟正常chrome~ChromeDriver不一样,比较特殊
}
public void swipeDown(){
//由屏幕的宽和高来决定滑动的起始点和终止点
int width = driver.manage().window().getSize().getWidth();
int height = driver.manage().window().getSize().getHeight();
//向下滑动
TouchAction touchAction = new TouchAction(driver);
//press:按压某一个坐标 moveTo:滑动到某一个点 release:手指的释放
//滑动的起始点坐标
PointOption pointOption1 = PointOption.point(width/2,height/5);
//滑动的终止点坐标
PointOption pointOption2 = PointOption.point(width/2,height*4/5);
//waitAction方法需要传入waitOption类型的参数
Duration duration = Duration.ofMillis(300);
WaitOptions waitOptions
= WaitOptions.waitOptions(duration);
touchAction.press(pointOption1).waitAction(waitOptions).moveTo(pointOption2).release().perform();
}
}

 



推荐阅读
  • 微信小程序官方组件展示之表单组件input源码
    以下将展示微信小程序之表单组件input源码官方组件能力,组件样式仅供参考,开发者可根据自身需求定义组件样式,具体属性参数详见小程序开发文档。功能描述:输入框。该组件是原生组件, ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 前言作为一个移动端初学者、爱好者,能使用前端技术开发原生游戏一直是一件渴望而不可及的事情,暂且不说游戏逻辑的复杂度,算法的健壮性ÿ ... [详细]
  • 安卓端开源移动浏览器开源项目
    进入android开发以来,webview用的比较多,后来又看了一些基于webview的浏览器代码,慢慢的将积累的东西做成了一个安卓移动浏 ... [详细]
  • 资源:吊炸天!74款APP完整源码!android界面中点击输入框时弹出输入法如果输入框在底部会出现输入法遮挡输入内容的问题解决办法设置activity的windowsoftinpu ... [详细]
  • 01mui框架使用概述
    1MUI概述1.1MUI诞生背景?性能和体验的差距,一直是手机APP开发者放弃HTML5的首要原因。浏览器默认控件样式又少又丑,制作一 ... [详细]
  • 唱唱反调:风口上的技术不要盲目追
      对于前端领域的开发者来说,“学不动了”虽然更多是一种调侃,但也真实地反映出了他们面对频繁出新的前端技术时又爱又恨的心情。在经历了移动互联网的大爆发后,前端领域的边界不 ... [详细]
  • Android Studio中的IBM MobileFirst Compile问题 - IBM MobileFirst Compile in Android Studio Issue
    IbuiltaMultipageapplicationbyusingIBMMobileFirst,accordingto据我所知,我使用IBMMobileFirst构建了一个 ... [详细]
  • 来自微信官方:微信支付跨平台软件架构首次曝光
    大纲背景线上效果指标什么是软件架构为什么需要软件架构从零到一构建支付跨平台软件架构1.抽象业务流程2.加入路由机制3.管理网络请求4.规范数据传递总结背景作为一个重要业务ÿ ... [详细]
  • 解决针织难题:R语言编程技巧与常见错误分析 ... [详细]
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
author-avatar
mobiledu2502858053
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有