Appium (to be more precise Appium Server) is a web server which exposes a REST API. It performs following operations -
- Receives connections from a client,
- Listens for commands,
- Executes those commands on a mobile device,
- Responds with an HTTP response representing the result of the command execution.
Since Appium uses client server architecture, we can write our test code in any language that has a http client API, though it is easier to use one of the Appium client libraries. Appium server can be on a different machine than the one running test.
Session
Automation is performed in the context of a session. Clients initiate a session with a server specific to each library, but they all eventually send a POST /session request to the server, with a JSON object known as 'desired capabilities' object. At this point the server will start up the automation session and respond with a session ID which is used for sending further commands.
Desired Capabilities
Desired capabilities are a set of keys and values (like a map) sent to the Appium server. Desired capabilities tell server what kind of automation session should be started. Capabilities doc lists the capabilities available for Appium.
Appium Server
Appium is a server written in Node.js. It can be built and installed from source or installed directly from NPM.
$ npm install -g appium
$ appium
Appium Clients
Appium client libraries support Appium's extensions to the WebDriver protocol. When using Appium, Appium client libraries should be used instead of regular WebDriver client.
appium-desktop is GUI wrapper around the Appium server. Appium.app is for mac and Appium.exe is for window. These are bundled with everything required to run the Appium server, hence you need not worry about node. They also have element inspection capabilities, which lets you check the hierarchy of app.