java - 从java停止adb screenrecord

标签 java android selenium selendroid

我正在使用 Selendroid 来测试我的应用程序。 在每次测试开始时,我使用以下函数运行 adb shell screenrecord:

public static Process startScreenRecord(String fileName) throws IOException{
    ProcessBuilder builder = new ProcessBuilder(
            "cmd.exe", "/c", "cd C:\\Users\\user\\Downloads\\adt-bundle-windows-x86_64-20140702\\adt-bundle-windows-x86_64-20140702\\sdk\\platform-tools\\ && adb shell screenrecord /sdcard/" + fileName);
    builder.redirectErrorStream(true);
    Process p = builder.start();
    return p;
}

录制开始,一切正常。在每次测试结束时,我尝试通过以下代码停止记录:

public static void stopScreenRecord(Process p) throws IOException{
    p.destroy();
}

在测试中我使用了以下结构:

    Process p = CmdHelper.startScreenRecord("e1.mp4");
    //TestCode
    CmdHelper.stopScreenRecord(p);

问题是视频录制不会停止。 如何在每次测试结束时停止通话录音?

最佳答案

adb shell screenrecord --help 文档说终止它的两种方法是设置时间限制或发送 ctrl-C。

假设时间限制选项对您不起作用,那么问题就是如何发送 ctrl-C 或其等效功能。如果您将输出流连接到 ADB 的标准输入并保持打开状态,则您可以向下发送一个 ctrl-c(或者您最终可能会中断 ADB 而不是远程)。

另一个似乎有效的选项是使用 kill 命令发送 SIGINT(这是 ctrl-C 通常所做的)而不是 kill 通常发送的 SIGTERM 信号。这应该会让屏幕记录过程认为您按下了 ctrl-c。

如果您找到了进程 ID,则以下似乎有效并留下了一个视频文件:

adb shell kill -2 [pid number]

其中 2 是 Linux 和 Android 上 SIGINT 的通常数量。

关于java - 从java停止adb screenrecord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25185746/

相关文章:

Java Servlet 字符串到 JQuery Ajax 输出乱码

java - 如何在大型软件系统中进行调试?

java - 如何使用 Maven 在 WAR、WEB-INF/lib 目录中包含特定的 jar

android - 在 native 应用程序容器(Android、IOS)中为混合应用程序加载外部内容

java - 切换到新窗口并再次进入 java 中的同一窗口(selenium webdriver)

python - 如何检查网页元素是否可见

selenium - 在xpath中定位self或perent节点的同级元素

java - 如何在不遇到 NoSuchTableException 的情况下使用带有普通 JDBC 和 HSQLDB 的 DBUnit 进行测试?

android - 如何在 SQLite 数据库中执行容错名称搜索

java - 如何使用共享首选项在回收器 View 中保存复选框选择?