Where we learn technology

Month: April 2020 (Page 2 of 2)

Selenium WebDriver -Navigation Commands – Difference between get() and navigate().to() methods.

1. Overview  

In this short article, we’ll be focusing on various Navigation commands that allow the browser to move forwards, backwards in the browser’s history.

2. Difference Between the driver.get(“url”) and driver.navigate().to(“url”);

On the basis of Method Calls:

driver.get() used to launch a particular website url, whereas driver.navigate().to() is also used to launch the particular website by passing the URL but we can use forward and backward button to navigate between the pages during test case writing.

If you want to use back() and forward() method after driver.get() method, but you need to use it with Navigation Methods only.

Both are exactly same, both are synonyms of each other. In fact navigate.to() method is calling get() method internally.

On account of Server API Calls:

driver.get() method internally sends HTTP POST request to Selenium Server Standalone.  

driver.navigate().to method sends HTTP POST request to Selenium Server Standalone.

Both are calling HTTP POST method: /session/:sessionId/url

GET /session/:sessionId/url Retrieve the URL of the current page.
POST /session/:sessionId/url Navigate to a new URL.

3. Method Explanation

All Navigation methods are defined in RemoteNavigation class which is implementing Navigation Interface.


  • navigate.to() method is overloaded method as referred below.
  • It can take String url or URL url as a parameter.
  • get() method takes only String url.


Now, to access the navigation methods, just type driver.navigate(). like below:

Let’s try to understand these methods in detail:

  1. Navigate To Command – driver.navigate().to(“url”)

There are two ways to define this method:

This method Loads a new web page in the current browser window. It accepts a String parameter and returns void.



This method accepts URL class instance by importing package import java.net.URL; and returns void.

2)     Forward Command – driver.navigate().forward();

This method enables the web browser to click on the forward button in the existing browser window, it takes you forward by one page on the browser’s history.  It neither accepts nor returns anything.

3) Back Commanddriver.navigate().back();

This method enables the web browser to click on the back button in the existing browser window. it takes you backwards by one page on the browser’s history. It neither accepts nor returns anything.

4)  Refresh Command- driver.navigate().refresh();

This method refreshes the current page. It neither accepts nor returns anything.




Let’s look at this function in more details with below code snippet:

Upon executing the above code, we will get the output on console similar to:

Now many of us would be wondering why this exception occurs?

Let’s break down our answer to get a deeper understanding:

  • When WebDriver executes the above code then it assigns an internal id  to every WebElement and it refers this id to interact with that element and now we are refreshing our web Brower with driver.navigate().refresh();

  • It refreshes the entire page due to which the section of the DOM also gets refreshed and so is the element. In this scenario the internal id(something like “id =725541f2-6c3b-4a31-acd5-7c14ef0f8f97” as shown in below snapshot ) which WebDriver was using has become stale(old), so now for every operation on this WebElement, we will get StaleElementReferenceException .

To overcome this problem, the most recommended way is to reinitialize the element again and this time WebDriver will assign a different Id to this element, and example for this has been done for you below :

Let’s see complete code with all the navigate operations together:

package com.example.automation;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

@author Mandeep Kaur
@Date 23 April,2020

