We have discussed most of the web GUI automation with Selenium WebDriver. It’s high time to switch to mobility and mobile automation testing because mobile-first is the talk of the town. This is just the beginning of the mobility section of our blog. The agenda of this article is about the understanding of Appium Server and its architecture which demystifies the testing of mobile app and site.
Well, you will feel connected with Appium or Appium Server if you are aware of two of the most important components of Selenium i.e., Selenium Grid & Selenium RC. When I started working on mobile automation through Appium a few days back then I found its working principle is the same as the Selenium Grid. But, there is a thin line of difference between Appium and Selenium grid which will be visible in the later part of the tutorials. SO stay glued! 🙂
Recommended: Java interview questions for Selenium professionals
What is the Appium Server?
Appium server or simply Appium is a mobile automation tool which dedicatedly performs automation of Native, Hybrid and mobile web apps. Appium is an open-source, cross-platform test automation tool centered at Mobile-first technology. It is initially developed by Sauce Labs.
Like Selenium, Appium also uses JSON wire protocol with HTTP protocol to interact with native, hybrid and mobile web apps.
Why only Appium?
There are lots of open-source mobile automation tool available like Robotium, Calabash, Monkey Talk, Keep it Functional (KIF), Frank, etc; But, we still choose Appium over these tools because of following reasons:
- It extends the WebDriver interface
- It works on the concept of Selenium Grid and Selenium RC
- It does not require any additional agent for compilation to test mobile application, hence, we use the same application which we are going to publish in-app store
The architecture of the Appium
Appium is a server which is written in node.js. It follows the HTTP JSON Wire protocol to send and receive commands. Thus, Appium creates and handles one or more than one WebDriver sessions for mobile platforms.
Each OS/platforms like Android or iOS has its mechanism to communicate with Appium server. In general, we write a test case in any of our preferred programming languages to test the application on the device which internally starts the server itself. Further, the device waits for the proxy commands from the Appium server. Once Appium server shares the proxy commands then communication gets established through HTTP JSONWire protocol.
Before running our test case, we first start the Appium server which is the similar process as Selenium RC wherein we wait for the Selenium server to get started. Once the Appium server is up, it follows the Grid concept to send tests to the device.
We will discuss the working of Appium in both Android and iOS separately.
How Appium works with iOS devices?
iOS devices have the framework for mobile automation and the framework named as UIAutomation (for older version) and XCUITest (for latest version). This is the inbuilt framework. When we run our automated test scripts then at first WebDriver interacts with Appium Server through JSONWire protocol. Further, Appium Driver interacts with the libraries of XCUITest API through HTTP request. WebDriverAgent (WDA) server meditates the access to XCUITest API. Any kind of command’s exchange happens through WDA. This is how Appium works with iOS devices.
How Appium works with Android devices?
As discussed above, Android devices also have their framework to exchange the commands between device and Appium server and the framework here called, UiAutomator2 (Earlier UiAutomator). The process of communication is the same as discussed above in the iOS section, but the difference is framework here.
- We can design our test cases in all those programming languages supported by the Selenium WebDriver, irrespective of the configuration of Appium server.
- It allows cross-platform testing.
- CI integration is available with a third party tool.
- It does not require adding the external agent to the core code of the application.
- Appium allows a variety of physical devices as well as emulators.
- It only supports the Android SDK and the latest APIs. For older platform’s API, we need to use Selendroid.
- Bit slower with Test execution.
This was all about the introduction of Appium server and the architecture. We will have a marathon of tutorials on Appium so stay connected.