J'ai des scripts automatisés qui s'exécutent tous les soirs (environ 50 scripts ou testcases). Je souhaite enregistrer une vidéo de chaque scénario de test (Selenium Java API + Concombre). Existe-t-il un outil ou un moyen que je peux utiliser pour contrôler l'enregistrement vidéo pour chaque scénario de test séparément? Je veux pendant une configuration de scénario de test commence l'enregistrement et pendant le démontage arrête l'enregistrement et enregistre la vidéo localement avec un nom et une date spécifiés. Je devrais donc avoir 50 vidéos pour chaque testcase (de préférence, ne sauvegarder que les vidéos des scénarios de test ayant échoué)
Existe-t-il un moyen d'intégrer cette fonctionnalité dans le code que j'utilise pour mes configurations et démontages?
Je trouve une solution ici mais si vous trouvez mieux, vous pouvez poster une autre réponse:
org.monte.screenrecorder.ScreenRecorder screenRecorder = new ScreenRecorder...
Code principal complet:
import static org.monte.media.FormatKeys.EncodingKey;
import static org.monte.media.FormatKeys.FrameRateKey;
import static org.monte.media.FormatKeys.KeyFrameIntervalKey;
import static org.monte.media.FormatKeys.MIME_AVI;
import static org.monte.media.FormatKeys.MediaTypeKey;
import static org.monte.media.FormatKeys.MimeTypeKey;
import static org.monte.media.VideoFormatKeys.CompressorNameKey;
import static org.monte.media.VideoFormatKeys.DepthKey;
import static org.monte.media.VideoFormatKeys.ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE;
import static org.monte.media.VideoFormatKeys.QualityKey;
import Java.awt.Dimension;
import Java.awt.GraphicsConfiguration;
import Java.awt.GraphicsEnvironment;
import Java.awt.Rectangle;
import Java.awt.Toolkit;
import Java.io.File;
import org.monte.media.Format;
import org.monte.media.FormatKeys.MediaType;
import org.monte.media.math.Rational;
import org.monte.screenrecorder.ScreenRecorder;
import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.WebElement;
import org.openqa.Selenium.chrome.ChromeDriver;
import org.openqa.Selenium.remote.DesiredCapabilities;
public class VideoReord {
public static final String USER_DIR = "user.dir";
public static final String DOWNLOADED_FILES_FOLDER = "downloadFiles";
private ScreenRecorder screenRecorder;
public static void main(String[] args) throws Exception {
VideoReord videoReord = new VideoReord();
videoReord.startRecording();
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
WebDriver driver = new ChromeDriver(capabilities);
driver.get("http://www.google.com");
WebElement element = driver.findElement(By.name("q"));
element.sendKeys("BreizhCamp 2018");
element.submit();
System.out.println("Page title is: " + driver.getTitle());
driver.quit();
videoReord.stopRecording();
}
public void startRecording() throws Exception {
File file = new File(System.getProperty(USER_DIR) + File.separator + DOWNLOADED_FILES_FOLDER);
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();
this.screenRecorder = new SpecializedScreenRecorder(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, "MyVideo");
this.screenRecorder.start();
}
public void stopRecording() throws Exception {
this.screenRecorder.stop();
}
}
La classe SpecializedScreenRecorder étend la classe ScreenRecorder:
import Java.awt.AWTException;
import Java.awt.GraphicsConfiguration;
import Java.awt.Rectangle;
import Java.io.File;
import Java.io.IOException;
import Java.text.SimpleDateFormat;
import Java.util.Date;
import org.monte.media.Format;
import org.monte.media.Registry;
import org.monte.screenrecorder.ScreenRecorder;
public class SpecializedScreenRecorder extends ScreenRecorder {
private String name;
public SpecializedScreenRecorder(GraphicsConfiguration cfg, Rectangle captureArea, Format fileFormat, Format screenFormat, Format mouseFormat, Format audioFormat, File movieFolder, String name)
throws IOException, AWTException {
super(cfg, captureArea, fileFormat, screenFormat, mouseFormat, audioFormat, movieFolder);
this.name = name;
}
@Override
protected File createMovieFile(Format fileFormat) throws IOException {
if (!movieFolder.exists()) {
movieFolder.mkdirs();
} else if (!movieFolder.isDirectory()) {
throw new IOException("\"" + movieFolder + "\" is not a directory.");
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss");
return new File(movieFolder, name + "-" + dateFormat.format(new Date()) + "." + Registry.getInstance().getExtension(fileFormat));
}
}
Importation Maven:
<dependency>
<groupId>org.seleniumhq.Selenium</groupId>
<artifactId>Selenium-server</artifactId>
<version>3.5.3</version>
<exclusions>
<exclusion>
<groupId>com.codeborne</groupId>
<artifactId>phantomjsdriver</artifactId>
</exclusion>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- screen-recorder-->
<dependency>
<groupId>org.monte</groupId>
<artifactId>screen-recorder</artifactId>
<version>0.7.7</version>
</dependency>
<!-- guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
ATTENTION: Si vous l'utilisez sur unix sans interface graphique, vous avez cette erreur:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
Je regarde le plugin Xvfb
pour Jenkins et Travis-ci et je réédite ce post.
EDIT 1:
Si vous l'utilisez sur unix sans interface graphique, vous pouvez utiliser le plugin Jenkins + Xvfb
.
Vous pouvez jeter un oeil à cette bibliothèque par Sergey Pirogov.
Vous pouvez essayer d'utiliser Selenium-Grid-Extras ou Zalenium .
Les deux sont construits sur le dessus du pilote Web et effectuent l'enregistrement automatiquement.