airtest web 录制滑块_Airtest录屏总结,这不是一个简单的recording!

本文详细介绍了Airtest在安卓设备上的录屏功能,包括命令行使用`--recording`参数和在脚本中调用`Recorder`类的方法进行录屏。还提到了录屏可能遇到的问题,如部分模拟器不支持、密码界面可能导致黑屏等。
摘要由CSDN通过智能技术生成

前言

经常有同学过来问如何在脚本运行的过程中进行录屏操作,其实airtest有给我们提供录屏功能,但是教程中讲的极少。

所以今天给大家总结了录屏的相关知识,希望能帮助大家解决对录屏这块内容的疑问。

在命令行使用-- recording录屏

录屏功能仅适用于安卓平台,所以当测试设备是安卓真机或者部分安卓模拟器时,我们才能够对脚本的运行过程进行录屏操作。

在命令行使用airtest run运行脚本时,我们可以通过添加--recording参数来录制脚本运行的视频。(运行结束后,录屏文件会默认保存在log文件夹里面,使用recording_手机序列号来命名录屏文件)

airtest run "D:\test\Airtest_example.air" --device android://127.0.0.1:5037/emulator-5554?cap_method=MINICAP_STREAM^&^&ori_method=MINICAPORI^&^&touch_method=MINITOUCH --log "D:/test\41f68fdf265d8c13998d0a1a7b992889" --recording

http%3A%2F%2Fnote.youdao.com%2Fyws%2Fpublic%2Fresource%2F3304e6dc5125f0b2a20423dea86ea776%2Fxmlnote%2FDA035A5D51544BFA8B5B025A404B1E44%2F34226

并且airtest1.1.6支持在--recording参数后面加上一个文件名来命名录屏文件,例如--recording test.mp4,如果有不止一台手机在运行,会把文件命名为手机名_test.mp4。下述示例使用--recording 123.mp4指定录屏文件名为123.mp4:

airtest run "D:\test\untitled.air" --device android://127.0.0.1:5037/emulator-5554 --log "D:/test\6fe87b11ca1fc75ebe670439f20fabfc" --recording 123.mp4

http%3A%2F%2Fnote.youdao.com%2Fyws%2Fpublic%2Fresource%2F3304e6dc5125f0b2a20423dea86ea776%2Fxmlnote%2F75E9CA7703EB46D8AA59DEA0FE7D24A0%2F33963

另外我们需要注意下,传入的录屏文件名必须以.mp4作为结尾!

在脚本中调用录屏方法

除了在命令行使用--recording参数来录制脚本运行的视频之外,我们还可以直接在脚本中调用开始录屏和结束录屏的方法来帮助我们录制脚本运行过程的视频。

脚本示例如下:

#-*- encoding=utf8 -*-

__author__ = "AirtestProject"

from airtest.core.api import *

from airtest.core.android.recorder import *

from airtest.core.android.adb import *auto_setup(__file__,devices=["android://127.0.0.1:5037/emulator-5554"])

adb= ADB(serialno="emulator-5554")

recorder=Recorder(adb)#开启录屏

recorder.start_recording(max_time=10)

touch(Template(r"tpl1603091574169.png", record_pos=(0.113, -0.302), resolution=(900, 1600)))

sleep(3.0)#结束录屏

recorder.stop_recording(output="test.mp4")

需要注意的是,录屏的这两个方法属于Recorder(adb)类,所以我们在使用这2个方法之前,要先实例化这个类,之后再用这个实例去调用类里面的关于录屏操作的方法。

在这两个方法中,有2个参数我们可以特别关注下:

一个是start_recording()的max_time参数,可以用来设置最长的录屏时间,默认值是1800,即半个小时,可以根据自己的实际需求修改这个录屏时长。如果脚本的运行时长小于这个max_time的值,则录屏时长以脚本实际运行时长为准。但如果脚本运行时长大于max_time的值,那录屏时长以max_time的时长为准。

第二个是stop_recording()的output参数,可以用来设置录屏文件的文件名,默认为screen.mp4,默认的保存路径和项目目录一致。

http%3A%2F%2Fnote.youdao.com%2Fyws%2Fpublic%2Fresource%2F3304e6dc5125f0b2a20423dea86ea776%2Fxmlnote%2F150533E3011E4EA9B09F8FD7E7E63665%2F34160

不一样的录屏方式

