Introduction to Appium

In this post, I would like to give a brief introduction to Appium and Appium design architecture. Appium is an open-source mobile application automation tool which can run the test on various platforms (cross-platform) such as Android, iOS, and Windows. Appium can use to test Native, Hybrid, and Mobile web applications.

Appium Philosophy

Appium was designed with 4 major design concepts;

  1. You shouldn’t have to recompile your app or modify it in any way in order to automate it.
  2. You shouldn’t be locked into a specific language or framework to write and run your tests.
  3. A mobile automation framework shouldn’t reinvent the wheel when it comes to automation APIs.
  4. A mobile automation framework should be open source, in spirit and practice as well as in name!

Appium Architecture

Appium is an HTTP server written in Node.js that creates and handles WebDriver sessions. Appium web server works as same as Selenium WebDriver, which receives HTTP requests from client libraries through JSON and handle those requests in different ways according to the platform.

Appium in iOS

Appium uses apples’ XCUITest (for iOS 9.3 and above) and UIAutomation (for iOS 9.3 and lower ) to interact with UI elements.


Pic Courtesy: IBM developerWorks

  1. When the user executes the test script, It goes to Appium server as an HTTP request through JSON.
  2. Appium server sends the command to the instruments.
  3. The instruments look for the bootstrap.js file, which pushes to the iOS device by Appium server.
  4. Then, commands execute in the bootstrap.js file within the instruments’ environment.
  5. After the execution done, the client sends back the message to the Appium server with the log details of execution commands.

Appium in Android

For android, Appium use UiAutomator/UiAutomator2 (for android 4.2+) and Intrumentation (for android 2.3+) to automate the apps. Instrumentation support is provided by bundling a separate project, Selendroid.


Pic Courtesy: IBM developerWorks

Here, UiAutomator and Selendroid have in place of apples’ instruments and bootstrap.jar in place of bootstrap.js

JSON Wire protocol

It is a transport mechanism to send user-created test scripts to Appium Server as an HTTP request. It is a specific set of predefined, standardized endpoints exposed via RESTful API.

Appium Concepts

Client/Server Architecture

