Skip to main content


About this blog

This blog is mostly dedicated to automated testing. It also covers a wide range of topics related to load testing, Web development, Android development and Linux administration. You can support this blog by disabling AdBlock in your browser.
Recent posts

Hiding a blinking caret (cursor) on the page with Webdriver and Javascript

When you use Applitools for testing, it is important to keep all pages in the same state as they used to be when the baseline Applitools screenshot was taken. In Applitools visual difference means a bug. This is why a blinking caret (cursor) can become a problem when the baseline screenshot was taken with a caret either visible or invisible, as long as the actual screenshot was captured with a different state of the caret. We can avoid this issue if we hide the caret by making it transparent before taking a screenshot in Applitools. This is how we can do it in Selenium Webdriver (Javascript bindings) (assuming that you initialized the driver object with Webdriver).

Basic setup and configuration of TestObject in Node JS for testing of a web application

If you are already using SauceLabs for automated web UI testing on mobile devices, then you could be interested in trying TestObject cloud service that was acquired and became a part of SauceLabs family in 2017. It allows you to run your existing tests on real devices (Android and iPhone). SauceLabs provides emulators, which work quite well, but, depending on the requirements of your project, you may need to execute tests on real hardware. Another reason for switching to TestObject could be using the latest version of Android OS which may not be available at SauceLabs. At the moment of posting this article the latest supported version was Android 7.1 on SauceLabs and Android 8.1 on TestObject. Luckily the transition to TestObject is quite seamless. You don't need to modify your existing automated tests, only the provider endpoint and a few capabilities. The disanvantage of using a free Testobject account is that you are limited to only a few devices which are marked as Free in the…

Annotating Sauce Labs tests in Node JS

SauceLabs does not annotate jobs by default, showing the question marks instead of statuses, and the name of a job is always set to "Unnamed job". Luckily we have all the powers of Sauce Labs REST API in our hands and can both set the name of a job and its final status to something more meaningful. This example demonstrates how it can be done in Node JS. Every Sauce Labs job has a unique ID. We get this ID from the Webdriver object. saucelabs.jsmain.js

Reading a Gitlab pipeline variable in NodeJS synchronously

I'm assuming you already created your project on Gitlab and got your personal access token. This is a simple synchronous function that reads a Gitlab pipeline variable in NodeJS using Gitlab REST API v3. It uses sync-request that is not recommended to use in a production environment, although it can be successfully used in automated testing and various scripts.

S3 Bucket Browser that doesn't suck
This S3 browser displays the list of files and virtual folders in your Amazon S3 bucket

This is a fork of Nolan Lawson's S3 browser ( with multiple fixes and enhancements. Also I completely redesigned the implementation of virtual folders.

How to use it?

Just put the index.html file in the root of your bucket and give it all necessary permissions.

Use the full path to open the S3 browser (including index.html part):

Increasing sound volume for recorded files on Linux

One-liner for increasing sound volume for recorded files on Linux (make sure ffmpeg is installed):

for file in *.3gp; do ffmpeg -i "$file" -af "volume=15.0" ./conv/"${file%.3gp}".mp3; done

The line above will increase sound 15X for all files with .3gp extension in the current directory and saves the resulting .mp3 files into ./conv subdirectory (make sure it exists).