Hello, in the previous article, I described how to extend Selenium Grid. You can reach the tutorial in this link. Today, I am going to add Video Recording capability into our Selenium Grid. Let’s get started Selenium Grid Video Recording Capability.
Create a Recorder for Selenium Grid Video Recording Capability
I am using monte-repack library to record videos. You can take a look at the source code in our repository. The implementation might differ from your need. That’s why I don’t want to get into its details. Maven dependency that I used is:
<dependency> <groupId>com.pojosontheweb</groupId> <artifactId>monte-repack</artifactId> <version>1.0.1</version> </dependency>
Changing the Proxy Implementation
I want my proxy to start recording in case there are any custom desired capabilities about recording. So I add a String value for recording request. I will check its value and start the recording.
private static String RECORD_VIDEO = "recordVideo";
The code below will get the value of RECORD_VIDEO capability from the TestSession object.
record = (Boolean)session.getRequestedCapabilities().get(RECORD_VIDEO);
Then recording will start.
@Override
public void beforeSession(TestSession session){
record = (Boolean)session.getRequestedCapabilities().get(RECORD_VIDEO);
if (record) {
screenRecorder = new Recorder();
screenRecorder.startScreenRecorder();
System.out.println("Video Recording value is "+record);
}
}After the session ends, we need to stop recording by using the below code.
@Override
public void afterSession(TestSession session){
System.out.println("Selenium Extending Grid - After Session");
if(record)
screenRecorder.stopScreenRecorder(session.getInternalKey());
}
How to Modify Your Desired Capabilities?
Add your desired capabilities in DesiredCapabilities object as below. Then run your test, and see your Grid records video like a charm.
We create the RemoteWebDriver with our newly added Desired capability in Before Annotation. By this way, every time a driver is created a new session will be created as well.
@Before
public void beforeClass(){
DesiredCapabilities caps = DesiredCapabilities.chrome();
caps.setCapability("recordVideo",true);
try {
driver = new RemoteWebDriver(
new URL("http://localhost:4444/wd/hub"),
caps);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
You can implement anything in the test.
@Test
public void test(){
//Test Implementation
}
We should use quit() method of WebDriver in JUnit’s After function. By doing so Selenium terminates the session and video recording is terminated.
@After
public void afterClass(){
driver.quit();
}
Important Note:
Selenium Default Proxy doesn’t know if a new test is started or not. It only knows if there’s a new session or not. You should implement your new functions according to this fact.
[fusion_widget_area name=”avada-custom-sidebar-seleniumwidget” title_size=”” title_color=”” background_color=”” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=””][/fusion_widget_area]
Full Code can be found in https://github.com/canb0/extendedSeleniumGrid
Thanks.
Canberk Akduygu

Canberk Akduygu is a Test Lead working in the Netherlands

Selam, testin başlayıp başlamadığını junit testleri için @Rule annotation ile verilmiş bir nesneye TestWatcher interface’ini uygulayarak alabilirsiniz.
Tesekkurler, TestWatcher ornegi icin su makaleyi linkliyorum. Merak edenler icin ornek olabilir. https:/junit-rules/