Basically Appium has the following four tenets:
1. Application should not have to be recompiled or modified before automating it.
2. Test scripts should not be locked into a specific language or framework.
3. A mobile automation framework should not 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!
How Appium satisfies its Philosophy
1. Appium meets its 1st requirement by using vendor-provided automation frameworks. So there is no need to compile in any Appium-specific or third-party code or frameworks to your app. This means you’re testing the same app you’re shipping. The vendor-provided frameworks we use are:
iOS: Apple’s UIAutomation.
Android 4.2+: Google’s UiAutomator
Android 2.3+: Google’s Instrumentation. (Instrumentation support is provided by bundling a separate project, Selendroid)
2. Appium meets its 2nd requirement by wrapping the vendor-provided frameworks in one API, the WebDriver API. WebDriver based on client-server protocol (known as the JSON Wire Protocol. Hence, a client written in any language can be used to send the appropriate HTTP requests to the server. Appium client libraries are available in multiple programming languages. So one can use JAVA with either Junit or TestNg, c# with Nunit etc. Basically, client libraries are simply HTTP clients and can be mixed into your code any way you please.
3. Appium meets its 3rd requirement by using WebDriver API. WebDriver has become the de facto standard for automating web browsers, and is a W3C Working Draft. So, Appium extended the protocol with extra API methods useful for mobile automation.
4. Appium meets its 4th requirement by being open source