airtest1.1.3版本和1.1.4版本(IDE1.2.3-1.2.5)使用Yosemite.apk来进行录屏操作,但比较特别的是,初次使用录屏功能时需要同学们手工打开Yosemite.apk去点一次同意权限,很多同学都不知道还有这一个步骤,所以录屏操作经常因为没有给到权限,而出现录屏失败的情况。

http%3A%2F%2Fnote.youdao.com%2Fyws%2Fpublic%2Fresource%2F3304e6dc5125f0b2a20423dea86ea776%2Fxmlnote%2F559D31CFF7064DD49F3277765E0D84AE%2F34025

而最新版本的airtest,即1.1.6版本(IDE1.2.6),则把录屏功能的代码 回退到了之前不用Yosemite.apk录屏的版本 。回退到旧版本之后,同学们便不用手动再去Yosemite应用里面点一次同意权限(注意是1.1.6版本的airtest),直接使用相关的参数和方法即可。

常见的录屏异常

部分模拟器不支持录屏

安卓模拟器的录屏机制和安卓真机的录屏机制存在一些差异,因此,我们并不能保证在所有的模拟器上面都能够进行录屏操作,比如雷电模拟器可以进行正常的录屏操作,但在夜神模拟器上录屏时就容易报错。

http%3A%2F%2Fnote.youdao.com%2Fyws%2Fpublic%2Fresource%2F3304e6dc5125f0b2a20423dea86ea776%2Fxmlnote%2F5BA32B3F8916495A9CFDF06B49D3A6F0%2F34099

密码界面录屏黑屏

在测试部分品牌手机的过程中,有同学会发现一到输入密码的界面时,设备画面就全黑了,导致录出来一部分黑屏的内容。这是因为在密码输入的界面,一般都做有一些防止恶意截屏录屏的措施。如果同学们不想出现黑屏画面的话,我们可以尝试在安全设置中,把安全键盘之类的设置关掉,或者是关掉其它一些防止恶意截屏录屏的设置。

如对录屏还存在疑问的同学,可以在评论中留下你的问题~

AirtestProject官方答疑Q群:1017250147

Airtest官网:http://airtest.netease.com/

Airtest教程官网:https://airtest.doc.io.netease.com/

搭建企业私有云服务:https://airlab.163.com/b2b

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用Canvas和录制器(MediaRecorder)编写一个简单录屏脚本的示例代码: ```javascript // 创建一个Canvas元素 const canvas = document.createElement('canvas'); document.body.appendChild(canvas); const ctx = canvas.getContext('2d'); // 设置Canvas的尺寸 canvas.width = window.innerWidth; canvas.height = window.innerHeight; // 创建一个视频元素 const video = document.createElement('video'); document.body.appendChild(video); video.style.display = 'none'; // 获取用户媒体设备并开始录制 navigator.mediaDevices.getUserMedia({ video: true, // 请求视频流 audio: false // 不请求音频流 }).then((stream) => { // 将视频流绑定到video元素上 video.srcObject = stream; video.play(); // 创建一个MediaRecorder对象来录制视频流 const mediaRecorder = new MediaRecorder(stream); const chunks = []; // 存储录制的视频数据 // 当有新的视频数据可用时,将其存储到chunks数组中 mediaRecorder.addEventListener('dataavailable', (event) => { if (event.data.size > 0) { chunks.push(event.data); } }); // 当录制停止时,创建一个包含所有视频数据的Blob对象 mediaRecorder.addEventListener('stop', () => { const videoBlob = new Blob(chunks, { type: 'video/webm' }); // 创建一个URL对象,用于下载或播放录制的视频 const videoUrl = URL.createObjectURL(videoBlob); // 创建一个链接元素来下载录制的视频 const downloadLink = document.createElement('a'); downloadLink.href = videoUrl; downloadLink.download = 'screen_recording.webm'; document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); // 清空chunks数组 chunks.length = 0; }); // 开始录制 mediaRecorder.start(); // 每隔一段时间,将Canvas上的内容绘制到视频流中 setInterval(() => { ctx.drawImage(video, 0, 0, canvas.width, canvas.height); }, 1000 / 30); // 每秒30帧 }).catch((error) => { console.error('Error accessing media devices:', error); }); ``` 这段代码会在页面上创建一个Canvas元素和一个隐藏的视频元素。它会请求用户的视频流,并将视频流绑定到视频元素上。然后,它会创建一个MediaRecorder对象来录制视频流,并将每一帧的内容绘制到Canvas上。最后,当录制停止时,它会将录制的视频数据保存为一个Blob对象,并提供下载链接供用户下载录制的视频。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值