May 18, 2020 Jonny Steiner

Set up Cross Browser Testing with our Selenium Grid Tutorial

Share this knowledge!

An Overview of Selenium

Selenium is an open-source test automation framework that changed the testing landscape. Developed in 2004 by Jason Huggins, Selenium quickly gained popularity as the web UI automation testing interface. The popularity of Selenium can be attributed to its ability to support multiple programming languages to write test scripts such as Python, PHP, Java, Perl, Ruby, and C#. In addition, it supports all major browsers such as Firefox, Chrome, Internet Explorer, and Safari. Platforms like Windows, MAC, Linux, Solaris, and mobile OSes such as Android, iOS, and Windows Mobile are all capable of running Selenium.

Selenium is a testing framework that comprises of multiple tools:

  • Selenium Integrated Development Environment (IDE): A Firefox and Chrome add-on that allows you to record and run actions on a browser
  • Selenium WebDriver: A suite of language-specific bindings to control browser actions from the OS level
  • Selenium Grid: A feature to simultaneously run test scripts on multiple machines running on multiple platforms

The Evolution of Selenium

It was Jason Huggins who felt that there was a need for a testing tool to automate tasks to control browsing actions as the manual testing wasn’t efficient when he was working at ThoughtWorks in 2004. The test procedures took a lot of time too. Huggins created the JavaScriptTestRunner in 2004. After JavaScriptTestRunner was made into an open-source software it was renamed Selenium Core. Selenium Core only automates tests for applications in the same domain that it is launched. To overcome this issue, Paul Hammant developed Selenium Remote Control (RC 1) that acted as a proxy. As a result, RC1 tricked the browser into thinking that the application being tested was installed using the same domain. Selenium RC injects a JavaScript program into the browser and controls browser actions via test scripts executed as Javascript commands.

Considering the complexity in installing and configuring Selenium RC, Simon Stewart developed WebDriver in 2006 that allowed the control of a browser from the OS while supporting cross-platform testing. Consequently, Selenium RC and WebDriver were merged with the introduction of Selenium 2 in 2008.

What is Selenium Grid?

Running test scripts on multiple devices and platforms is time-consuming and cumbersome as well. To minimize test times, Patrick Lightbody created a feature called ‘Hosted QA’, which enabled him to simultaneously run test cases on different devices running on different platforms. It was later renamed Selenium Grid. Using Selenium Grid, QA and developers teams were able to run different test scripts on different browsers running on different platforms, saving significant test times.

The Selenium Grid Architecture

The Selenium Grid architecture consists of two core components

  1. Selenium Grid Hub: It acts as a central system that receives test case requests from clients and distributes them to different nodes based on desired capabilities. You can use only one node in a grid.
  2. Selenium Grid Node: A node machine is connected to the hub which will receive test scripts from the hub and executes them. You can launch several nodes on different devices running different environments.

Guide to install and setup a Grid

Here are the steps to install and set up a Selenium Grid

Step 1: Install Java and Configure Environmental Variables

To use Selenium Grid, you need to install a Selenium server which comes in the form of Jar files. To use the jar files, you need to install Java on your machine and configure environmental variables. If you already have Java installed, you can skip this step.

a) Visit this link to download and install Java:

https://www.oracle.com/java/technologies/javase-downloads.html

b) To set the Java installation path:

  1. Right-click on the Start button and go to settings
  2. Choose ‘Advanced Settings’ and Go to ‘Environmental Variables’
  3. Click New and enter the variable name as JAVA_HOME
  4. Enter the Java JDK path as the Variable value and click ok.

Step 2: Download and Install Selenium Server

Visit this link to download the Selenium server.

https://www.selenium.dev/downloads/

The latest stable version is 3.141.59. You can store the jar files in any location on your machine. For consistency across the hub and node machines, save them in the C drive. So, now you have the Selenium server jar files on the hub and the node machine.

Step 3: Configure the Hub Machine

  • Click Start and open the Command Prompt
  • Navigate to the location where the selenium server jar files are stored (eg: C:\)
  • Type the following command:

java -jar selenium-server-standalone-3.141.59.jar -role hub

java command prompt selenium grid

Here 3.141.59 is the server version. If you are using a different version, change the version number accordingly.

This command will launch the machine as a Selenium Grid hub on the default port 4444. You can change the default by specifying the IP address using the parameter ‘-host’

java command prompt selenium grid

To check if the hub is running, open a browser window and type the following URL:

http://localhost:4444/grid/console