public class SeleniumConfig {
public static void main(String[] args) {

String path = System.getProperty(“user.dir”);
System.setProperty(“webdriver.chrome.silentOutput”, “true”);
System.setProperty(“webdriver.chrome.driver”, path + “/chromedriver”);
WebDriver driver = new ChromeDriver();

//Navigate to the google

//Navigate to the yahoo

//Navigate back to google

//Navigate back to yahoo

//Navigate to the instagram

//Refresh the page

//close the driver


4. Conclusion

In this article, we learnt about various selenium navigation commands.


Blog Contributors:

Author:  Mandeep Kaur
Mandeep, having 5+ years of Testing experience in automation using Selenium (Java). Expertise in API and Performance testing using JMeter.
Reviewer: Naveen Khunteta 

Overview of WebDriver and WebElement Interface in Selenium

Overview of WebDriver and WebElement Interface in Selenium

1. Introduction 
In this article, we are going to explore these powerful interfaces WebDriver and WebElement.
2. WebDriver Hierarchy
Before proceeding any further, let’s have a look at WebDriver Hierarchy first:
  • WebDriver is an interface and extends SearchContext Interface, which declares two methods findElement and findElements Methods (FindElement/FindElements in above image).
  • WebDriver has many abstract methods like: get(String url), close(), quit(),getTitle(), getCurrentUrl etc.
  • RemoteWebDriver class which implements WebDriver Interface, this class implement all the methods in WebDriver including findElement and findElements.
  • ChromeDriver Class extends ChromiumDriver Class which further extends RemoteWebDriver class.
  • And finally, IEDriver, SafariDriver and FirefoxDriver classes directly extends RemoteWebDriver class.
  • Click here to view complete source code implementation and for selenium java APIs visit here.
Let’s understand with a simple example:
When we say WebDriver driver = new ChromeDriver();
We can access all methods using ChromeDriver instance.

Below is the image for the same :


3. WebElement Interface
Now, let’s explore WebElement Interface:
  •  As explained on Selenium Official Site a WebElement represents HTML element.
  • The interface also extends SearchContext, TakesScreenshot interfaces.
  • In general, whatever we see in the HTML page is a WebElement whether it’s a link, search-text, button, Drop-Down, Web-Table etc. So, we can say that every action on a Web-Page while automating your Web Application will have to go through WebElement interface.
4. Ways to Define WebElement
       1)With the help of WebDriver instance
WebElement element = driver.findElement(By.);
findElement() – Basically it is a  method which finds a first single matched WebElement on the web page and returns the WebElement.
And similarly findElements() – It  returns List of matching WebElements that can be used to perform further actions.
Below code snippet where driver.findElements returning the List of WebElement.

By is an abstract class by which we can extract below methods which also be called as locators:

    2) By returning WebElement WebElement element = driver.findElement(By) and with above locators we can locate the WebElement on      the web page
    3)Using By Locator By by = By.name(“userName”);
WebElement element = driver.findElement(by);
5. Operations on WebElement
Once we figured out the WebElement with the help of locators then we can perform any actions on it.
Let’s look at below example:
WebElement userNameObj = driver.findElement(By.name(“userName”));
In above line of code, we found the WebElement with locator by name with WebElement instance as userNameObj.
Post that we need to send some userName to the WebElement, for that we need to write code as below
With the help of sendKeys, I just simply passed the username.
Let’s spend some time to look which all the post operations we can perform on WebElement:
As shown above, we can easily perform all these operation click(), clear(), sendKeys(), getText() and getAttribute() etc.
Below is the code snippet for your reference:

package com.example.automation;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;

import java.util.List;


* @author Mandeep Kaur

* @Date 21 April,2020


