Welcome. In this video, we will introduce Appium. What is Appium? Appium is an automation framework for testing mobile apps. It's essentially a framework to interact with mobile applications in a programmatic way. You may have applications that are Native, on iOS or Android Platforms or mobile Web applications, which means you use a browser to interact with a web application or hybrid applications which are essentially a wrapper around the Web view for a Web app. These kinds of apps exist on a variety of platforms like iOS and Android and we as app developers may want to deploy our app on multiple platforms and test them across multiple platforms. Appium is one of the nice ways of automating such testing. A few design principals of Appium are very important to understand here. It's driven by the philosophy that app automation should be done in a way such that you don't have to change the application itself, which means whatever app that you deploy is the app that you are running when you're testing too. It would be best to use well-established or well-known APIs and not having to learn or use a new API to program your test. Essentially, free the tester to use their own favorite testing frameworks to write that test and not tie them into any specific test automation framework. How does Appium achieve all of this? It's using a few key design ideas to make this all happen. If you think of the app running on the mobile platform, many vendor-provided frameworks will let you do automation in some way to interact with the application, like Apple's XCUITest, Google's UIAutomator2 or Microsoft's WinAppDriver, these are all vendor-specific, like if you are using Android, you might use the UIAutomator2. If you are using iOS apps, you might use XCUITest, but these have differences and nuances. What Appium does is tries to shield us away from all of these specificities by providing good API, a standard API. We are all familiar with the WebDriver API that Selenium uses and Appium takes that API, by and large, and adds a few mobile specific extensions to deal with the uniqueness of mobile applications and that's the API that we need to use to interact with the app irrespective of whether we are testing an iOS app or an Android app. What we can do then is write our test in our favorite test framework, like Cucumber or JUnit or whatever you will and use the Appium libraries and then use the WebDriver API to write our tests to interact with the application. The same test can then run against the iOS instantiation of our app as well as the Android instantiation of the app, for example. So this is kind of nifty, so that we now separate the concerns of how you design and write the tests from the specificities of which platform the app itself runs on. Some key Appium concepts are useful to keep in mind because these terms appear when we read various documentation and description of Appium libraries. There is essentially what is called an Appium server, written in Node.js and it exposes a RESTful API. The server is the one which takes the requests from the clients and sends it to the app that's being automated. The server itself comes with a nice desktop GUI to set it up and monitor its status and so on. On the client side, which is where we write our tests, we use the client libraries that are provided in various languages like Java, and C#, and Ruby and things like that. The Appium APIs are used to write the client side and then it essentially opens up a connection. It's an HTTP post and sets up a session with the server. When we set up this session, the specific capabilities that we need on the app being tested are set up so that if you want specific gestures or actions that you want to perform and the capability to do that, those are all encoded in a JSON object. It's part of the initial session setup. Once the session is set up, all interactions between the client and the server to test the app use that session ID to uniquely identify the test session that we are using. With these basic concepts, we can now see that we can essentially quickly set up and run an Appium-based testing of an app. So, as an exercise, read the Getting Started page on the Appium documentation, obtain the server and install it, set up your platform- specific drivers, and then set up your Appium client and you can start up the Appium server. You can use the GUI or the command line and it's easy to run a quick test, a first test. Follow the instructions in that page and go through this exercise so that this becomes useful when we do the later programming assignment for this module.