文章目录

  • 前言
  • 一、解决的问题
  • 二、使用步骤
    • 1.opendx源码下载
    • 2.修改agent内容

前言

opendx是一款基于 appium 的自动化测试平台。支持web端控制手机,整个架构设计非常优秀,可以根据公司业务,进行二次开发使用。

一、解决的问题

由于华为手机高版本无法使用appium自带的录制功能。所以opendx添加了scrcpy录制功能,缺点是需要在agent端安装scrcpy,且windows无法支持录制。由于公司大多数同学使用windows,导致启动的agent在高版本华为手机上无法录制视频,在用例结束后难以排查问题。

二、使用步骤

1.opendx源码下载

下载地址

2.修改agent内容

ScrcpyVideoRecorder类代码如下(示例):

package com.daxiang.core.mobile.android.scrcpy;import com.daxiang.core.Device;
import com.daxiang.core.mobile.android.AndroidDevice;
import com.daxiang.utils.Terminal;
import com.daxiang.utils.UUIDUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;/*** Created by jiangyitao.*/
@Slf4j
public class ScrcpyVideoRecorder {private String mobileId;private String videoName;private boolean isRecording = false;private CountDownLatch countDownLatch;private Device device;private FileChannel fc;private Scrcpy scrcpy;private static final String H264 = ".h264";private static final String MP4 = ".mp4";public ScrcpyVideoRecorder(String mobileId,Device device) {this.mobileId = mobileId;this.device = device;}public synchronized void start() {if (isRecording) {return;}countDownLatch = new CountDownLatch(1);scrcpy = ((AndroidDevice) device).getScrcpy();try {videoName = UUIDUtil.getUUID();fc = new FileOutputStream(videoName+H264).getChannel();scrcpy.start(imgData -> {try {fc.write(imgData);} catch (IOException e) {}});isRecording = true;} catch (Exception e) {isRecording = false;throw new RuntimeException(e);}finally {countDownLatch.countDown();}}/*** 1. kill scrcpy server来停止录制视频是最优方案。但大多数安卓Mobile只能通过ps(非ps -ef)获取到scrcpy server进程,* 此时的进程名为app_process, appium在Mobile里运行的进程也是app_process,所以可能会误杀appium在Mobile里运行的进程,不采用该方法* 2. ExecuteWatchdog.destroyProcess()会导致最后一部分视频无法写入,* 因为运行在pc的scrcpy进程被直接干掉,无法写入最终的视频,导致获取到破损的视频* 3. 在非windows操作系统下,scrcpy收到kill信号后,会写入最后一部分视频,目前采用该方法* 4. 无法在windows上使用,windows taskkill和ExecuteWatchdog.destroyProcess()一样*/public synchronized File stop() throws IOException {if (!isRecording) {throw new IllegalStateException("video is not in recording");}log.info("[{}]stop record video: {}", mobileId, videoName);scrcpy.stop();if (fc != null){fc.close();}String killScrcpyCmd = String.format("ffmpeg -f h264 -i %s.h264 -y -vcodec copy %s.mp4", videoName,videoName);Terminal.execute(killScrcpyCmd);try {// 等待视频写入完成,最多等3mincountDownLatch.await(3, TimeUnit.MINUTES);} catch (InterruptedException e) {throw new RuntimeException(e);}FileUtils.deleteQuietly(new File(videoName+H264));log.info("[{}]video: {} recording complete", mobileId, videoName);isRecording = false;return new File(videoName+MP4);}
}

AndroidDevice类代码如下(示例):

