{"id":19734,"date":"2020-06-18T17:28:18","date_gmt":"2020-06-18T17:28:18","guid":{"rendered":"https:\/\/applitools.com\/?p=19734"},"modified":"2023-12-01T10:44:44","modified_gmt":"2023-12-01T18:44:44","slug":"visual-testing-appium-amazon","status":"publish","type":"post","link":"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/","title":{"rendered":"Visual Testing with Applitools, Appium, and Amazon AWS Device Farm"},"content":{"rendered":"\n<p>Visual UI testing is more than just testing your app on Desktop browsers and Mobile emulators. In fact, you can do more with Visual UI testing to run your tests over physical mobile devices.<\/p>\n\n\n\n<p>Visual UI testing compares the visually-rendered output of an application against itself in older iterations. Users call this type of test version checking. Some users apply visual testing for cross-browser tests.  They run the same software version across different target devices\/operating systems\/browsers\/viewports. For either purpose, we need a testing solution that has high accuracy, speed, and works with a range of browsers and devices. For these reasons, we chose Applitools.<\/p>\n\n\n\n<p>Running your Visual UI testing across physical devices means having to set up your own local environment to run the tests. Imagine the number of devices, screen resolutions, operating systems, and computers you\u2019d need! It would be frustratingly boring, expensive, and extremely time-consuming.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>This is where Amazon&#8217;s <a href=\"https:\/\/aws.amazon.com\/device-farm\/\">AWS Device Farm<\/a> comes into play. This powerful service can build a testing environment. It uses physical mobile devices to run your tests! All you do is upload your tests to Amazon, specify the devices you want, and it will take it from there!<\/p>\n\n\n\n<p>In one of my recent articles, <a href=\"https:\/\/applitools.com\/blog\/visual-ui-speeds-devops\">How Visual UI Testing can speed up DevOps flow<\/a> I showed how you can configure a CD\/CI service to run your Visual UI tests. The end result would be the same, whether you are running your tests locally, or via such services. Once the tests run, you can always check the results over the Applitools Test Manager Dashboard.<\/p>\n\n\n\n<p>In this article, I will show you how you can run your Visual UI tests, whether you\u2019ve written them for your mobile or web app, on real physical mobile devices in the cloud. For this, I will be employing <a href=\"https:\/\/applitools.com\/\">Applitools<\/a>, <a href=\"http:\/\/appium.io\/\">Appium<\/a>, and <a href=\"https:\/\/aws.amazon.com\/device-farm\/\">AW<\/a>S<a href=\"https:\/\/aws.amazon.com\/device-farm\/\"> Device Farm<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-aws-device-farm-for-mobile-visual-testing\">AWS Device Farm for mobile visual testing<\/h2>\n\n\n\n<p>AWS Device Farm is a mobile app testing platform that helps developers automatically test their apps on hundreds of real devices in minutes.<\/p>\n\n\n\n<p>When it comes to testing your app over mobile devices, the choices are numerous. Amazon helps to build a \u201cDevice Farm\u201d on behalf of the developers and testers, hence the name.<\/p>\n\n\n\n<p>Here are some of the major advantages and features for using this service:<\/p>\n\n\n\n<ol>\n<li><strong>Cross-platform<\/strong>. Android and iOS platforms (Native, Hybrid, and Web) are all supported. This includes native apps built with:\n<ul>\n<li>Java\/Kotlin for Android.<\/li>\n\n\n\n<li>Swift for iOS.&nbsp;<\/li>\n\n\n\n<li>PhoneGap.<\/li>\n\n\n\n<li>Xamarin.<\/li>\n\n\n\n<li>Unity.<\/li>\n\n\n\n<li>And web apps built for mobile browsers.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ol start=\"2\">\n<li><strong>Scale<\/strong>. AWS Device Farm supports hundreds of unique physical devices, categorized by make, model, and operating system. You may also choose to run your tests across multiple instances of the same device. All these devices are available for you with a few mouse clicks!<\/li>\n<\/ol>\n\n\n\n<ol start=\"3\">\n<li><strong>Safety and Security<\/strong>. AWS Device Farm provides full hardware and software isolation. The devices are physically isolated from one another! They cannot feed each other, so there\u2019s no way for one phone to take a photo, video, or audio recording of a device sitting next to it. In addition, the devices are not visible to each other from a wireless or network point of view. Bluetooth and Wi-Fi traffic is not shared. On the software side, the devices are dynamically tethered to a host machine. When you run your test on a host machine, it has the device plugged into it over USB. That very host machine, that executes your code, is brought up on the fly, runs your code, and is then torn down. It\u2019s never reused between customers.<\/li>\n<\/ol>\n\n\n\n<ol start=\"4\">\n<li><strong>Reporting<\/strong>. The test results, together with any screenshots, videos, logs and performance logs, are all logged, and saved in the cloud. The AWS Device Farm offers a rich Dashboard to allow you to browse any of these logs in order to debug your test runs.<\/li>\n<\/ol>\n\n\n\n<p>AWS Device Farm supports a number of test runners. This includes Appium Java JUnit, Appium Python, Appium Ruby, and Appium Java TestNG. Back in January 2019, Amazon <a href=\"https:\/\/aws.amazon.com\/about-aws\/whats-new\/2019\/01\/aws-device-farm-now-supports-appium-nodejs-and-appium-ruby\/\">announced<\/a> support for the Appium Node.js test runner. This means you can build your tests with Selenium Webdriver, for instance, and have it run on top of AWS Device Farm.<\/p>\n\n\n\n<p>Now that you have an idea about AWS Device Farm, let\u2019s move on, and discover the Appium automation testing framework.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-selenium-webdriver-for-browser-app-automation\">Selenium Webdriver for browser app automation<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.npmjs.com\/package\/selenium-webdriver\">Selenium WebDriver<\/a> is a browser automation framework that allows a developer to write commands, and send them to the browser. It offers a set of clients with a variety of programming languages (Java, JavaScript, Ruby, Python, PHP and others).&nbsp;<\/p>\n\n\n\n<p><strong>Figure 1<\/strong> below shows the Selenium WebDriver architecture:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"449\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_1-1024x449.png\" alt=\"\" class=\"wp-image-53320\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_1-1024x449.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_1-300x131.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_1-768x337.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_1.png 1150w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>Figure 1: Selenium WebDriver Architecture<\/strong><\/p>\n\n\n\n<p>Selenium WebDriver architecture consists of:<\/p>\n\n\n\n<ul>\n<li><strong>Selenium Language Bindings<\/strong>. These bindings are Selenium Client Libraries, offered in multiple programming languages, that developers use to send control commands to the browser. For instance, a developer can open a browser instance, and query for an element in DOM, among other tasks.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li><strong>JSON Wire Protocol<\/strong>. This is a <a href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/wiki\/JsonWireProtocol\">REST API Protocol<\/a> (JSONWP) that all WebDriver Server implementations adhere to and understand. Each of the queries and commands the developers write using the Selenium Client Library are converted to HTTP Requests, with the query or command, as payload in the JavaScript Object Notation (JSON) format, and is sent to the WebDriver Server.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li><strong>Browser Drivers<\/strong>. These are WebDriver Server implementations for a variety of browsers. A WebDriver Server implementation is nothing but an HTTP Server that receives requests from the Selenium Client Library using the JSON Wire Protocol format. It then analyzes the HTTP Request and prepares a browser-specific command to execute against the browser. If the request is a GET request, the browser-driver should return a response. Otherwise, a POST request is a one-way request to execute an action only without any response.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li><strong>Browsers<\/strong>. These are the browsers that have a corresponding WebDriver Server implementation. The WebDriver Server implementations communicate with the Browsers over HTTP via the DevTools Protocol of each browser.<\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/blob\/master\/javascript\/node\/selenium-webdriver\/CHANGES.md\">Selenium 4<\/a> is obseleting the JSONWP in favor of the new W3C WebDriver standard.<\/p>\n\n\n\n<p>Here\u2019s a quick tutorial on using and learning <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Learn\/Tools_and_testing\/Cross_browser_testing\/Your_own_automation_environment\">Selenium WebDriver<\/a>.<\/p>\n\n\n\n<p>With that brief overview of Selenium WebDriver, let\u2019s move on and explore Appium.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-appium-for-mobile-app-automation\">Appium for mobile app automation<\/h2>\n\n\n\n<p><a href=\"http:\/\/appium.io\/docs\/en\/about-appium\/intro\/\">Appium <\/a>is an open-source tool to automate Mobile app testing. It\u2019s a cross-platform that supports both OS (Android and iOS) test scripts. It is tested on simulators (iOS), emulators (Android) and real devices (iOS, Android).<\/p>\n\n\n\n<p>It\u2019s an HTTP Server written in Node.js that creates and handles WebDriver sessions. When you install Appium, you are actually installing the Appium Server. It follows the same approach as the Selenium WebDriver, which receives HTTP requests from the Client Libraries in JSON format with the help of JSONWP. It then handles those HTTP Requests in different ways. That\u2019s why you can make use of Selenium WebDriver language bindings, client libraries and infrastructure to connect to the Appium Server.&nbsp;<\/p>\n\n\n\n<p>Instead of connecting a Selenium WebDriver to a specific browser WebDriver, you will be connecting it to the Appium Server. Appium uses an extension of the JSONWP called the <a href=\"https:\/\/github.com\/SeleniumHQ\/mobile-spec\/blob\/master\/spec-draft.md\">Mobile JSON Wire Protocol<\/a> (MJSONWP) to support the automation of testing for native and hybrid mobile apps.&nbsp;<\/p>\n\n\n\n<p>It supports the same Selenium WebDriver <a href=\"http:\/\/appium.io\/docs\/en\/about-appium\/appium-clients\/\">clients <\/a>with a variety of multiple programming languages such as Java, JavaScript, Ruby, Python, PHP and others.&nbsp;<\/p>\n\n\n\n<p>Being a Node.js HTTP Server, it works in a client-server architecture. <strong>Figure 2<\/strong> below depicts the Appium Client-Server Architecture model:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"558\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_2-1024x558.png\" alt=\"\" class=\"wp-image-53322\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_2-1024x558.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_2-300x163.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_2-768x418.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_2.png 1039w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>Figure 2: Appium Server Architecture<\/strong><\/p>\n\n\n\n<p>Appium architecture consists of:<\/p>\n\n\n\n<ul>\n<li><strong>Appium Client<\/strong>. The <a href=\"http:\/\/appium.io\/docs\/en\/about-appium\/appium-clients\/\">Client Library<\/a> that communicates with the Appium Server via a session by sending the commands and queries over HTTP in JSON format. These requests are eventually executed against the specific Mobile device (emulator or real device).&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul>\n<li><strong>Mobile JSONWP<\/strong>. This is the communication Protocol that both Appium Clients and Appium Server understand and use to pass along the commands and queries to be executed. The Appium Server differentiates between iOS and Android Request using the <a href=\"http:\/\/appium.io\/docs\/en\/writing-running-appium\/caps\/\">Desired Capabilities<\/a> argument. It\u2019s a collection of keys and values encoded in a JSON object, sent by Appium clients to the server when a new automation session is requested. They contain all the information about the device to be used to run the tests against. Here\u2019s a detailed tutorial on all possible desired capabilities to use with Appium. <a href=\"https:\/\/seleniumbycharan.com\/2016\/08\/07\/desired-capabilities-for-appium\/\">Desired Capabilities for Appium<\/a><\/li>\n<\/ul>\n\n\n\n<ul>\n<li><strong>Appium Server.<\/strong> It\u2019s a Node.js HTTP server that receives requests from the client libraries, translates them into meaningful commands and passes them over to the specific UI Automator.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul>\n<li><strong>UI Automators<\/strong>. They are used to execute commands against the Mobile device\/emulator\/simulator. Examples are: <a href=\"http:\/\/appium.io\/docs\/en\/drivers\/android-uiautomator2\/\">UI Automator2<\/a> and <a href=\"http:\/\/appium.io\/docs\/en\/drivers\/ios-xcuitest\/\">XCUITest (iOS)<\/a><\/li>\n<\/ul>\n\n\n\n<p>The results of the test session are then communicated back to the Appium Server, and back to the Client in the form of logs, using the Mobile JSONWP.<\/p>\n\n\n\n<p>Now that you are well equipped with knowledge for Selenium WebDriver and Appium, let\u2019s go to the demo section of this article.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-demo\">Demo<\/h2>\n\n\n\n<p>In this section, we will write a Visual UI test script to test a Web page. We will run the tests over an Android device both locally and on AWS Device Farm.&nbsp;<\/p>\n\n\n\n<p>I will be using both Selenium WebDeriver and Appium to write the test script.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-prerequisites\">Prerequisites<\/h3>\n\n\n\n<p>Before you can start writing and running the test script, you have to make sure you have the following components installed and ready to be used on your computer:<\/p>\n\n\n\n<ul>\n<li>Java installed<\/li>\n\n\n\n<li>JAVA_HOME environment variable is set to the Java SDK path<\/li>\n\n\n\n<li>Node.js installed<\/li>\n<\/ul>\n\n\n\n<p>Assuming you are working on a MacOS computer, you can verify the above installations by running the following bash commands:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">echo $JAVA_HOME \/\/ this should print the Java SDK path<br>node -v \/\/ this should print the version of Node.js installed<br>npm -v \/\/ this should print the version of the Node Package Manager installed<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-component-installations\">Component Installations<\/h3>\n\n\n\n<p>For this demo we need to install Appium Server, Android Studio \/ SDK and finally make sure to have a few environment variables properly set.<\/p>\n\n\n\n<p>Let\u2019s start by installing Appium Server. Run the following command to install Appium Server locally on your computer.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm install -g appium<\/pre>\n\n\n\n<p>The command installs the Appium NPM package globally on your computer. To verify the installation, run the command:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">appium -v \/\/ this should print the Appium version<\/pre>\n\n\n\n<p>Now let\u2019s install Android Studio \/ SDK so that you can run the test script on an emulator or real device. You could install the Android SDK only but then you have to do additional advanced steps to properly configure the Android environment on your computer. I highly recommend installing the Android Studio as it makes your life easier.<\/p>\n\n\n\n<p>Download the <a href=\"https:\/\/developer.android.com\/studio\">Android Studio executable<\/a>. Follow the steps below to install locally on your computer:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"799\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_3-1024x799.png\" alt=\"\" class=\"wp-image-53323\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_3-1024x799.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_3-300x234.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_3-768x600.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_3-1536x1199.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_3.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"799\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_4-1024x799.png\" alt=\"\" class=\"wp-image-53324\" style=\"width:1391px;height:auto\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_4-1024x799.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_4-300x234.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_4-768x600.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_4-1536x1199.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_4.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"799\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_5-1024x799.png\" alt=\"\" class=\"wp-image-53325\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_5-1024x799.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_5-300x234.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_5-768x600.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_5-1536x1199.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_5.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"799\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_6-1024x799.png\" alt=\"\" class=\"wp-image-53326\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_6-1024x799.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_6-300x234.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_6-768x600.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_6-1536x1199.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_6.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Notice the location where the Android SDK was installed. It\u2019s <strong>\/Users\/{User Account}\/Library\/Android\/sdk<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"799\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_7-1024x799.png\" alt=\"\" class=\"wp-image-53327\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_7-1024x799.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_7-300x234.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_7-768x600.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_7-1536x1199.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_7.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Wait until the download and installation is complete. That\u2019s all!<\/p>\n\n\n\n<p>Because I want to run the test script locally over an Android emulator, let\u2019s add one.<\/p>\n\n\n\n<p>Open the Android Studio app:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"782\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_8-1024x782.png\" alt=\"\" class=\"wp-image-53328\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_8-1024x782.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_8-300x229.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_8-768x586.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_8-1536x1173.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_8.png 1556w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Click the <strong>Configure<\/strong> icon:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"662\" height=\"612\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_9.png\" alt=\"\" class=\"wp-image-53329\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_9.png 662w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_9-300x277.png 300w\" sizes=\"(max-width: 662px) 100vw, 662px\" \/><\/figure>\n\n\n\n<p>Select the <strong>AVD Manager<\/strong> menu item.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"782\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_10-1024x782.png\" alt=\"\" class=\"wp-image-53330\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_10-1024x782.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_10-300x229.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_10-768x586.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_10-1536x1173.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_10.png 1556w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Click the <strong>+ Create Virtual Device<\/strong> button.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"722\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_11-1024x722.png\" alt=\"\" class=\"wp-image-53331\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_11-1024x722.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_11-300x212.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_11-768x541.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_11-1536x1083.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_11.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Locate and click the <strong>Pixel XL<\/strong> device then hit <strong>Next.<\/strong><\/p>\n\n\n\n<p>Locate the <strong>Q<\/strong> release and click the <strong>Download<\/strong> link.\u00a0<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"794\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_12-1024x794.png\" alt=\"\" class=\"wp-image-53332\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_12-1024x794.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_12-300x233.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_12-768x595.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_12-1536x1190.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_12.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Read and accept the Terms and Conditions then hit <strong>Next.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"794\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_13-1024x794.png\" alt=\"\" class=\"wp-image-53333\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_13-1024x794.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_13-300x233.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_13-768x595.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_13-1536x1190.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_13.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The Android 10, also known as Q release, starts downloading.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"722\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_14-1024x722.png\" alt=\"\" class=\"wp-image-53334\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_14-1024x722.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_14-300x212.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_14-768x541.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_14-1536x1083.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_14.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Once the installation is complete, click the <strong>Next <\/strong>button to continue setting up an Android device emulator.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"722\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_15-1024x722.png\" alt=\"\" class=\"wp-image-53335\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_15-1024x722.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_15-300x212.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_15-768x541.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_15-1536x1083.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_15.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The installation is complete. Grab the <strong>AVD Name<\/strong> as you will use it later on in the test script, and hit <strong>Finish.<\/strong><\/p>\n\n\n\n<p>Finally, we need to make sure the following environment variables are set on your computer. Open the <strong>~\/.bash_profile<\/strong> file, and add the following environment variables:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">APPLITOOLS_API_KEY=<strong>{Get the Applitools API Key from Applitools Test Manager}<\/strong><br>export APPLITOOLS_API_KEY<br>ANDROID_HOME=\/Users\/<strong>{Use your account name here}<\/strong>\/Library\/Android\/sdk<br>export ANDROID_HOME<br>ANDROID_HOME_TOOLS=$ANDROID_HOME\/tools<br>export ANDROID_HOME_TOOLS<br>ANDROID_HOME_TOOLS_BIN=$ANDROID_HOME_TOOLS\/bin<br>export ANDROID_HOME_TOOLS_BIN<br>ANDROID_HOME_PLATFORM=$ANDROID_HOME\/platform-tools<br>export ANDROID_HOME_PLATFORM<br>APPIUM_ENV=\"Local\"<br>export APPIUM_ENV<\/pre>\n\n\n\n<p>Finally, add the above environment variables to the $PATH as follows:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">export $PATH=$PATH:$ANDROID_HOME:$ANDROID_HOME_TOOLS:$ANDROID_HOME_TOOLS_BIN:$ANDROID_HOME_PLATFORM<\/pre>\n\n\n\n<p>One last major component that you need to download, and have on your computer, is the ChromeDriver. Navigate to the <a href=\"http:\/\/appium.io\/docs\/en\/writing-running-appium\/web\/chromedriver\/\">Appium ChromeDriver<\/a> website, and download the latest workable ChromeDriver release for Appium. Once downloaded, make sure to move the file to the location: <strong>\/usr\/local\/bin\/chromedriver<\/strong><\/p>\n\n\n\n<p>That\u2019s it for the installations! Let\u2019s move on and explore the Visual UI test script in depth.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-run-the-visual-ui-test-script-locally\">Run the Visual UI Test Script locally<\/h3>\n\n\n\n<p>You can find the source code demo of this article on this GitHub <a href=\"https:\/\/github.com\/bhaidar\/applitools-appium-aws\">repo<\/a>.<\/p>\n\n\n\n<p>Let\u2019s explore the main test script in this repo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\"use strict\";\n\n;(async () => {\n\n    const webdriver = require(\"selenium-webdriver\");\n    const LOCAL_APPIUM = \"https:\/\/web.archive.org\/web\/20221206000829\/http:\/\/127.0.0.1:4723\/wd\/hub\";\n\n    \/\/ Initialize the eyes SDK and set your private API key.\n    const { Eyes, Target, FileLogHandler, BatchInfo, StitchMode } = require(\"@applitools\/eyes-selenium\");\n\n    const batchInfo = new BatchInfo(\"AWS Device Farm\");\n    batchInfo.id = process.env.BATCH_ID\n    batchInfo.setSequenceName('AWS Device Farm Batches');\n    \n    \/\/ Initialize the eyes SDK\n    let eyes = new Eyes();\n    eyes.setApiKey(process.env.APPLITOOLS_API_KEY);\n    eyes.setLogHandler(new FileLogHandler(true));\n    eyes.setForceFullPageScreenshot(true)\n    eyes.setStitchMode(StitchMode.CSS)\n    eyes.setHideScrollbars(true)\n    eyes.setBatch(batchInfo);\n\n    const capabilities = {\n        platformName: \"Android\",\n        deviceName: \"Android Emulator\",\n        automationName: \"UiAutomator2\",\n        browserName: 'Chrome',\n        waitforTimeout: 30000,\n        commandTimeout: 30000,\n    };\n\n    if (process.env.APPIUM_ENV === \"Local\") {\n        capabilities[\"avd\"] = 'Pixel_XL_API_29';\n    }\n    \n    \/\/ Open browser.\n    let driver = new webdriver\n        .Builder()\n        .usingServer(LOCAL_APPIUM)\n        .withCapabilities(capabilities)\n        .build();\n\n    try {\n        \/\/ Start the test\n        await eyes.open(driver, 'Vuejs.org Conferences', 'Appium on Android');\n\n        await driver.get('https:\/\/us.vuejs.org\/');\n\n        \/\/ Visual checkpoint #1.\n        await eyes.check('Home Page', Target.window());\n\n        \/\/ display title of the page\n        await driver.getTitle().then(function (title) {\n            console.log(\"Title: \", title);\n        });\n\n        \/\/ locate and click the burger button\n        await driver.wait(webdriver.until.elementLocated(webdriver.By.tagName('button.navbar__burger')), 2000).click();\n        \n        \/\/ locate and click the hyperlink with href='\/#location' inside the second nav element\n        await driver.wait(webdriver.until.elementLocated(webdriver.By.xpath(\"\/\/web.archive.org\/web\/20221206000829\/https:\/\/nav[2]\/ul\/li[3]\/a[contains(text(), 'Location')]\")), 2000).click();\n\n        const h2 = await driver.wait(webdriver.until.elementLocated(webdriver.By.xpath(\"(\/\/h2[@class='section-title'])[4]\")), 2000);\n        console.log(\"H2 Text: \", await h2.getText());\n\n        \/\/ Visual checkpoint #2.\n        await eyes.check('Home Loans', Target.window());\n\n        \/\/ Close Eyes\n        await eyes.close();\n    } catch (error) {\n        console.log(error);\n    } finally {\n        \/\/ Close the browser.\n        await driver.quit();\n\n        \/\/ If the test was aborted before eyes.close was called, ends the test as aborted.\n        await eyes.abort();\n    }\n})();<\/code><\/pre>\n\n\n\n<p>The test script starts by importing the <a href=\"https:\/\/www.npmjs.com\/package\/selenium-webdriver\">selenium-webdriver<\/a> NPM package.<\/p>\n\n\n\n<p>It imports a bunch of objects from the <a href=\"https:\/\/www.npmjs.com\/package\/@applitools\/eyes-selenium\">@applitools\/eyes-selenium<\/a> NPM package.<\/p>\n\n\n\n<p>It constructs a <a href=\"https:\/\/help.applitools.com\/hc\/en-us\/articles\/360006914772-Batching\">BatchInfo<\/a> object used by Applitools API.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const batchInfo = new BatchInfo(\"AWS Device Farm\");\nbatchInfo.id = process.env.BATCH_ID\nbatchInfo.setSequenceName('AWS Device Farm Batches');<\/pre>\n\n\n\n<p>It then creates the <strong>Eyes<\/strong> object that we will use to interact with the Applitools API.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ Initialize the eyes SDK<br>let eyes = new Eyes();<br>eyes.setApiKey(process.env.APPLITOOLS_API_KEY);<br>eyes.setLogHandler(new FileLogHandler(true));<br>eyes.setForceFullPageScreenshot(true)<br>eyes.setStitchMode(StitchMode.CSS)<br>eyes.setHideScrollbars(true)<br>eyes.setBatch(batchInfo);<\/pre>\n\n\n\n<p>It\u2019s so important to set the Applitools API key at this stage. Otherwise, you won\u2019t be able to run this test. The code above also directs the Applitools API logs to a File located at the root of the project under the name of <strong>eyes.log<\/strong>.<\/p>\n\n\n\n<p>Next, we define the <strong>device capabilities <\/strong>that we are going to send to Appium.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const capabilities = {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;platformName: \"Android\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deviceName: \"Android Emulator\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;automationName: \"UiAutomator2\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;browserName: 'Chrome',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;waitforTimeout: 30000,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;commandTimeout: 30000,<br>&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;if (process.env.APPIUM_ENV === \"Local\") {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;capabilities[\"avd\"] = 'Pixel_XL_API_29';<br>&nbsp;&nbsp;&nbsp;&nbsp;}<\/pre>\n\n\n\n<p>We are using an Android emulator to run our test script over a Chrome browser with the help of the <strong>UIAutomator 2<\/strong> library.<\/p>\n\n\n\n<p>We need to set the <strong>avd<\/strong> capability only when running this test script locally. For this property, grab the AVD ID of the Android Device Emulator we set above.<\/p>\n\n\n\n<p>Now, we create and build a new <strong>WebDriver<\/strong> object by specifying the Appium Server local URL and the device capabilities as:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const LOCAL_APPIUM = \"http:\/\/127.0.0.1:4723\/wd\/hub\";<br>let driver = new webdriver<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Builder()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.usingServer(LOCAL_APPIUM)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.withCapabilities(capabilities)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.build();<\/pre>\n\n\n\n<p>Appium is configured to listen on <strong>Port 4723<\/strong> under the path of <strong>\/wd\/hub<\/strong>.<\/p>\n\n\n\n<p>The rest of the script is usual Applitools business. In brief, the script:<\/p>\n\n\n\n<ul>\n<li>Opens a new Applitools test session<\/li>\n\n\n\n<li>Sends a command to navigate the browser to <a href=\"https:\/\/us.vuejs.org\/\">https:\/\/us.vuejs.org\/<\/a><\/li>\n\n\n\n<li>Grabs the page title and displays it on screen.<\/li>\n\n\n\n<li>Clicks the Burger Button to expand the menu on a Mobile device.<\/li>\n\n\n\n<li>Finds the <strong>Location<\/strong> section on the page.<\/li>\n\n\n\n<li>Finally, it prints the <strong>H2<\/strong> text of the Location section.<\/li>\n<\/ul>\n\n\n\n<p>Notice that the script asserts two Eyes SDK Snapshots. The first captures the home page of the website, while the second captures the Location section.<\/p>\n\n\n\n<p>Finally, some important cleanup is happening to close the WebDriver and Eyes SDK sessions.<\/p>\n\n\n\n<p>Open the <strong>package.json<\/strong> file, and locate the two scripts there:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\"appium\": \"appium --chromedriver-executable \/usr\/local\/bin\/chromedriver --log .\/appium.log\",<br>\"test\": \"node appium.js\"<\/pre>\n\n\n\n<p>The first runs and starts the Appium Server, and the second to run the test script.<\/p>\n\n\n\n<p>Let\u2019s first run the Appium server by issuing this command:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm run-script appium<\/pre>\n\n\n\n<p>Then, once Appium is running, let\u2019s run the test script by issuing this command:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm run-script test<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-verify-test-results-on-applitools-test-manager\">Verify Test Results on Applitools Test Manager<\/h3>\n\n\n\n<p>Login to the Applitools Test Manager located at: <a href=\"https:\/\/applitools.com\/users\/login\">https:\/\/applitools.com\/users\/login<\/a><\/p>\n\n\n\n<p>You will see the following test results:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_16-1024x690.png\" alt=\"\" class=\"wp-image-53336\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_16-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_16-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_16-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_16-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_16.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The two snapshots have been recorded!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-run-the-visual-ui-test-script-on-aws-device-farm\">Run the Visual UI Test Script on AWS Device Farm<\/h3>\n\n\n\n<p>Now that the test runs locally, let\u2019s run it on AWS Device Farm. Start by creating a new account on Amazon Web Service website.<\/p>\n\n\n\n<p>Login to your AWS account on this page: <a href=\"https:\/\/console.aws.amazon.com\/devicefarm\">https:\/\/console.aws.amazon.com\/devicefarm<\/a><\/p>\n\n\n\n<p>Create a new project by following the steps below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_17-1024x690.png\" alt=\"\" class=\"wp-image-53337\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_17-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_17-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_17-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_17-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_17.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>Select the <strong>Mobile Device Project<\/strong> and name your project <strong>Appium.<\/strong><\/li>\n\n\n\n<li>Click the <strong>Create project<\/strong> button.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_18-1024x690.png\" alt=\"\" class=\"wp-image-53338\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_18-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_18-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_18-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_18-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_18.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>Locate and click the <strong>+ Create a new run<\/strong> button.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_19-1024x690.png\" alt=\"\" class=\"wp-image-53339\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_19-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_19-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_19-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_19-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_19.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>Select the <strong>HTML5<\/strong> option since we are testing a Web Page on a mobile device.&nbsp;<\/li>\n\n\n\n<li>Assign your test run a name.&nbsp;<\/li>\n\n\n\n<li>Click the <strong>Next step<\/strong> button.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_20-1024x690.png\" alt=\"\" class=\"wp-image-53340\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_20-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_20-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_20-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_20-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_20.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>Select the <strong>Appium Node.js<\/strong> test runner<\/li>\n\n\n\n<li>Upload your tests packaged in a zip file.<\/li>\n<\/ul>\n\n\n\n<p>Let\u2019s package our app in a zip file in order to upload it at this step.<\/p>\n\n\n\n<p>Switch back to the code editor, open a command window, and run the following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm install<\/pre>\n\n\n\n<p>This command is essential to make sure all the NPM package dependencies for this app are installed.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm install -g npm-bundle<\/pre>\n\n\n\n<p>The command above installs the <a href=\"https:\/\/www.npmjs.com\/package\/npm-bundle\">npm-bundle NPM package<\/a> globally on your machine.<\/p>\n\n\n\n<p>Then, run the command to package and bundle your app:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm-bundle<\/pre>\n\n\n\n<p>The command bundles and packages your app files, and folders, including the <strong>node_modules<\/strong> folder.<\/p>\n\n\n\n<p>The output of this step creates the file with the <strong>.tgz extension<\/strong>.<\/p>\n\n\n\n<p>The final step before uploading is to compress the file by running the command:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">zip -r appium-aws.zip *.tgz&nbsp;<\/pre>\n\n\n\n<p>Name the file whatever you wish.<\/p>\n\n\n\n<p>Now you can upload the<strong> .zip <\/strong>file to AWS Device Farm.<\/p>\n\n\n\n<p>Once the file uploads, scroll down the page to edit the <strong>.yaml<\/strong> file of this test run like so:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_21-1024x690.png\" alt=\"\" class=\"wp-image-53341\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_21-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_21-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_21-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_21-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_21.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>Make sure you insert your Applitools API Key as shown in the diagram.<\/li>\n\n\n\n<li>Add the <strong>node appium.js<\/strong> command to run your test script.<\/li>\n\n\n\n<li>Click the <strong>Save Testspec<\/strong> file.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_22-1024x690.png\" alt=\"\" class=\"wp-image-53342\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_22-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_22-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_22-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_22-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_22.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>You can name it anything you want.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_23-1024x690.png\" alt=\"\" class=\"wp-image-53343\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_23-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_23-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_23-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_23-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_23.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>It\u2019s time to select the devices that you want to run the test script against. I will pick up a customized list of devices. Therefore, click the <strong>Create a new device pool<\/strong> button.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_24-1024x690.png\" alt=\"\" class=\"wp-image-53344\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_24-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_24-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_24-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_24-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_24.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>Give this new pool a name.<\/li>\n\n\n\n<li>Pick up the selected Android Devices. You may select others too.<\/li>\n\n\n\n<li>Click the <strong>Save device pool<\/strong> button.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_25-1024x690.png\" alt=\"\" class=\"wp-image-53345\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_25-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_25-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_25-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_25-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_25.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>Now, you can see the new device pool selected with the devices listed.&nbsp;<\/li>\n\n\n\n<li>Click the <strong>Next step<\/strong> button.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_26-1024x690.png\" alt=\"\" class=\"wp-image-53346\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_26-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_26-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_26-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_26-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_26.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>Locate and click the <strong>Confirm and start run <\/strong>button.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_27-1024x690.png\" alt=\"\" class=\"wp-image-53347\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_27-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_27-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_27-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_27-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_27.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>The test run starts!<\/li>\n\n\n\n<li>Select the test run listed.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_28-1024x690.png\" alt=\"\" class=\"wp-image-53348\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_28-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_28-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_28-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_28-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_28.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>You can watch the progress on both devices as the test is running. Usually, this step takes a bit of time to run and complete.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_29-1024x690.png\" alt=\"\" class=\"wp-image-53349\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_29-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_29-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_29-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_29-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_29.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul>\n<li>Finally, the results are displayed clearly, and in our case, all the green indicates a pass.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-verify-test-results-on-applitools-test-manager-0\">Verify Test Results on Applitools Test Manager<\/h3>\n\n\n\n<p>Switch back to the Applitools Test Manager, and verify the results of this second run via AWS Device Farm.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_30-1024x690.png\" alt=\"\" class=\"wp-image-53350\" srcset=\"https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_30-1024x690.png 1024w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_30-300x202.png 300w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_30-768x517.png 768w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_30-1536x1035.png 1536w, https:\/\/applitools.com\/wp-content\/uploads\/2023\/12\/amazon_visual_testing_30.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>As expected, we get exactly the same results as running the test script locally.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n\n\n\n<p>Given the massive integrations that Applitools offers with its rich SDKs, we saw how easily and quickly we can run our Visual UI tests in the cloud using the AWS Device Farm service. This service, and similar services, enrich the Visual regression testing ecosystem, and make perfect sense when performing them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-for-more-information\">For More Information<\/h2>\n\n\n\n<ul>\n<li><a href=\"https:\/\/applitools.com\/request-demo\">Request an Applitools Demo<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/applitools.com\/free\">Sign up for a free Applitool account<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/applitools.com\/blog\/progressive-web-apps\/\">Progressive Web Apps: Building Compelling Apps with the Latest Mobile Web Technology<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/applitools.com\/blog\/learning-appium-visual-tau\/\">Learning Appium Visual Testing on TAU<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/applitools.com\/blog\/cypress-cross-browser-testing\/\">Cross-browser Testing With Cypress.io<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/applitools.com\/blog\/visual-ui-speeds-devops\/\">How Visual UI Testing can speed up DevOps flow<\/a><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Visual UI testing is more than just testing your app on Desktop browsers and Mobile emulators. In fact, you can do more with Visual UI testing to run your tests&#8230;<\/p>\n","protected":false},"author":29,"featured_media":19784,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10004],"tags":[15132,10015,10021,15131,12830,10084,10085,12783,10103,12688,12690,10821],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Visual Testing with Applitools, Appium, and Amazon AWS Device Farm - Automated Visual Testing | Applitools<\/title>\n<meta name=\"description\" content=\"Appium helps you test mobile devices. AWS Device Farm lets you run across multiple devices. Applitools simplifies testing by comparing visual results.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Visual Testing with Applitools, Appium, and Amazon AWS Device Farm\" \/>\n<meta property=\"og:description\" content=\"Visual UI testing is more than just testing your app on Desktop browsers and Mobile emulators. In fact, you can do more with Visual UI testing to run your\" \/>\n<meta property=\"og:url\" content=\"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/\" \/>\n<meta property=\"og:site_name\" content=\"Automated Visual Testing | Applitools\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-18T17:28:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-01T18:44:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/applitools.com\/wp-content\/uploads\/2020\/06\/Screen-Shot-2020-06-17-at-2.48.10-PM-e1592430891378.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1689\" \/>\n\t<meta property=\"og:image:height\" content=\"1079\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Bilal Haidar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bilal Haidar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/\"},\"author\":{\"name\":\"Bilal Haidar\",\"@id\":\"https:\/\/applitools.com\/#\/schema\/person\/4f8336f340b4dfed149b200e31c72f71\"},\"headline\":\"Visual Testing with Applitools, Appium, and Amazon AWS Device Farm\",\"datePublished\":\"2020-06-18T17:28:18+00:00\",\"dateModified\":\"2023-12-01T18:44:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/\"},\"wordCount\":3009,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/applitools.com\/#organization\"},\"keywords\":[\"Amazon\",\"Android\",\"Appium\",\"AWS\",\"Code Snippets\",\"JAVA\",\"Javascript\",\"Mobile\",\"Mobile App Testing\",\"Technical Leaders\",\"Test Engineers\",\"Tutorial\"],\"articleSection\":[\"Advanced Topics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/\",\"url\":\"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/\",\"name\":\"Visual Testing with Applitools, Appium, and Amazon AWS Device Farm - Automated Visual Testing | Applitools\",\"isPartOf\":{\"@id\":\"https:\/\/applitools.com\/#website\"},\"datePublished\":\"2020-06-18T17:28:18+00:00\",\"dateModified\":\"2023-12-01T18:44:44+00:00\",\"description\":\"Appium helps you test mobile devices. AWS Device Farm lets you run across multiple devices. Applitools simplifies testing by comparing visual results.\",\"breadcrumb\":{\"@id\":\"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/applitools.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Advanced Topics\",\"item\":\"https:\/\/applitools.com\/blog\/category\/advanced-topics\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Visual Testing with Applitools, Appium, and Amazon AWS Device Farm\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/applitools.com\/#website\",\"url\":\"https:\/\/applitools.com\/\",\"name\":\"Automated Visual Testing | Applitools\",\"description\":\"Applitools delivers the next generation of test automation powered by AI assisted computer vision technology known as Visual AI.\",\"publisher\":{\"@id\":\"https:\/\/applitools.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/applitools.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/applitools.com\/#organization\",\"name\":\"Applitools\",\"url\":\"https:\/\/applitools.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/applitools.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ewig5qf9cgn.exactdn.com\/wp-content\/uploads\/2020\/03\/applitools.png?strip=all&lossy=1&ssl=1\",\"contentUrl\":\"https:\/\/ewig5qf9cgn.exactdn.com\/wp-content\/uploads\/2020\/03\/applitools.png?strip=all&lossy=1&ssl=1\",\"width\":156,\"height\":28,\"caption\":\"Applitools\"},\"image\":{\"@id\":\"https:\/\/applitools.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/applitools.com\/#\/schema\/person\/4f8336f340b4dfed149b200e31c72f71\",\"name\":\"Bilal Haidar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/applitools.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/045bb3a1ee83617d590e48584226732e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/045bb3a1ee83617d590e48584226732e?s=96&d=mm&r=g\",\"caption\":\"Bilal Haidar\"},\"url\":\"https:\/\/applitools.com\/blog\/author\/bilalhaidar\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Visual Testing with Applitools, Appium, and Amazon AWS Device Farm - Automated Visual Testing | Applitools","description":"Appium helps you test mobile devices. AWS Device Farm lets you run across multiple devices. Applitools simplifies testing by comparing visual results.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/","og_locale":"en_US","og_type":"article","og_title":"Visual Testing with Applitools, Appium, and Amazon AWS Device Farm","og_description":"Visual UI testing is more than just testing your app on Desktop browsers and Mobile emulators. In fact, you can do more with Visual UI testing to run your","og_url":"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/","og_site_name":"Automated Visual Testing | Applitools","article_published_time":"2020-06-18T17:28:18+00:00","article_modified_time":"2023-12-01T18:44:44+00:00","og_image":[{"width":1689,"height":1079,"url":"https:\/\/applitools.com\/wp-content\/uploads\/2020\/06\/Screen-Shot-2020-06-17-at-2.48.10-PM-e1592430891378.png","type":"image\/png"}],"author":"Bilal Haidar","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bilal Haidar","Est. reading time":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/#article","isPartOf":{"@id":"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/"},"author":{"name":"Bilal Haidar","@id":"https:\/\/applitools.com\/#\/schema\/person\/4f8336f340b4dfed149b200e31c72f71"},"headline":"Visual Testing with Applitools, Appium, and Amazon AWS Device Farm","datePublished":"2020-06-18T17:28:18+00:00","dateModified":"2023-12-01T18:44:44+00:00","mainEntityOfPage":{"@id":"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/"},"wordCount":3009,"commentCount":0,"publisher":{"@id":"https:\/\/applitools.com\/#organization"},"keywords":["Amazon","Android","Appium","AWS","Code Snippets","JAVA","Javascript","Mobile","Mobile App Testing","Technical Leaders","Test Engineers","Tutorial"],"articleSection":["Advanced Topics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/","url":"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/","name":"Visual Testing with Applitools, Appium, and Amazon AWS Device Farm - Automated Visual Testing | Applitools","isPartOf":{"@id":"https:\/\/applitools.com\/#website"},"datePublished":"2020-06-18T17:28:18+00:00","dateModified":"2023-12-01T18:44:44+00:00","description":"Appium helps you test mobile devices. AWS Device Farm lets you run across multiple devices. Applitools simplifies testing by comparing visual results.","breadcrumb":{"@id":"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/applitools.com\/blog\/visual-testing-appium-amazon\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/applitools.com\/"},{"@type":"ListItem","position":2,"name":"Advanced Topics","item":"https:\/\/applitools.com\/blog\/category\/advanced-topics\/"},{"@type":"ListItem","position":3,"name":"Visual Testing with Applitools, Appium, and Amazon AWS Device Farm"}]},{"@type":"WebSite","@id":"https:\/\/applitools.com\/#website","url":"https:\/\/applitools.com\/","name":"Automated Visual Testing | Applitools","description":"Applitools delivers the next generation of test automation powered by AI assisted computer vision technology known as Visual AI.","publisher":{"@id":"https:\/\/applitools.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/applitools.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/applitools.com\/#organization","name":"Applitools","url":"https:\/\/applitools.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/applitools.com\/#\/schema\/logo\/image\/","url":"https:\/\/ewig5qf9cgn.exactdn.com\/wp-content\/uploads\/2020\/03\/applitools.png?strip=all&lossy=1&ssl=1","contentUrl":"https:\/\/ewig5qf9cgn.exactdn.com\/wp-content\/uploads\/2020\/03\/applitools.png?strip=all&lossy=1&ssl=1","width":156,"height":28,"caption":"Applitools"},"image":{"@id":"https:\/\/applitools.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/applitools.com\/#\/schema\/person\/4f8336f340b4dfed149b200e31c72f71","name":"Bilal Haidar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/applitools.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/045bb3a1ee83617d590e48584226732e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/045bb3a1ee83617d590e48584226732e?s=96&d=mm&r=g","caption":"Bilal Haidar"},"url":"https:\/\/applitools.com\/blog\/author\/bilalhaidar\/"}]}},"_links":{"self":[{"href":"https:\/\/applitools.com\/wp-json\/wp\/v2\/posts\/19734"}],"collection":[{"href":"https:\/\/applitools.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/applitools.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/applitools.com\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/applitools.com\/wp-json\/wp\/v2\/comments?post=19734"}],"version-history":[{"count":12,"href":"https:\/\/applitools.com\/wp-json\/wp\/v2\/posts\/19734\/revisions"}],"predecessor-version":[{"id":53351,"href":"https:\/\/applitools.com\/wp-json\/wp\/v2\/posts\/19734\/revisions\/53351"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/applitools.com\/wp-json\/wp\/v2\/media\/19784"}],"wp:attachment":[{"href":"https:\/\/applitools.com\/wp-json\/wp\/v2\/media?parent=19734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/applitools.com\/wp-json\/wp\/v2\/categories?post=19734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/applitools.com\/wp-json\/wp\/v2\/tags?post=19734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}