selenium grid console

When you click on ‘View Config’ option, it will display the details:

selenium grid console

Step 4: Configure Selenium Grid Node

  • Open the command prompt on the node machine and navigate to the location where selenium server jar files are stored.
  • Type the following command:

java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.0.4:4444/grid/register -port 5555

The IP address is the IP address of the machine wherein you have installed the hub and port is the hub port (4444 here). To know the IP address of the hub machine, simply type: ipconfig in the command prompt of the hub machine.

When you use multiple nodes, you can use the same command to register each node with the hub.

By default, the grid allows 5 chrome browsers, 5 firefox browsers, and 1 IE browser.

To change these settings, type the following command:

-browser browserName=<browser name>,version=<browser version>,maxInstances=<maximum instances of the browser>,platform=<platform name>

Now the grid hub and the node machines are configured and ready to use. You can use an IDE such as Eclipse and write WebDriver code to execute test scripts on node machines.

Challenges around maintaining a Grid

While Selenium Grid is a powerful tool to perform test automation, cross-platform testing, and mobile testing, in particular, is only possible when you integrate mobile test automation frameworks such as Appium or Selendroid. While Selendroid offers limited options, Appium is a robust framework but comes with a huge learning curve. The test environment setup requires a lot of time and effort. You should develop reusable libraries. When testing hybrid apps with Appium, switching between the web and native views is repeatedly done. Web element identification is not easy too and doesn’t work sometimes. Test object identification is not available too.

When it comes to performance, the selenium grid slows down with the increase in the number of nodes. At the same time, the test that executes on the local machine makes it hard to download or install additional software. Setting up the parallel testing environment is cumbersome too. Reporting and analytics is another key challenge. Selenium doesn’t offer any reporting tool which means you can’t generate comprehensive test reports for a holistic view of the test across the teams. The only option is to integrate and configure a reporting and analytic tool that adds up to the burden of testers. When CI/CD is involved, reporting becomes even more critical as the test suites are broken into smaller segments. Without a comprehensive reporting system, tracking and resolving issues becomes difficult. Adding and removing devices on the go adds up to this challenge.

SeeTest takes Selenium Grid to a new level

SeeTest, a proprietary mobile test automation framework from Experitest, enables developers and QA teams to fully leverage Selenium Grid capabilities while overcoming its limitations. Here are the key advantages of using SeeTest:

Highly Scalable Solution

SeeTest is a highly scalable test automation solution. You can easily scale with hundreds of sessions and the tool delivers 100% performance every time. Unlike other tools, SeeTest performance doesn’t deteriorate even when you add hundreds of node servers. You can add a device on the go or remove a device without any downtime or need to make configurational changes.

Cross-Platform Testing Made Easy

Working with SeeTest and Selenium is simple and easy. You can easily connect to the centralized SeeTest hub that offers a range of Android, iOS and other browser combinations when you integrate your Selenium test environment with the SeeTest Mobile and Browser Lab. Run parallel testing on hundreds of browsers running on different platforms once setup is complete.

Continuous Testing Made Easy

In today’s DevOps era, CI/CD is more of a necessity than an option. SeeTest enables you to easily integrate your CI/CD environment such as Bamboo or Jenkins and continuously run tests anytime. It means you don’t have to worry about the programming language, test framework, or the IDE but simply focus on creating the best product.

Dedicated Support Team

Cross-platform test automation tools such as Appium comes with a significant learning curve with regard to installation, configuration, and operations. Moreover, being open-source, Appium is constantly undergoing changes and upgrades. So, you’ll always have to rely on online communities to identify and solve issues with the tool. However, SeeTest comes with a dedicated support team that helps you with every issue anytime 24/7. It means your time is highly productive.

Realtime testing across the globe

The striking feature of SeeTest Mobile and Browser Lab is that the data centers are located in 8 different regions. It means you not only access a wide range of browsers running on different platforms and located across the globe but you can also check latency issues in real-time.

Reporting and Analytics

Reporting and Analytics is a big advantage of SeeTest. It offers text, video recordings, screenshots, browser console, and network logs, etc. covering every step of the test. SeeTest Dashboard is a centralized analytics dashboard that enables you to get clear insights into key metrics. Furthermore, the automatic root cause analysis feature of this dashboard helps you to easily identify the root cause and quickly take corrective actions.

Simply put, SeeTest does all the mobile test automation tasks while you can focus more on your product.

 

Guy ArieliCTO

 

Share this knowledge!