    @Overridepublic void startRecordingScreen() {if (canUseAppiumRecordVideo) {try {AndroidStartScreenRecordingOptions androidOptions = new AndroidStartScreenRecordingOptions();// Since Appium 1.8.2 the time limit can be up to 1800 seconds (30 minutes).androidOptions.withTimeLimit(Duration.ofMinutes(30));androidOptions.withBitRate(Integer.parseInt(App.getProperty("androidRecordVideoBitRate")) * 1000000); // default 4000000((AndroidDriver) driver).startRecordingScreen(androidOptions);return;} catch (Exception e) {log.warn("[{}]无法使用appium录制视频", getId(), e);canUseAppiumRecordVideo = false;}}if (scrcpyVideoRecorder == null) {scrcpyVideoRecorder = new ScrcpyVideoRecorder(getId(),this);}try {scrcpyVideoRecorder.start();}catch (Exception e){log.warn("[{}]无法使用scrcpy录制视频", getId(), e);}}

修改以上两个类后,agent端不需要安装scrcpy,windows也支持录制视频

解决opendx在windows下无法使用scrcpy录屏相关推荐

  1. Windows下使用ffmpeg录屏和录音

    一.注册audio_sniffer 可以自行从网上下载audio_sniffer.dll和audio_sniffer-x64.dll 或者安装Screen Capturer Recorder后从软件目 ...

  2. Windows自带的录屏怎么用?Windows自带的录屏能录多久

    跟手机一样,电脑也有自带的录屏功能.那你知道Windows自带的录屏工具有哪些吗?绝大部分Windows电脑有自带的录屏工具--比如步骤记录器:再比如Windows10.windows11系统的电脑有 ...

  3. Android 11.0 下拉状态栏录屏去掉弹窗直接录屏

    目录 1.概述 2.下拉状态栏录屏去掉弹窗直接录屏的核心代码

  4. Winio驱动在64位windows下无法使用的解决方法

    C#在使用WinIo的驱动开发类似按键精灵一类工具的时候,需要对相关的驱动进行注册才能正常启动,找了下资料,资料来自: http://jingyan.baidu.com/article/642c9d3 ...

  5. ubuntu下安装Firefox中国版解决Ubuntu与Windows下Firefox账号同步问题

    最近开始用Ubuntu系统发现一个问题,我在Ubuntu系统自带的或者软件中心下的Firefox版本下创建一个账号,再在Windows的Firefox下登录发现此账号不存在,原因是Firefox有个全 ...

  6. Windows系统自带录屏功能,再也不用下录屏软件了

    使用 Xbox Game Bar 录屏 只需要点击搜索图标(或通过快捷键[Win+S]打开)搜索,运行[Xbox Game Bar],或者直接通过[Win+G]快捷键打开就可以啦~ 捕获图标不可用 可 ...

  7. windows端实用的录屏软件有哪些?裂墙安利这三款, 良心推荐!

    windows录屏软件哪些更好用?像咱们经常在用的Windows系统里,就有很多好用的录屏软件.到底哪些才是真正好用的录屏软件呢今天就给大家总结一二,感兴趣的小伙伴千万别错过! 分享一:Captura ...

  8. ubuntu下安装Firefox中国版解决Ubuntu与Windows下Firefox账号同步问题(已解决)

    1. 下载最新版本火狐Linux版 下载地址:http://firefox.com.cn/download/ 选择火狐Linux64-bit版,下载后文件为:Firefox-latest-x86_64 ...

  9. 14.【Linux】如何在ubuntu18.04下安装Firefox中国版解决Ubuntu与Windows下Firefox账号同步问题(已解决)

    一.下载最新版本火狐Linux版 下载地址:http://firefox.com.cn/download/ 选择火狐Linux64-bit版,下载后文件为:Firefox-latest-x86_64. ...

最新文章

  1. webpack打包后的文件
  2. python文本清洗_【python】TXT文本数据清洗和英文分词、词性标注
  3. 漫步线性代数十八——正交基和格拉姆-施密特正交化(下)
  4. MySQL 聚合函数(一)聚合(组合)函数概述
  5. JavaScript:instanceof 实现原理
  6. Linux环境下实现一个简单socket通信
  7. spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web
  8. 接口测试 python+PyCharm 环境搭建
  9. redis事务冲突问题 - 乐观锁和悲观锁
  10. 数学建模(二)优劣解距离法Topsis模型部分
  11. 倒计时按钮_倒计时牌都不会做,妹子何必嫁这货
  12. Javascript 细节散记
  13. modelica变量初始值的定义
  14. 台式计算机调亮度,台式电脑怎么调节亮度(台式电脑亮度在哪里调节)
  15. 白木彰:具有普遍性的设计力
  16. C/C++文件输入输出(详细介绍)
  17. “你已被移出穷人群”
  18. 【PYTHON】论Python的类中的私有变量、共有变量、全局变量、局部变量
  19. win10系统不识别耳机 + 扬声器产生‘啪’的电流声音两种情况——解决办法
  20. Clickhouse副本的特性

热门文章

  1. 二阶系统级联_多载波专用移动通信系统数字预失真功放线性化技术研究
  2. hive操作总结DDL
  3. Win11添加IP安全策略的方法
  4. 【WRC 大咖观点】张钹《人工智能与机器人》
  5. python文件读写删
  6. 各大互联网公司架构演进之路汇总
  7. 高性能Go语言日志模块dlog使用说明
  8. OSChina 周四乱弹 —— 表妹要嫁人 舅妈叮嘱……
  9. html中js修改字体,rem布局中使用js修改html的fontSize
  10. Steam道具属性值详解