Appium is an HTTP server that exposes a REST API. It receives a connection from a client, listens to commands, executes it on mobile devices and responds with HTTP respond. This client/ server architecture enables you to write code in any language (Java, C#, Ruby, Python, JavaScript & PHP etc.) that has client API. But it is recommended to use one of the Appium Client Libraries. Appium extends WebDriver client libraries and adds extra commands to work with mobile devices such as multitouch, long press & screen orientation etc.


Automation is always performed in the context of a session. The client library requests server to create a session. The server creates a session and responds to the client with a sessionId. which is used to send commands to interact with that app(s) being tested.

Desired Capabilities

Desired capabilities are JSON object which sends by the client to server to tell the server what kind of automation session we’re interested in starting up. There are also various capabilities which can modify the behavior of the server during automation. You can find a complete list of Appium capabilities from here.

Appium Server

Appium server written in Node.js. It can build and install from the source or directly install from npm

$ npm install -g appium 
$ appium

Appium Desktop

There is a GUI version of Appium server that can be download for any platform. It comes bundled with everything required to run the Appium server, so you don’t need to worry about Node. It also comes with an Inspector, which enables you to check out the hierarchy of your app. You can download Appium desktop from here.

Appium Clients

There are client libraries (Java, Ruby, Python, PHP, JavaScript, and C#) which support Appium’s extensions to the WebDriver protocol. When using Appium, you may have to use one of these client libraries. You can view the full list of libraries here.



How to Configure Selenium WebDriver

Hola Testers,

Today I’m going to to tell how to configure Selenium WebDriver. Yes, this is the first lesson for Selenium WebDriver. I hope this will be useful for new users. In here, I’m going to use Java as my programming language. I’m going to divide this tutorial for below partitions.

  • Create a project and configure .jar files
  • Configure TestNG
  • Configure Firefox browser
  • Configure Chrome browser
  • Configure Internet Explore browser

Create a project and configure .jar files

To create a project we need programming IDE. Here I’m using eclipse.

  • Open Eclipse
  • Create a new Java Project

Screen Shot 2017-04-11 at 5.25.04 PM

After create a java project we need to download selenium webdriver jars.

  • Go to seleniumhq download page
  • Download and unzip the WebDriver bindings

Screen Shot 2017-04-11 at 4.19.34 PM.png

  • Create a folder called “libs” in java project (right click on the project > New > Folder)

Screen Shot 2017-04-11 at 5.37.45 PM

  • Paste all the .jar files from extracted folder of the downloaded zip file

Screen Shot 2017-04-11 at 5.45.01 PMScreen Shot 2017-04-11 at 5.46.12 PM

Now we have to add those .jar files to build path.

Select all .jar files in “libs” folder > right click > Build Path > Add to Build Path

Screen Shot 2017-04-11 at 5.49.22 PM

  • After that you can see all the .jar files in newly created “Referenced Libraries” library folder

Screen Shot 2017-04-11 at 5.49.37 PM

Configure TestNG

Click on Help menu > Install New Software..

Screen Shot 2017-04-11 at 6.00.43 PM.png

  • Click on Add button, “Add Repository” box will appear.
  • Enter below values as inputs and click “OK”
    • Name: TestNG
    • Location:

Screen Shot 2017-04-11 at 6.02.59 PM

  • Accept agreement details and install TestNG. (If it gives warning, click OK)
  • After successful installation system ask to restart eclipse, allow it.

Screen Shot 2017-04-11 at 6.15.04 PM.png


Configure Firebox browser

  • Download geckoDriver from seleniumhq download page Third Party Drivers, Bindings and Plugins section and unzip it

Screen Shot 2017-04-11 at 9.19.58 PM

  • Create a folder called “driver” in project and add unzipped file. Don’t copy through eclipse.

Screen Shot 2017-04-11 at 9.40.04 PM.png

  • Create a class
  • Import Firefox browser driver
import org.openqa.selenium.firefox.FirefoxDriver
  • Initialize FirefoxDriver object
System.setProperty("webdriver.gecko.driver", "path of geckodrivergeckodriver"); 
FirefoxDriver fd=new FirefoxDriver();

Sample code


  public void firefoxTest() {

 System.setProperty("webdriver.gecko.driver", "/Users/deranthika/Documents/eclipse/workspace/TestSelenium/drivers/geckodriver");

FirefoxDriver fd=new FirefoxDriver();



If you are using windows OS, you need to put location as below

System.setProperty("webdriver.gecko.driver","path of geckodriver.exe");

Screen Shot 2017-04-11 at 8.22.38 PM.png

Screen Shot 2017-04-11 at 9.42.55 PM.png


Configure Chrome browser

  • Instead of gecko, you need to download chromeDriver from seleniumhq download page
  • Download the latest stable version for your OS and copy it to drivers folder
  • Import chromeDriver
  • Create new test method
  • Initailize chromeDriver object
System.setProperty("", "/Users/deranthika/Documents/eclipse/workspace/TestSelenium/drivers/chromedriver");

ChromeDriver cd=new ChromeDriver();

sample code


  public void chromeTest() {

 System.setProperty("", "/Users/deranthika/Documents/eclipse/workspace/TestSelenium/drivers/chromedriver");

ChromeDriver cd=new ChromeDriver();



Screen Shot 2017-04-11 at 9.58.12 PMScreen Shot 2017-04-11 at 9.58.25 PM

Configure Internet Explorer browser

  • you need to download InternetExplorerDriver from seleniumhq download page
  • Download the latest stable version and copy it to drivers folder
  • Import InternetExplorerDriver
  • Create new test method
  • Initailize InternetExplorerDriver object
System.setProperty("", "C:\\Selenium\\IEDriverServer.exe");

InternetExplorerDriver id= new InternetExplorerDriver();

sample code


  public void chromeTest() {

System.setProperty("", "C:\\Selenium\\IEDriverServer.exe");

InternetExplorerDriver id= new InternetExplorerDriver();




I’ll add more browsers later 😉

Selenium Grid: An Introduction

Hola Testers!

Today we are going to talk about Selenium Grid!

What is Selenium Grid

Selenium Grid is a part of Selenium Suite which used to running multiple browsers on multiple environment at same time. There are two types of grid Grid 1 and Grid 2. Grid 1 is now deprecating by selenium team. So it is better to learn Grid 2.

Difference Between Grid 1 and Grid 2

Selenium Grid 1 Selenium Grid 2
Has own remote control Bundled with Selenium Server jar files
Need to install and configure Apache Ant before use Grid 1 No need to install Apache Ant
Only support Selenium RC Commands/scripts Support both Selenium RC and WebDriver scripts
Can only automate one browser per RC One RC can automate upto 5 browsers

Selenium Grid using hub-node concept to run.

What is Hub?

  • Is the central point where you need to keep your test scripts
  • There should be one hub for grid
  • All the nodes connect to the hub
  • Hub is running test, but browsers being automated in node

What is Node?

  • Selenium instances that executes tests which stores in hub
  • There can be one or more nodes per grid
  • Nodes can be launches in different platforms and different browsers

We’ll run a sample Selenium Grid test soon!

Getting Start with SoapUI

Hola Testors!

I thought to getting start of SoapUI with some example scenario rather than introducing the interface first. So shall we do a little exercise today? Previously I told we mainly we use two kind of web protocols to test (SOAP and REST). Today I’m gonna use SOAP service to test. Let’s begin:

Download and configure SoapUI

First, you need to download and install SoapUIto your computer.
Go to soapui official page and download a version which match with your computer (I’m using Mac OS X installer (64-bit) version)
SoapUI official site:

Screen Shot 2015-08-16 at 1.10.06 PM

After the download happens, you can install it as a normal application. In Mac it will installed to your /Application directory by default. In windows > Program Files

Create a workspace

After the installation you can use SoapUI. First of all open the application. Then create a workspace by

File> New Workspace

Screen Shot 2015-08-16 at 1.20.26 PM

Create a SOAP Project

Now you have a workspace to work. As I mentioned earlier we’re gonna create a SOAP project. How to do it

File> New SOAP Project

Screen Shot 2015-08-16 at 1.24.58 PM

Screen Shot 2015-08-16 at 1.26.41 PM

  1. Project Name: Currency Converter
  2. Initial WSDL:
  3. Keep checked for “Create Request”
  4. Click “OK”

It will create two version of services (CurrencyConvertorSoap and CurrencyConvertorSoap12). First one follows older standards of SOAP.

Screen Shot 2015-08-16 at 1.52.36 PM

Remove CurrencyConvertorSoap12 version since no use of it.

Expand CurrencyConvertorSoap version, there you can see a “ConversionRate” method.By expanding that method you’ll be able to see “Request1” request.

So let’s make it useful, Right click on it and rename to “GBP To LKR”

Screen Shot 2015-08-16 at 1.40.41 PM

Double click on the Request, it will display you a simple xml request

Screen Shot 2015-08-16 at 1.57.11 PM

<soapenv:Envelope xmlns:soapenv="" xmlns:web="http://www.webserviceX.NET/">

In the request xml you can see “?” marks for “FromCurrency” and “ToCurrency”.

You can test the request by replacing question mark of “FromCurrency” parameter by “GBP” and “ToCurrency” parameter by “LKR”.

<soapenv:Envelope xmlns:soapenv="" xmlns:web="http://www.webserviceX.NET/">

By clicking “Submit request” button of request window (upper left corner) you’ll be able to get the response xml with GBP to LKR exchange rate.

<soap:Envelope xmlns:soap="" xmlns:xsi="" xmlns:xsd="">
     <ConversionRateResponse xmlns="http://www.webserviceX.NET/">

Create a Test Suite/ Test Case

My request is working correctly. hope your one too. Now we have to test this service for GBP to LKR conversion. So we’re are gonna create a test case.

Right click on “GBP To LKR” request > Select “Add to TestCase”

Screen Shot 2015-08-16 at 1.58.57 PM

Oh, It is saying we don’t have a test suite to add the test case :O Okay we’ll create a test suite first.

Screen Shot 2015-08-16 at 1.59.57 PM

Then we create a test case

Screen Shot 2015-08-16 at 2.00.16 PM

Screen Shot 2015-08-16 at 2.00.23 PM

Screen Shot 2015-08-16 at 2.00.42 PM

Your test case will display in the tree as below

Workspace> Project> Test Suite > Test Case

There you can see Test Step, Load Test and Security Test. We’re gonna do a functional test. So our section is “Test Steps”. By default SoapUI creates a test step for us. Lets see what is inside there.

Screen Shot 2015-08-16 at 2.10.40 PM

Ahh it is same like the request XML! We change the xml to testable format that what we need. Change web:FromCurrency to GBP and web:ToCurrency to LKR as below

<soapenv:Envelope xmlns:soapenv="" xmlns:web="http://www.webserviceX.NET/">

Shall we check whether we get a correct output.

Click on the submit request button on top left corner. (Refer below screenshot)

It will generate an response xml

Screen Shot 2015-08-16 at 2.41.21 PM

<soap:Envelope xmlns:soap="" xmlns:xsi="" xmlns:xsd="">
      <ConversionRateResponse xmlns="http://www.webserviceX.NET/">

You can see the results in between ConversionRateResult tags it is 210.6568 now.

Add Assertions

Our test step is done now. But how we can verify whether this s correct out put or not while we’re running on this test? To do that we need assertions

Click on the Assertion tab on the bottom

Screen Shot 2015-08-16 at 2.48.17 PM

It will expand the assertion pane . Then click on the “Adds an assertion on item” button (shows in following screenshot)

Screen Shot 2015-08-16 at 2.48.32 PM

It opens Add Assertion window and you can add Assertions by selecting assertions in there.

Screen Shot 2015-08-16 at 2.48.52 PM

We will see how to use assertions and how to test a test case/ test suite on next posts. 🙂

If you have any comment/ suggestions please comment below. We need to be improve with your ideas and suggestions. See you soon folks 🙂

Introduction to Web Services

Hola Testors!

I think to start my first blog post with web services testing which I’m currently doing 😉

So first we need to understand what is a web service. Ya In today most of developers are using this web services or APIs to build web applications. For mobile they use mobile SDKs. It is actually like a library which we can use their methods.

Today when you are developing an application you do not need to build it from the scratch. There are lots of ready made services available which you can directly plug in to your application and deal with those values. For example think you need to build an application which use to display currency exchange rate from one currency to another one. You can use a web service to get the exchange value. And some organizations builds their own APIs for the applications. Some organizations allows to public (developers) to use their APIs (eg: google map).

So if you wants to memorize what is web service;

Web Services is the mechanism or the medium of communication through which two applications / machines will exchange the data irrespective of their underline architecture and the technology.

Web service can implement in different ways, but there are two popular ways among other methods. Those are;

  1. SOAP (Simple Object Access Protocol)
  2. REST (REpresentational State Transfer architecture)



SOAP is the standard protocol defined by W3C standard for sending and receiving web service request and response. SOAP uses the XML format to send and receive the request and hence the data is platform independent data. SOAP messages are exchanged between the provider applications and receiving application within the SOAP envelops. And it uses HTTP protocol.



REST  is an architecture that generally runs over HTTP. REST is an alternative to SOAP and instead of using XML for request REST uses simple URL in some cases. Unlike SOAP, RESTFUL applications uses HTTP build in headers to carry meta-information. All API request parameters and method parameters can be sent via either POST or GET variables.

REST API supports both XML and JSON format. It is usually preferred for mobile and web apps as it makes app work faster and smoother. REST returns some HTTP code values to user to understand the nature of response.

HTTP Code Meaning Description
1xx Informational Request received and continuing process
2xx Success Action was success
3xx Redirection Further actions must be taken in order to complete the request
4xx Client Error Request contain bad syntax/ cannot fulfill the request
5xx Server Error Server unable to fulfill the request



WSDL (Web Services Description Language) is an XML based language which will be used to describe the services offered by a web service. WSDL describes all the operations offered by the particular web service in the XML format. It also defines how the services can be called.


Web Service Testing

In order to do a web service testing for a particular web service you need to know 5 things

  • Understanding of the WSDL file
  • Understanding the operation that particular web service do
  • Understanding of the request XML format
  • Understanding of the response XML format
  • Using an appropriate tool for test

For the last point we can use SoapUI which we will discuss about in near future 😉


I hope by reading this post you will get some understand about what is web service and why we are using it. In next couple of posts I hope to explain about how to do a web service test with SoapUI with example. Please if you have any comments or suggestions please throw to me. I like to improve it with your suggestions and ideas. See you soon!


Hola Testors!


Hola Folks!

This is the beginning of “El Testor”. The blog for Software QA Engineering from the beginning. You can give us comments/ ideas how we can improve or any areas/ subject you would like to learn. We would like to start with basic Software QA principles and then we would like to talk about Automation, Performance, Mobile testing with guidance. Hope you will be with us.

See you soon with our first article…!