public class SeleniumConfig {

public static void main(String[] args) {

String path = System.getProperty(“user.dir”);

System.setProperty(“webdriver.chrome.silentOutput”, “true”);

System.setProperty(“webdriver.chrome.driver”, path + “/chromedriver”);

WebDriver driver = new ChromeDriver();


WebElement userNameObj = driver.findElement(By.name(“userName”));


WebElement userPasswordObj = driver.findElement(By.name(“password”));


WebElement loginObj = driver.findElement(By.name(“login”));


// get all the elements tag name a

List<WebElement> allLinksObj = driver.findElements(By.tagName(“a”));

// get the total count of elements

int linkCounts = allLinksObj.size();

for (int i = 0; i < linkCounts; i++) {






6. Conclusion
In this article, we learnt about WebDriver and WebElement Interface.

Naveen AutomationLabs

Blog Contributors:
Author:  Mandeep Kaur
Mandeep, having 5+ years of Testing experience in automation using Selenium (Java). Expertise in API and Performance testing using JMeter.
Reviewer: Naveen 

Selenium WebDriver Architecture Overview & WebDriver APIs

Selenium WebDriver Architecture Overview & WebDriver APIs

1. Overview
This article describes about Selenium WebDriver Architecture and to know about how selenium works internally.

2. The Basics

  • Selenium WebDriver is a browser automation framework that allows you to execute your tests against different browser.
  • WebDriver interacts and controls the actual browser in either locally or remotely. 
  • We can use WebDriver to automate and validate Web-Applications.
3. How selenium WebDriver Works Internally
Let’s take a look at the below architecture:
The above picture depicts, there are four components of Selenium Architecture:
1. Selenium Client Library
2. JSON Wire Protocol over HTTP
3. Browser Drivers
4. Browsers
We will try to understand each of these four components briefly:
1. Selenium Client Library
Selenium supports multiple libraries such as Java, Ruby, Python, etc.
It means that we can write our code with any of these scripting/programming languages.
Selenium Client Library sends the request in the form of API to the Browser Driver with the help of JSON Wire Protocol over HTTP (hypertext Transfer Protocol).

2. JSON Wire Protocol over HTTP

  • JSON stands for JavaScript Object Notation. It is a lightweight data-interchange format which transfers the data between a server and a client on the web.
  • JSON Wire Protocol is a REST API that transfers the data between HTTP server .Every Browser Driver uses a HTTP server to receive HTTP requests.

3. Browser Driver

  • Browser Drivers are used to communicate with browsers.
  • Each browser has its specific Browser WebDriver.
  • When a browser driver is received any command then that command will be executed on the respective browser and the response will go back in the form of HTTP response.
Following are the operations performed when we run our automation script using specific Browser driver:
1. For each Selenium command, a HTTP () request is created and sent to the browser driver.
2. The browser driver uses a HTTP server for getting the HTTP requests.
3. HTTP Server sends all the steps to perform a function which are executed on the browser.
4. The HTTP server sends the status back to the automation script.

3. Browsers
Selenium supports multiple browsers such as Firefox, Chrome, IE, Safari etc.
Now let’s proceed to see the real implementation of the same:
Note: Because there are many Browsers in the market today, Selenium community has created WebDriver as an interface.

This interface defines some set of methods whose implementation will be provided by implementing classes such as ChromeDriver, FirefoxDriver, SafariDriver etc.

WebDriver’s main feature is to control and provide instructions to the Browser. So, you can choose any driver based on your browser. In above case we have chosen ChromeDriver.
Below code for your reference:
package com.example.testAutomation;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;

 * @author Mandeep Kaur
 * @Date 17 April,2020
public class SeleniumConfig {
public static void main(String[] args) {

        String path = System.getProperty(“user.dir”);
“webdriver.chrome.driver”, path + “/chromedriver”);
        WebDriver driver =
new ChromeDriver();


4. Now, let’s see what will happen internally when you execute the above script:
1. Upon executing the above code, Selenium client library (java) will convert the automation script to Rest API and communicates with the Chrome Driver over JSON Wire Protocol. 

2. Once API interacts with Browser Driver, then the Browser Driver will pass that request to the browser over HTTP and then the commands in your selenium script will be executed on the browser.

3. Based on the Rest Methods Type: Get/Post/Delete, response will be generated on the browser end and it will be sent over HTTP to the browser driver and from the Browser Driver over JSON Wire Protocol sends it to the UI Console.

4. Click on this link for complete understanding of JSON Wire Protocol

Let’s try understanding this with an example:
Below are the API’s gets evoked when we write any operation using selenium .
For example, when we write driver.get(“url”) below highlighted API will be executed Internally.
Let’s move on to the practical implementation to see how exactly it works:
1. Download the selenium Standalone server from here and place it to a directory and keep your chrome/gecko driver in the same directory.
2. Open command Terminal/command Prompt and navigate to the above directory and run the command java -jar selenium-server-
standalone-3.141.59.jar and we will get our selenium server up and running as can be seen below
Next, we will open our browser and enter the URL as  http://localhost:4444/ :
You will be landing to this page
Click on console, you will be navigated to below page
Click on create Session and you will be prompted with a pop up to select the browser you want to run the automation script and click OK


And we see our session got created and chrome browser will be launched automatically and same can be confirmed from the Terminal:
Move the cursor to Capabilities and you will see our code WebDriver driver = new ChromeDriver(); has been converted into API in JSON-Payload internally
Now, let’s open the postman (It’s a tool to validate the request and Response)
Request: To get the current session running, we will evoke sessions API from JSONWireDocumentation with end-point: /sessions

And here we got our current “session id”:
This also can be done by running the command curl -X GET  http://localhost:4444/wd/hub/sessions
Let’s evoke “/sessionId/url” API to see how we can retrieve the URL when we pass driver.get(“url” ) in our code:
Here method Type will be post and we have to pass the body with URL we want to get, in this case will take https://www.hubspot.com/
And yes, we got our URL in launched Chrome and same operation through Terminal can be achieved like below
5. Conclusion
In this article, we have learnt the complete internal architecture of Selenium WebDriver.
That’s it 🙂 You have learnt about Selenium WebDriver Architecture and WebDriver Rest APIs.


Naveen AutomationLabs


Blog Contributors:
Author:  Mandeep Kaur
Mandeep, having 5+ years of Testing experience in automation using Selenium (Java). Expertise in API and Performance testing using JMeter.
Reviewer: Naveen 

How to write your first Selenium WebDriver Code

How to write your first Selenium WebDriver code


1. Introduction 

In this article, we will have a quick look at the download and installation of java, eclipse and practical introduction to working with our first selenium script.

2. Set up java and Eclipse

Eclipse IDE requires java, so we will be installing Java SE JDK1.8
Here are the steps to install JDK :
Step 1: Download JDK from here and choose the JDK according to your OS (Windows/Mac based on 32 bit and 64-bit version). 
Sign up for oracle account and login with the same, you will be able to download the JDK and install in your system by clicking it and accepting the consent till you get the finish/close button.
Step 2: To check if java is installed, open a command window or terminal and type java -version, and output will be similar to
Otherwise, we’ll get an error as :
‘java’ is not recognised as an internal or external commands
The above error may vary depending on the OS and the java version installed
Step 3: For windows, we need to define the java Environment path to locate the executables like javacjava, etc
  • Open search and type advanced system setting


  • In the shown options, select the View advanced system settings link
  • Under the Advanced tab, click Environment Variables
·       In the System variables section, click New 


·        Set JAVA_HOME as the Variable name and the path to the JDK installation and click OK
  • Click OK and click Apply to apply the changes

In Mac OSX 10.5 or above, Apple recommends  to set the $JAVA_HOME variable to (/usr/libexec/java_home
1) open the terminal and run the command Open ~/.bash_profile, if file exists it will open the bash file 
otherwise, we will get the error message as:

The file /Users/userName  .bash_profile does not exist.
2) The next step is to create the bash file, simply run command $ vim  ~/.bash_profile  and add 
export JAVA_HOME=$(/usr/libexec/java_home) save and close the file.

3) Now, run the source ~/.bash_profile to apply the changes. 
4) To check the value of JAVA_HOME  run the command echo $JAVA_HOME and the output should be similar like 
Step 4Download the latest version of Eclipse IDE from here and choose the version according to OS
you should be able to download .exe file for Windows and .dmg for Mac after successful completion of the installation, you are all set to launch the IDE.
Step 5: Lastly, we need to download Selenium Java Client Driver  to run our first selenium script 
Selenium Java Client Driver from here and choose the latest version and Save it your preferred location in your machine (say C:\documents) 
Configure Eclipse IDE with WebDriver :
  • Create a new Java Project in Eclipse:
  • Give a Project Name : Test Automation
  • Right-click on the project and click on Properties>Java Build Path>Click on configure build path>Click on Library Tab>Add External JARs and Select the Selenium WebDriver JARs from the location, where you have saved the Selenium JARs in your System.   
 and click on apply and press OK
Now, let’s first download the latest chrome Driver from here according to your OS and save the driver in some directory and to check the compatibility with browser and driver click here
3. Selenium Integration :
In this section, we will start with a simple selenium script  such as open a browser, navigating to URL and verify the title of the page 
Now, create a java package under your project, and create a class  and provide a  class name as SeleniumConfig 
In order to launch the Chrome browser, we have to do two steps
1. Set a system property “webdriver.chrome.driver” to the path of your ChromeDriver file
2. Instantiate a ChromeDriver class.
Below is the code snippet for your reference :
package com.example.testAutomation;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
 * @author Mandeep Kaur
 * @Date 16 April,2020
public class SeleniumConfig {
public static void main(String[] args) {
String path = System.getProperty("user.dir");
// For Windows define path as C:\Users\abc\Desktop\chromedriver.exe
System.setProperty("webdriver.chrome.driver", path + "/chromedriver");
WebDriver driver = new ChromeDriver();
* Now, let's open the browser with the help of the driver and get the
* title of the site: Here we will use the dummy Site for testing
String actualTitle = driver.getTitle();
// Finally, we can validate if the actual title is matched with our
// expected
// Title:
String expectedTitle = "HubSpot | Inbound Marketing, Sales, and Service Software";
if (actualTitle.equalsIgnoreCase(expectedTitle))
System.out.println("Test Passed!");
System.out.println("Test Failed");
// once all the operations are done, we can close the web driver
That’s it!! You have written your first Selenium Program 🙂
Naveen AutomationLabs

Blog Contributors:Author:  Mandeep Kaur

Mandeep, having 5+ years of Testing experience in automation using Selenium (Java). Expertise in API and Performance testing using JMeter. https://www.linkedin.com/in/mandeep-kaur-486ba9106

Reviewer: Naveen Khunteta https://www.linkedin.com/in/naveenkhunteta

How to Download and Install Appium Desktop on Win and Mac

How to Download and Install Appium Desktop on Win and Mac

Appium Desktop is an application for Windows, Macintosh and linux OS. Appium Desktop is a UI based app with a lot of connectivity and configuration options. It will allows the user to view some advanced options in UI like Inspector for identifying elements, Relaxed security, exporting appium logs and so on..
·       Using a graphical interface for the Appium Server. You can set options, start/stop the server, see logs, etc… Appium Desktop comes with Node runtime files, so no need to separately download and install Node.
·       One of the powerful and main feature on Appium desktop is INSPECTOR. Inspector is the object spy in Appium (like QTP you can spy an element by clicking). Inspector tool will identify the elements along with ID, XPATH and all applicable attributes.
http://appium.io/ is the official website for Appium desktop. One can easily download the latest desktop build of Appium form Downloads sections. Based on preferred the OS we can easily download the build. Hence it is an open source we can download and use it free of cost.

For Windows:

If you are using Windows based OS, then you have to download the .exe file. (ex: Appium-windows-1.15.1.exe). Once downloaded you can install the software by double clicking on the exe file.

On double click on exe file, the below installation screen will popup

Select the 1st radio button if you want appium to be avaialbe for all user who logs in this computer. Else click on 2nd option.  On clicking on “Install” button, installation will begin

Click on “Finish” button to launch the Appium desktop and also to complete the installation process and to quit the installation wizard.

For Mac:

If you are using Mac OS, then you have to download .dmg file so that you can simply move the file under Application to get started. (ex: Appium-mac-1.15.1.dmg). Once downloaded you just need to extract the file and move the build to Applications.
Just click and drag the appium logo to Applications.

Appium also available as an AppImage for Linux. App image is like an executable file for windows. Here in linux no need to install the build, just we need to open the appImage so that your Appium server UI will be prompted.
The good thing in Appium desktop is no UI change for any operation system. UI is built to be stable across platform.

Now we are ready with our Appium desktop to launch and starting the server.

Launching Appium Desktop after Installation for the first time:

Appium desktop UI is very simple and easy to access. Below image represents the home page of Appium Desktop.

In Simple Mode, one can start the Appium server by providing the “Host” and “Port” values. By default Appium REST http interface listener will use the Host and Port “4723”. If any other programs like Jenkins/tomcat are running on a default local server/port then we can change the Port in Appium.

Clicking on “Start Server” button will initiate a local host server with the given port #. You can start seeing logs in Appium desktop like below.

You can also verify the status in any browser by entering the command/URL http://localhost:4723/wd/hub/sessions. Which will give you the current status (same like selenium grid)

By any chance if your firewall is blocking Appium or if you get the below screen, select any or both the checkboxes and click on “Allow access” button. So that Appium can initiate a local host.

How to connect to an Emulator or a real Device with Appium:

Connecting a real device with Appium is very simple. Appium Desired Capabilities will take care of all the connectivity protocols. But before trying to connect we need to make sure all prerequisites are available in the computer. It’s all about configuration and SDK’s
If you want to connect an Android device on a Windows/Mac based OS, then you have to download and install the Android Studio/ Android SDK. Without Android SDK Appium cannot initiate a connectivity to any android based devices. The reason behind this is, Appium will connect to android device in developer debugging mode. Hence to enable the debugging mode “SHELL” commands are inevitable, Commands like ADB, Shell are available only on Android SDK. So to make a connectivity to a real android device “Android SDK” is must.
You can download Android SDK on its official website https://developer.android.com/studio. Based on the OS you can download and set the preferences. Once Android studio is installed it is also necessary to install the android SDK based on the device Android version. Ex. My real device is running Android version 9, then I need to install the SDK for Android 9. This can be achieved by AVD in android studio.
“Please use the below steps for creating an Android Emulator”

Step 1: Open android studio

In the home page, you can find “AVD Manager” icon on the top left corner

Step 2: Click on “AVD Manager” icon to get the below screen

Step 3: Create a Virtual Device (Emulator) by clicking the button “ + Create Virtual Device..” then you will be navigated to the below screen

Select the option “Phone” and you can select any device model based on your real device screen size (if needed) and click on “Next”
The below screen will list out all the applicable Android version for the selected device. Then you can click on download as per the android version you need.

Here I have selected “Android Pie” and click on Download.

Accept the license Agreement and click on Next button

Now the selected Android OS will start to download

Click on finish once download is completed.

So we are done with downloading SDK and successfully created Android Emulator.

Click on “Next” button to create an Emulator

Provide any name to the Emulator and click on “Finish”.

On the next time when you click on “AVD Manager” you will get the below screen where you can see the list of AVD’s created

Click on “Launch this AVD” button (Play button) under Actions section to start the Emulator.

Emulator is launched successfully 😊

2.     Android Environmental variables

Once Android SDK is downloaded successfully we can start using ADB and Shell executables from Android SDK. But the problem is windows OS don’t know from where it need to take the executable files. Imaging its like searching a small tool on a big warehouse. So to make the search easier we need to instruct the OS from where we need to utilize the commands, here comes the Environment variables. We need to inform Windows OS to take the executable files from this location and execute my command. So how to configure this ? let’s see
There are many ways to navigate to “Environment Variables” screen, A common way is to click on start menu and type “My Computer” or “My PC”,  then right click on that and select the “properties” option form the menu. Select “Advanced System Settings” to get system properties screen

 Click on “Environment Variables” and Select “New” button under “User Variables” section

Now, it’s time to create “Android_Home” path. Android_Home is nothing but the parent folder where  we have our SDK and Platform tools available. By default the Android_Home path should be
“C:Userscurrent userAppDataLocalAndroidSdk”
Enter the “Variable Name” as “Android_Home” and “Variable value” with the directory value and click on “OK” button to add the record.

Now “%android_home%” command refers to the directory where our SDK files are located.
It’s time to add “Platform-tools” and “tools” link to our Sytem variables, under “Path” record. For that click on “Path” record and select “Edit” button under System Variables

As I already mentioned, “%android_home%” refers to our SDK directory, now it’s time to add below 3 directories
Just copy and paste it one by one under “Path” record. Like below,

Now we are done with setting up Environment variables for Android. Click on OK button and close all the open windows.
Now open “Command Prompt” and simply type “ADB” and Enter

If you get the text as mentioned in the image, then you successfully configured the Android SDK variable path in our OS. Now we are good to go with Appium to connect to any real device/ Emulators.

That’s it!! You are ready to automate 🙂

Naveen AutomationLabs

Blog Contributors:
Author:  Ragavendran
Ragav, having 10.5 years of Testing experience on which 7 years of rich experience in automation using UFT, Selenium (Java/Python). Expertise in Web and Mobile automation testing using Appium.

Reviewer: Naveen 
Newer posts »