硒 + Java + 屏幕录像机 - 无法录制屏幕



我已经创建了下一个类,用于在Selenium Webriver自动化中录制视频。

首先,为此,我使用 Monte Media jar(POM 中的依赖关系(:

<dependency>
<groupId>com.github.stephenc.monte</groupId>
<artifactId>monte-screen-recorder</artifactId>
<version>0.7.7.0</version>
</dependency>

我创建的类是下一个:

public class Video {
private static final Logger logger = LogManager.getLogger(Video.class);
private Properties prop = null;
private String path = "";
private String prefix = "";
private String extension = "";
private String time = "";
private static ScreenRecorder screenRecorder;

public void setUp() throws Exception {
//Crea una instancia de GraphicsConfiguration para obener la configuración gráfica.
//de la pantalla.
GraphicsConfiguration gc = GraphicsEnvironment//
.getLocalGraphicsEnvironment()//
.getDefaultScreenDevice()//
.getDefaultConfiguration();
//Crea la instancia del grabador de video con la configuración necesaria.
ScreenRecorder screenRecorder = new ScreenRecorder(gc,
new Format(MediaTypeKey, FormatKeys.MediaType.FILE, MimeTypeKey, MIME_AVI),
new Format(MediaTypeKey, FormatKeys.MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
DepthKey, (int) 24, FrameRateKey, Rational.valueOf(15),
QualityKey, 1.0f,
KeyFrameIntervalKey, (int) (15 * 60)),
new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, "black",
FrameRateKey, Rational.valueOf(30)),
null);
}
public static void iniciaGrabacion(InternetExplorerDriver driver)throws Exception{
//Método para comenzar de la grabación.
screenRecorder.start();
}
public static void finalizaGrabacion(InternetExplorerDriver driver)throws Exception{
//Método para finalizar de la grabación.
screenRecorder.stop();
}

private void prepareVariables() {
try {
prop = AppConfigUtil.getInstance().getProperties();
} catch (AppConfigException e) {
logger.error(e);
}
path = (String) prop.get("video.path");
prefix = (String) prop.get("video.prefix");
extension = (String) prop.get("video.extension");
LocalDateTime localDateTime = LocalDateTime.now();
time = "" + localDateTime.getYear() + localDateTime.getMonthValue() + localDateTime.getDayOfMonth() + localDateTime.getHour() + localDateTime.getMinute() + localDateTime.getSecond() + localDateTime.getNano();
}

我想做的是调用静态 void 方法来开始记录 (iniciaGrabacion( 并停止从任何其他类重新编码 (finalizaGrabacion(,而不是在我发布的同一类中。

public static void iniciaGrabacion(InternetExplorerDriver driver)throws Exception{
//Método para comenzar de la grabación.
screenRecorder.start();
}
public static void finalizaGrabacion(InternetExplorerDriver driver)throws Exception{
//Método para finalizar de la grabación.
screenRecorder.stop();

我运行任何其他类,使用以下行调用这些方法:

Video.iniciaGrabacion((InternetExplorerDriver)driver);

对于关闭:

Video.finalizaGrabacion((InternetExplorerDriver)driver);

但我面临下一个问题:

java.lang.NullPointerException
at cl.chilito.util.report.Video.iniciaGrabacion(Video.java:63)
at cl.chile.automatizacion.casos.prestamos.PrestamoNuevoK.PrestamoNuevoK(PrestamoNuevoK.java:97)
at cl.chile.automatizacion.casos.prestamos.PrestamoNuevoK.testPrestamoNuevoK(PrestamoNuevoK.java:78)

有人可以帮助我吗?

public static void startRecording() throws Exception
{
File file = new File("C:\videos");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int width = screenSize.width;
int height = screenSize.height;
Rectangle captureSize = new Rectangle(0,0, width, height);

GraphicsConfiguration gc = GraphicsEnvironment
.getLocalGraphicsEnvironment()
.getDefaultScreenDevice()
.getDefaultConfiguration();

screenRecorder = new VideoRecorder(gc, captureSize,
new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI),
new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
DepthKey, 24, FrameRateKey, Rational.valueOf(15),
QualityKey, 1.0f,
KeyFrameIntervalKey, 15 * 60),
new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, "black",
FrameRateKey, Rational.valueOf(30)),
null, file, "Video"); //Video puede ser cambiado al nombre que deseen
screenRecorder.start();
}

和停止方法:

public static void stopRecording() throws Exception
{
screenRecorder.stop();
}

从外部类调用:

Classname.startRecording((; Classname.stopRecording((;

工作正常。

相关内容

  • 没有找到相关文章

最新更新