从java停止adb screenrecord

时间:2014-08-07 14:57:41

标签: 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);

问题是视频录制没有停止。 如何在每次测试结束时停止通话记录?

1 个答案:

答案 0 :(得分:2)

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

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

一个不同的选项似乎工作是使用kill命令发送SIGINT(这是ctrl-C通常做的),而不是杀死正常发送的SIGTERM信号。那应该让screenrecord进程认为你点击了ctrl-c。

如果您找到了进程id,则以下似乎可以正常工作并留下视频文件:

adb shell kill -2 [pid number]

其中2是Linux上通常的SIGINT数,因此也是Android。