<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by &quot;Appiumguide&quot; by Ramesh Kodumuru on Medium]]></title>
        <description><![CDATA[Stories by &quot;Appiumguide&quot; by Ramesh Kodumuru on Medium]]></description>
        <link>https://medium.com/@appiumguide?source=rss-d1fc7cd725bd------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*Egv3_rixRvfjmXeOBrmMaA.jpeg</url>
            <title>Stories by &amp;quot;Appiumguide&amp;quot; by Ramesh Kodumuru on Medium</title>
            <link>https://medium.com/@appiumguide?source=rss-d1fc7cd725bd------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Mon, 18 May 2026 10:16:25 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@appiumguide/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[#212. (Appium 3)-What is Appium 3? Complete Overview & Key Changes]]></title>
            <link>https://medium.com/@appiumguide/212-appium-3-what-is-appium-3-complete-overview-key-changes-a78f3244f00c?source=rss-d1fc7cd725bd------2</link>
            <guid isPermaLink="false">https://medium.com/p/a78f3244f00c</guid>
            <category><![CDATA[appium-mobile]]></category>
            <category><![CDATA[appium-training]]></category>
            <category><![CDATA[appium-inspector]]></category>
            <category><![CDATA[appium]]></category>
            <category><![CDATA[appium-testing]]></category>
            <dc:creator><![CDATA["Appiumguide" by Ramesh Kodumuru]]></dc:creator>
            <pubDate>Thu, 12 Mar 2026 15:55:36 GMT</pubDate>
            <atom:updated>2026-03-12T16:02:09.274Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3Q0uxRUZXsiEuRtQrLBzfw.png" /></figure><p><strong>Get a step-by-step walkthrough in the video below!</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F2OnDxB-BFtY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D2OnDxB-BFtY&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F2OnDxB-BFtY%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/fc6881464abcae5c422c9892bb57fa8f/href">https://medium.com/media/fc6881464abcae5c422c9892bb57fa8f/href</a></iframe><p>This article provides complete details on “How to Migrate from Appium 2.x to Appium 3”</p><p><strong>As a part of this video:</strong></p><p>1.<strong>Key Architectural Changes in Appium 3</strong></p><p>2.<strong>Important Breaking Changes</strong></p><p>3.<strong>How to Migrate/Upgrade from Appium 2.x.x à Appium 3.x</strong></p><p>4.<strong>Compare Appium2 Vs Appium3</strong></p><p>Article inprogess………………….!</p><blockquote><strong>Architecture diagram (Appium 2 vs Appium 3):</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LcyJBQP8sre9sYHztSyHQA.png" /></figure><p><strong>GitHub Link:</strong></p><p><a href="https://github.com/AppiumGuide/AppiumGuide">GitHub - AppiumGuide/AppiumGuide</a></p><p><strong>🎬 Explore More! Watch My Latest Videos on YouTube!</strong></p><p><a href="https://www.youtube.com/@AppiumGuide/playlists">AppiumGuide</a></p><p><strong>Visit My Official Blog:</strong></p><p><a href="https://appiumguide-by-kodumururamesh.blogspot.com/">Home-Index Page</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a78f3244f00c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[#211. (Appium 3)-How to Migrate from Appium 2.x to Appium 3 — Complete Step-by-Step Guide]]></title>
            <link>https://medium.com/@appiumguide/211-appium-3-how-to-migrate-from-appium-2-x-to-appium-3-complete-step-by-step-guide-06538b8ebc95?source=rss-d1fc7cd725bd------2</link>
            <guid isPermaLink="false">https://medium.com/p/06538b8ebc95</guid>
            <category><![CDATA[appium-inspector]]></category>
            <category><![CDATA[appium-training]]></category>
            <category><![CDATA[appium-mobile]]></category>
            <category><![CDATA[appium]]></category>
            <category><![CDATA[appium-testing]]></category>
            <dc:creator><![CDATA["Appiumguide" by Ramesh Kodumuru]]></dc:creator>
            <pubDate>Thu, 12 Mar 2026 13:33:08 GMT</pubDate>
            <atom:updated>2026-03-12T13:33:08.865Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HSP7lNE1MlZpGIIuhVnyew.png" /></figure><p><strong>Get a step-by-step walkthrough in the video below!</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FPqgv_JxAqeM%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DPqgv_JxAqeM&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FPqgv_JxAqeM%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/1b07ddcbd54cf6b660dd489257d876ed/href">https://medium.com/media/1b07ddcbd54cf6b660dd489257d876ed/href</a></iframe><p>This article provides complete details on “How to Migrate from Appium 2.x to Appium 3”</p><p>Article inprogess………………….!</p><p><strong>GitHub Link:</strong></p><p><a href="https://github.com/AppiumGuide/AppiumGuide">GitHub - AppiumGuide/AppiumGuide</a></p><p><strong>🎬 Explore More! Watch My Latest Videos on YouTube!</strong></p><p><a href="https://www.youtube.com/@AppiumGuide/playlists">AppiumGuide</a></p><p><strong>Visit My Official Blog:</strong></p><p><a href="https://appiumguide-by-kodumururamesh.blogspot.com/">Home-Index Page</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=06538b8ebc95" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[#210. [appium-device-farm-17] — Step-by-Step Details: How to Choose the Right Platform to Run…]]></title>
            <link>https://medium.com/@appiumguide/210-appium-device-farm-17-step-by-step-details-how-to-choose-the-right-platform-to-run-f80b0e1e7c0a?source=rss-d1fc7cd725bd------2</link>
            <guid isPermaLink="false">https://medium.com/p/f80b0e1e7c0a</guid>
            <category><![CDATA[appium-inspector]]></category>
            <category><![CDATA[appium-testing]]></category>
            <category><![CDATA[appium-mobile]]></category>
            <category><![CDATA[appium-training]]></category>
            <category><![CDATA[appium]]></category>
            <dc:creator><![CDATA["Appiumguide" by Ramesh Kodumuru]]></dc:creator>
            <pubDate>Fri, 15 Aug 2025 12:32:06 GMT</pubDate>
            <atom:updated>2025-08-15T12:32:06.292Z</atom:updated>
            <content:encoded><![CDATA[<h3>#210. [appium-device-farm-17] — Step-by-Step Details: How to Choose the Right Platform to Run Tests(platforms — ios/andriod/both)</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*waoF9nbQ8PsKAjfjd9gOyw.png" /></figure><p><strong>Get a step-by-step walkthrough in the video below!</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FN0-6dn3Hv68%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DN0-6dn3Hv68&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FN0-6dn3Hv68%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/68d112b5ef397a55ced68259cbb53257/href">https://medium.com/media/68d112b5ef397a55ced68259cbb53257/href</a></iframe><p><strong>GitHub Link:</strong></p><p><a href="https://github.com/AppiumGuide/AppiumGuide">GitHub - AppiumGuide/AppiumGuide</a></p><p><strong>🎬 Explore More! Watch My Latest Videos on YouTube!</strong></p><p><a href="https://www.youtube.com/@AppiumGuide/playlists">AppiumGuide</a></p><p><strong>Visit My Official Blog:</strong></p><p><a href="https://appiumguide-by-kodumururamesh.blogspot.com/">Home-Index Page</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f80b0e1e7c0a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[#209. [appium-device-farm-16] — Step-by-Step Details: How to Create & Configure “Tags” in “Appium…]]></title>
            <link>https://medium.com/@appiumguide/209-appium-device-farm-16-step-by-step-details-how-to-create-configure-tags-in-appium-a33ce77894e4?source=rss-d1fc7cd725bd------2</link>
            <guid isPermaLink="false">https://medium.com/p/a33ce77894e4</guid>
            <category><![CDATA[appium-inspector]]></category>
            <category><![CDATA[appium-mobile]]></category>
            <category><![CDATA[appium-training]]></category>
            <category><![CDATA[appium]]></category>
            <category><![CDATA[appium-testing]]></category>
            <dc:creator><![CDATA["Appiumguide" by Ramesh Kodumuru]]></dc:creator>
            <pubDate>Thu, 31 Jul 2025 17:23:30 GMT</pubDate>
            <atom:updated>2025-07-31T17:23:30.222Z</atom:updated>
            <content:encoded><![CDATA[<h3>#209. [appium-device-farm-16] — <strong><em>Step-by-Step Details: How to Create &amp; Configure “Tags” in “Appium Device Farm”</em></strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yPpb-YBIvlLol_RcAp_kXQ.png" /></figure><p><strong>Get a step-by-step walkthrough in the video below!</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fl73tVEI7lGQ%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dl73tVEI7lGQ&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fl73tVEI7lGQ%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/84e77a1359497e714538741da2a30d49/href">https://medium.com/media/84e77a1359497e714538741da2a30d49/href</a></iframe><p><strong>GitHub Link:</strong></p><p><a href="https://github.com/AppiumGuide/AppiumGuide">GitHub - AppiumGuide/AppiumGuide</a></p><p><strong>🎬 Explore More! Watch My Latest Videos on YouTube!</strong></p><p><a href="https://www.youtube.com/@AppiumGuide/playlists">AppiumGuide</a></p><p><strong>Visit My Official Blog:</strong></p><p><a href="https://appiumguide-by-kodumururamesh.blogspot.com/">Home-Index Page</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a33ce77894e4" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[#208. Architecture of the Appium Framework]]></title>
            <link>https://medium.com/@appiumguide/208-architecture-of-the-appium-framework-3dccba610374?source=rss-d1fc7cd725bd------2</link>
            <guid isPermaLink="false">https://medium.com/p/3dccba610374</guid>
            <category><![CDATA[appium-testing]]></category>
            <category><![CDATA[appium]]></category>
            <category><![CDATA[appium-inspector]]></category>
            <category><![CDATA[appium-mobile]]></category>
            <category><![CDATA[appium-training]]></category>
            <dc:creator><![CDATA["Appiumguide" by Ramesh Kodumuru]]></dc:creator>
            <pubDate>Thu, 31 Jul 2025 06:27:17 GMT</pubDate>
            <atom:updated>2025-07-31T06:28:54.801Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/853/1*QnynvIOQsyabksiPD7jlyQ.gif" /></figure><p><strong>Get a step-by-step walkthrough in the video below!</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FJ7VxmBVCf2k%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DJ7VxmBVCf2k&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FJ7VxmBVCf2k%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/085bf715e3e08491693b61796c2abe7f/href">https://medium.com/media/085bf715e3e08491693b61796c2abe7f/href</a></iframe><p>Appium is a powerful open-source automation framework used for testing mobile applications across <strong>iOS, Android, and Windows</strong> platforms. Built on a <strong>client-server architecture</strong>, Appium allows testers to write test scripts in their preferred language and execute them on multiple devices using a single, unified API.</p><p>This article explores the <strong>core architecture</strong> of Appium and how it powers cross-platform mobile automation.</p><h3>📑 Table of Contents</h3><ol><li><strong>Why Use Appium Framework?</strong></li><li><strong>Key Use Cases of Appium</strong></li><li><strong>Appium on Android</strong></li><li><strong>Appium on iOS</strong></li><li><strong>How Does Appium Work?</strong></li><li><strong>Advantages of Appium</strong></li><li><strong>Limitations of Appium</strong></li><li><strong>Conclusion</strong></li></ol><h3>Why Use Appium Framework?</h3><p>Mobile testing tools are essential to ensure mobile apps are reliable, user-friendly, and bug-free. While several tools exist (e.g., <strong>Kobiton</strong>, <strong>Robotium</strong>, <strong>TestComplete</strong>), <strong>Appium stands out</strong> due to its flexibility and cross-platform capabilities:</p><ul><li><strong>Multi-language Support:</strong> Write tests in Java, Python, Ruby, C#, or JavaScript.</li><li><strong>Cross-platform Testing:</strong> Same API for Android, iOS, and Windows.</li><li><strong>No App Code Modification:</strong> Test native and hybrid apps without altering code.</li><li><strong>Open Source &amp; Free:</strong> No licensing fees, with a vibrant community.</li><li><strong>Flexible Integrations:</strong> Compatible with CI/CD tools and popular frameworks.</li></ul><h3>Key Use Cases of Appium</h3><p>Appium relies on a <strong>client-server model</strong> to execute tests. Here’s how it functions:</p><ul><li>The <strong>Client</strong> sends automation commands.</li><li>The <strong>Appium Server</strong> receives these commands, translates them into device-level actions, and executes them.</li><li><strong>Communication</strong> between the client and server follows the <strong>WebDriver or JSON Wire Protocol</strong>, ensuring smooth execution and feedback loops.</li></ul><blockquote><em>Example: A command to click a button is wrapped in a JSON request by the client, sent to the Appium server, executed on the device, and the result is sent back to the client.</em></blockquote><h3>Appium on Android</h3><p>Appium uses <strong>UIAutomator2</strong> to automate Android apps. Here’s a step-by-step flow:</p><ol><li>The tester writes automation scripts in a supported language.</li><li>These are converted into <strong>JSON format</strong> and sent via HTTP to the <strong>Appium server</strong>.</li><li>The server communicates with the Android device using the <strong>WebDriver protocol</strong>.</li><li>On the device, <strong>Bootstrap.jar</strong> processes commands and executes them using <strong>UI Automator</strong>.</li><li>Execution results are sent back to the server and then to the client.</li></ol><p><strong>Key Features:</strong></p><ul><li>Supports gestures, system-level interactions, and multi-version Android testing.</li><li>Executes real-time validations and UI automation reliably.</li></ul><h3>Appium on iOS</h3><p>Appium interacts with iOS devices using <strong>XCUITest</strong> via the <strong>WebDriverAgent.app</strong>. The process is similar to Android, with some platform-specific nuances:</p><ol><li>Test commands are sent from the client to the server in JSON format.</li><li>Appium communicates with the iOS device using <strong>WebDriver</strong>.</li><li><strong>WebDriverAgent.app</strong> receives and executes commands using <strong>XCUITest</strong>.</li><li>The results are returned to the server, which forwards them to the client.</li></ol><p><strong>Key Features:</strong></p><ul><li>Automates both simulators and real devices.</li><li>Uses Apple’s official automation framework for maximum reliability.</li></ul><h3>How Does Appium Work?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/853/1*QnynvIOQsyabksiPD7jlyQ.gif" /></figure><p>Appium’s architecture revolves around <strong>WebDriver Protocol</strong>, <strong>Client-Server Communication</strong>, and <strong>Session Management</strong>. Here’s a breakdown:</p><h3>WebDriver Protocol</h3><ul><li>Standard for automating user interactions (click, type, swipe).</li><li>Appium exposes APIs that conform to WebDriver specs.</li></ul><h3>Client-Server Communication</h3><ul><li>The <strong>Client</strong> sends commands over HTTP using RESTful APIs.</li><li>The <strong>Appium Server</strong> interprets and executes them on the device/emulator.</li></ul><h3>Appium Session</h3><ul><li>Each test initiates a <strong>session</strong> with defined <strong>desired capabilities</strong>.</li><li>Actions are executed using platform-specific drivers (UIAutomator2/XCUITest).</li></ul><h3>JSON Wire Protocol</h3><ul><li>Defines the <strong>message format</strong> between the client and server.</li><li>Commands (e.g., find element, click) and responses are exchanged in JSON.</li></ul><h3>Advantages of Appium</h3><ul><li><strong>Cross-Platform</strong>: Write once, run anywhere.</li><li><strong>Open Source</strong>: No licensing constraints.</li><li><strong>Flexible Language Support</strong>: Java, Python, JS, Ruby, and more.</li><li><strong>Native &amp; Hybrid App Testing</strong>: No code changes required.</li><li><strong>Real Device, Emulator &amp; Simulator Support</strong>.</li></ul><h3>Limitations of Appium</h3><ul><li><strong>Third-Party Dependencies</strong>: Relies on tools like UIAutomator/XCUITest.</li><li><strong>Slower Execution</strong>: Compared to native frameworks.</li><li><strong>Complex Setup</strong>: Configuration and environment setup can be tricky.</li><li><strong>Brittle Test Scripts</strong>: Frequent maintenance may be required.</li><li><strong>Limited Web App Support</strong>: Primarily built for mobile testing.</li></ul><h3>Conclusion</h3><p>Appium provides a robust and scalable architecture for mobile test automation, allowing seamless testing across platforms using familiar programming languages and standard WebDriver protocols. While it comes with challenges like slower execution and complex setup, its <strong>flexibility</strong>, <strong>cross-platform support</strong>, and <strong>community-driven enhancements</strong> make it a top choice for modern mobile QA teams.</p><p><em>Whether you’re testing a native app or a hybrid solution, Appium’s architecture offers the tools and capabilities needed to ensure your app delivers a seamless user experience.</em></p><p><strong>GitHub Link:</strong></p><p><a href="https://github.com/AppiumGuide/AppiumGuide">GitHub - AppiumGuide/AppiumGuide</a></p><p><strong>🎬 Explore More! Watch My Latest Videos on YouTube!</strong></p><p><a href="https://www.youtube.com/@AppiumGuide/playlists">AppiumGuide</a></p><p><strong>Visit My Official Blog:</strong></p><p><a href="https://appiumguide-by-kodumururamesh.blogspot.com/">Home-Index Page</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3dccba610374" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[#207. [appium-device-farm-15] — Step-by-Step Guide to Connect a ‘Real Device’ with “Appium Device…]]></title>
            <link>https://medium.com/@appiumguide/207-appium-device-farm-15-step-by-step-guide-to-connect-a-real-device-with-appium-device-bcf75a4dcd4f?source=rss-d1fc7cd725bd------2</link>
            <guid isPermaLink="false">https://medium.com/p/bcf75a4dcd4f</guid>
            <category><![CDATA[appium-inspector]]></category>
            <category><![CDATA[appium]]></category>
            <category><![CDATA[appium-training]]></category>
            <category><![CDATA[appium-testing]]></category>
            <category><![CDATA[appium-mobile]]></category>
            <dc:creator><![CDATA["Appiumguide" by Ramesh Kodumuru]]></dc:creator>
            <pubDate>Wed, 30 Jul 2025 03:16:33 GMT</pubDate>
            <atom:updated>2025-07-30T17:56:42.502Z</atom:updated>
            <content:encoded><![CDATA[<h3>#207. [appium-device-farm-15] — Step-by-Step Guide to Connect a ‘Real Device’ with “Appium Device Farm”</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0zTnXF1vclhbxghvBCkXQA.png" /></figure><p><strong>Get a step-by-step walkthrough in the video below!</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FEslF5QZ2AhE%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DEslF5QZ2AhE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FEslF5QZ2AhE%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/c3033b367b6ffdee797fa2fcae7f3544/href">https://medium.com/media/c3033b367b6ffdee797fa2fcae7f3544/href</a></iframe><blockquote><strong>Following Steps will be covered in the Article:</strong><br> — — — — — — — — — — — — — — — — — — — — -</blockquote><p>To connect Real Device(Physical Device):<br> — — — — — — — — — — — — — — — — — — — — —</p><blockquote><strong>Step-1: Connect the Real Device with vysor(optional Step).</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/821/1*2n4CLzXwYzr97eeyOUDSDA.png" /></figure><blockquote><strong>Step-2: Will Go through the required setting in Developer Options.</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/365/1*SlOxfE2GVRs4rr0bNrm1Pg.png" /></figure><blockquote><strong>Step-3: Mirror the Real Device with Android Studio</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UNmVQ0IISeRhKw5aZAnwqg.png" /></figure><h3>Launch Appium Server:<br> — — — — — — — — — — — — -</h3><blockquote><strong>Step-4: Launch Appium Server with Device-Farm</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JklH1XT1Ytyyx03vOPHhnA.png" /></figure><blockquote><strong>Step-5: Try to connect the Real Device.</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LoblJVIaNZ1-Er3730xt2Q.png" /></figure><blockquote><strong>Step-6: check the error messages(if any)</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2xU13jarBqXIiesrbeTX4Q.png" /></figure><h3>Steps to Resolve issue: (Very Important)<br> — — — — — — — — — — — — — — — — — — — —</h3><blockquote><strong>Step-7: Install device-farm.apk</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FlY2p66MsNb4McamGHa0hQ.png" /></figure><blockquote><strong>Step-8: Install stream.apk</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ozAAoGOoVau27Jjqt4WyBw.png" /></figure><blockquote><strong>Step-9: Try to reconnect with Real Device</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*w0B8BeWIz9Xs8UHNiy0pwg.png" /></figure><blockquote><strong>Step-10: Execute Our First Script on the Real Device:</strong></blockquote><pre>package com.appiumguide.devicefarm;<br><br>import org.openqa.selenium.JavascriptExecutor;<br>import org.openqa.selenium.WebElement;<br>import org.openqa.selenium.remote.RemoteWebElement;<br>import org.testng.annotations.AfterClass;<br>import org.testng.annotations.BeforeClass;<br>import org.testng.annotations.Test;<br>import com.google.common.collect.ImmutableMap;<br>import io.appium.java_client.AppiumBy;<br>import io.appium.java_client.android.AndroidDriver;<br>import io.appium.java_client.android.options.UiAutomator2Options;<br>import java.net.*;<br>import java.time.Duration;<br><br>/**<br> * Script Details - &quot;appium-device-farm”- Step-by-Step Guide to Connect a ‘Real Device’ with “Appium Device Farm”<br> * <br> * appium-java-client version: 9.5.0<br> * <br> * @author &#39;Ramesh Kodumuru&#39; for AppiumGuide [appiumguide@gmail.com]<br> */<br><br>public class devicefarm_FirstScriptOnRealDeviceDemo {<br> <br> private AndroidDriver driver;<br> <br> WebElement dragelement,dropelement;<br>  <br> @BeforeClass<br> public void setup() throws MalformedURLException {<br>  UiAutomator2Options cap=new UiAutomator2Options();<br>  cap.setPlatformName(&quot;android&quot;);<br>  cap.setAutomationName(&quot;uiautomator2&quot;);<br>  cap.setUdid(&quot;E6S8MJPFYHEUZDU8&quot;); //UDID of Real Device<br>  <br>       <br>  driver = new AndroidDriver(new URL(&quot;http://127.0.0.1:4723/wd/hub&quot;), cap);<br>  driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));  <br> }<br> <br> @Test<br> public void test1() throws InterruptedException {<br>  <br>  driver.activateApp(&quot;com.wdiodemoapp&quot;);<br>  <br>  Thread.sleep(5000);<br>  <br>  driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().text(\&quot;Drag\&quot;)&quot;)).click();<br>  <br>  <br>  <br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(4)&quot;));<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(10)&quot;));<br>  <br>  int eX=(int)(dropelement.getRect().getX());<br>  int eY=(int)(dropelement.getRect().getY());<br>  <br>  //Perform Drag gesture based on element id, endX &amp; endY co-ordinates<br>  System.out.println(&quot;Perform Drag gesture based on element id, endX &amp; endY co-ordinates&quot;);<br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(&quot;elementId&quot;,((RemoteWebElement) dragelement).getId(),<br>    &quot;endX&quot;,eX,<br>    &quot;endY&quot;,eY));<br>  <br>  Thread.sleep(3000);<br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(7)&quot;));<br>  <br>  int sX=(int)(dragelement.getRect().getX());<br>  int sY=(int)(dragelement.getRect().getY());<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(8)&quot;));<br>  <br>  int eX1=(int)(dropelement.getRect().getX());<br>  int eY1=(int)(dropelement.getRect().getY());<br>  <br>  //Perform Drag gesture based on element id, startX,startY,endX &amp; endY co-ordinates <br>  System.out.println(&quot;Perform Drag gesture based on element id, startX,startY,endX &amp; endY co-ordinates&quot;);<br>  <br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(<br>    &quot;startX&quot;,sX,<br>    &quot;startY&quot;,sY,<br>    &quot;endX&quot;,eX1,<br>    &quot;endY&quot;,eY1));<br>  <br>  Thread.sleep(3000);<br>  <br>  ////Perform Drag gesture based on element id,endX,endY co-ordinates and Speed<br>  <br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(1)&quot;));<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(10)&quot;));<br>  <br>  int eX2=(int)(dropelement.getRect().getX());<br>  int eY2=(int)(dropelement.getRect().getY());<br>  <br>  int speedvalue=(int)(100*2.625);<br>  System.out.println(&quot;Perform Drag gesture based on element id,endX,endY co-ordinates and Speed&quot;);<br>  <br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(&quot;elementId&quot;,((RemoteWebElement) dragelement).getId(),<br>    &quot;endX&quot;,eX2,<br>    &quot;endY&quot;,eY2,<br>    &quot;speed&quot;,speedvalue));<br>  <br>  Thread.sleep(3000);<br>  <br> }  <br>  <br> @AfterClass<br> public void teardown() {<br>  <br>  if(driver!=null) {<br>   driver.quit();<br>   System.out.println(&quot;Test Execution Completed&quot;);<br><br>  }<br>  <br> }<br><br>}<br></pre><p>Observe that user able to connect Real Device with Device-Farm</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*p2ln6RiF1LAg8QvHU5eOUA.png" /></figure><p><strong>GitHub Link:</strong></p><p><a href="https://github.com/AppiumGuide/AppiumGuide">GitHub - AppiumGuide/AppiumGuide</a></p><p><strong>🎬 Explore More! Watch My Latest Videos on YouTube!</strong></p><p><a href="https://www.youtube.com/@AppiumGuide/playlists">AppiumGuide</a></p><p><strong>Visit My Official Blog:</strong></p><p><a href="https://appiumguide-by-kodumururamesh.blogspot.com/">Home-Index Page</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bcf75a4dcd4f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[#206. [appium-device-farm-13] — Complete Details on How to Allocate a ‘build name’ in “Device…]]></title>
            <link>https://medium.com/@appiumguide/206-appium-device-farm-13-complete-details-on-how-to-allocate-a-build-name-in-device-7d4f7322d8e3?source=rss-d1fc7cd725bd------2</link>
            <guid isPermaLink="false">https://medium.com/p/7d4f7322d8e3</guid>
            <category><![CDATA[appium-training]]></category>
            <category><![CDATA[appium-mobile]]></category>
            <category><![CDATA[appium-testing]]></category>
            <category><![CDATA[appium]]></category>
            <category><![CDATA[appium-inspector]]></category>
            <dc:creator><![CDATA["Appiumguide" by Ramesh Kodumuru]]></dc:creator>
            <pubDate>Mon, 28 Jul 2025 14:41:29 GMT</pubDate>
            <atom:updated>2025-07-30T16:47:36.237Z</atom:updated>
            <content:encoded><![CDATA[<h3>#206. [appium-device-farm-13] — Complete Details on How to Allocate a ‘build name’ in “Device Farm” dashboard</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zADz1h_RBGLM2U8bsqcfsg.png" /></figure><p><strong>Get a step-by-step walkthrough in the video below!</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F0hHBQ8EdBvQ%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D0hHBQ8EdBvQ&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F0hHBQ8EdBvQ%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/44d896b28e046ef11badae32cc8ba9d9/href">https://medium.com/media/44d896b28e046ef11badae32cc8ba9d9/href</a></iframe><p>Allocating a <strong>‘Build Name’</strong> in the <strong>Appium Device Farm</strong> dashboard is crucial for organizing, tracking, and debugging multiple test sessions effectively. Each build name acts as a label that groups related test executions, enabling better visibility and reporting.</p><p>In this guide, you’ll learn:</p><ul><li>What a “Build Name” is</li><li>How to configure it via DesiredCapabilities or config file</li><li>How it reflects in the Device Farm dashboard</li></ul><h3>What is a “Build Name”?</h3><p>The df:build is a <strong>tag</strong> that helps you <strong>group test sessions</strong> belonging to the same CI job, feature, release, or sprint. It&#39;s especially useful in dashboards where many sessions run across different teams or purposes.</p><p>Example use cases:</p><ul><li>login-feature-regression</li><li>v1.2.3-smoke-test</li><li>release-candidate-qa</li></ul><h3>How to Allocate a Build Name</h3><blockquote><strong>Method 1: Via Desired Capabilities (Recommended)</strong></blockquote><p>Add the capability df:build to your test script. Here&#39;s how you can configure it in <strong>Java</strong>:</p><pre>UiAutomator2Options cap=new UiAutomator2Options();<br>  cap.setPlatformName(&quot;android&quot;);<br>  cap.setAutomationName(&quot;uiautomator2&quot;);<br>  cap.setDeviceName(&quot;Pixel9&quot;);<br>  <br>  //To allocate build name<br>  <br>  cap.setCapability(&quot;df:build&quot;,&quot;RegressionTest_V2.10&quot;);  <br>  <br>     <br>  driver = new AndroidDriver(new URL(&quot;http://127.0.0.1:4723/wd/hub&quot;), cap);<br>  driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); </pre><pre>// Allocate a custom build name<br> cap.setCapability(&quot;df:build&quot;,&quot;RegressionTest_V2.10&quot;);</pre><p>This will tag your session with “<em>RegressionTest_V2.10</em>&quot; under the <strong>Builds</strong> section in the Device Farm dashboard.</p><blockquote>Method 2: In Configuration File (appium-config.json)</blockquote><p>If you are running tests via the Appium CLI with Device Farm plugin:</p><pre>{<br>  &quot;server&quot;: {<br>    &quot;port&quot;: 4723,<br>    &quot;plugin&quot;: {<br>      &quot;device-farm&quot;: {<br>        &quot;df:build&quot;: &quot;RegressionTest_V2.10&quot;<br>      }<br>    }<br>  }<br>}</pre><h3><strong>Complete Example with Script &amp; Device-farm Screenshot:</strong></h3><blockquote><strong><em>“Complete Code: Optimized and Ready to Use”:</em></strong></blockquote><pre>package com.appiumguide.devicefarm;<br><br>import org.openqa.selenium.JavascriptExecutor;<br>import org.openqa.selenium.WebElement;<br>import org.openqa.selenium.remote.RemoteWebElement;<br>import org.testng.annotations.AfterClass;<br>import org.testng.annotations.BeforeClass;<br>import org.testng.annotations.Test;<br>import com.google.common.collect.ImmutableMap;<br>import io.appium.java_client.AppiumBy;<br>import io.appium.java_client.android.AndroidDriver;<br>import io.appium.java_client.android.options.UiAutomator2Options;<br>import java.net.*;<br>import java.time.Duration;<br><br>/**<br> * Script Details - &quot;appium-device-farm”- Complete Details on How to Allocate a ‘build name’ in “Appium Device Farm” dashboard<br> * <br> * appium-java-client version: 9.5.0<br> * <br> * @author &#39;Ramesh Kodumuru&#39; for AppiumGuide [appiumguide@gmail.com]<br> */<br><br>public class devicefarm_BuildNameDemo {<br> <br> private AndroidDriver driver;<br> <br> WebElement dragelement,dropelement;<br>  <br> @BeforeClass<br> public void setup() throws MalformedURLException {<br>  UiAutomator2Options cap=new UiAutomator2Options();<br>  cap.setPlatformName(&quot;android&quot;);<br>  cap.setAutomationName(&quot;uiautomator2&quot;);<br>  cap.setDeviceName(&quot;Pixel9&quot;);<br>  <br>  //To allocate build name<br>  <br>  cap.setCapability(&quot;df:build&quot;,&quot;RegressionTest_V2.10&quot;);  <br>  <br>     <br>  driver = new AndroidDriver(new URL(&quot;http://127.0.0.1:4723/wd/hub&quot;), cap);<br>  driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));  <br> }<br> <br> @Test<br> public void test1() throws InterruptedException {<br>  <br>  driver.activateApp(&quot;com.wdiodemoapp&quot;);<br>  <br>  Thread.sleep(5000);<br>  <br>  driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().text(\&quot;Drag\&quot;)&quot;)).click();<br>  <br>  <br>  <br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(4)&quot;));<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(10)&quot;));<br>  <br>  int eX=(int)(dropelement.getRect().getX());<br>  int eY=(int)(dropelement.getRect().getY());<br>  <br>  //Perform Drag gesture based on element id, endX &amp; endY co-ordinates<br>  System.out.println(&quot;Perform Drag gesture based on element id, endX &amp; endY co-ordinates&quot;);<br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(&quot;elementId&quot;,((RemoteWebElement) dragelement).getId(),<br>    &quot;endX&quot;,eX,<br>    &quot;endY&quot;,eY));<br>  <br>  Thread.sleep(3000);<br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(7)&quot;));<br>  <br>  int sX=(int)(dragelement.getRect().getX());<br>  int sY=(int)(dragelement.getRect().getY());<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(8)&quot;));<br>  <br>  int eX1=(int)(dropelement.getRect().getX());<br>  int eY1=(int)(dropelement.getRect().getY());<br>  <br>  //Perform Drag gesture based on element id, startX,startY,endX &amp; endY co-ordinates <br>  System.out.println(&quot;Perform Drag gesture based on element id, startX,startY,endX &amp; endY co-ordinates&quot;);<br>  <br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(<br>    &quot;startX&quot;,sX,<br>    &quot;startY&quot;,sY,<br>    &quot;endX&quot;,eX1,<br>    &quot;endY&quot;,eY1));<br>  <br>  Thread.sleep(3000);<br>  <br>  ////Perform Drag gesture based on element id,endX,endY co-ordinates and Speed<br>  <br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(1)&quot;));<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(10)&quot;));<br>  <br>  int eX2=(int)(dropelement.getRect().getX());<br>  int eY2=(int)(dropelement.getRect().getY());<br>  <br>  int speedvalue=(int)(100*2.625);<br>  System.out.println(&quot;Perform Drag gesture based on element id,endX,endY co-ordinates and Speed&quot;);<br>  <br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(&quot;elementId&quot;,((RemoteWebElement) dragelement).getId(),<br>    &quot;endX&quot;,eX2,<br>    &quot;endY&quot;,eY2,<br>    &quot;speed&quot;,speedvalue));<br>  <br>  Thread.sleep(3000);<br>  <br> }  <br>  <br> @AfterClass<br> public void teardown() {<br>  <br>  if(driver!=null) {<br>   driver.quit();<br>   System.out.println(&quot;Test Execution Completed&quot;);<br><br>  }<br>  <br> }<br><br>}</pre><p>This will tag your session with “<em>RegressionTest_V2.10</em>” under the <strong>Builds</strong> section in the Device Farm dashboard.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dXtAn9JL5dbO834vDaqe0g.png" /></figure><p>Observe that in the Device-Farm Dashboard → Under Builds Tab,we able to find Build Name “RegressionTest_V2.10”</p><p><strong>GitHub Link:</strong></p><p><a href="https://github.com/AppiumGuide/AppiumGuide">GitHub - AppiumGuide/AppiumGuide</a></p><p><strong>🎬 Explore More! Watch My Latest Videos on YouTube!</strong></p><p><a href="https://www.youtube.com/@AppiumGuide/playlists">AppiumGuide</a></p><p><strong>Visit My Official Blog:</strong></p><p><a href="https://appiumguide-by-kodumururamesh.blogspot.com/">Home-Index Page</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7d4f7322d8e3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[#205. [appium-device-farm-12] — Complete Details on Enable/Disable “Video Recording” option for…]]></title>
            <link>https://medium.com/@appiumguide/205-appium-device-farm-12-complete-details-on-enable-disable-video-recording-option-for-e1fc1e46194e?source=rss-d1fc7cd725bd------2</link>
            <guid isPermaLink="false">https://medium.com/p/e1fc1e46194e</guid>
            <category><![CDATA[appium-inspector]]></category>
            <category><![CDATA[appium-mobile]]></category>
            <category><![CDATA[appium]]></category>
            <category><![CDATA[appium-testing]]></category>
            <category><![CDATA[appium-training]]></category>
            <dc:creator><![CDATA["Appiumguide" by Ramesh Kodumuru]]></dc:creator>
            <pubDate>Mon, 28 Jul 2025 14:41:09 GMT</pubDate>
            <atom:updated>2025-07-30T16:28:09.157Z</atom:updated>
            <content:encoded><![CDATA[<h3>#205. [appium-device-farm-12] — Complete Details on Enable/Disable “Video Recording” option for the Session</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0AW-HpFbWof1OD6z69Tbyw.png" /></figure><p><strong>Get a step-by-step walkthrough in the video below!</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fp4T1XHg5t4U%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dp4T1XHg5t4U&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fp4T1XHg5t4U%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/9b4347ec88cf0986970270ea41b5a21c/href">https://medium.com/media/9b4347ec88cf0986970270ea41b5a21c/href</a></iframe><p>Appium Device Farm offers a powerful feature set to enhance debugging and monitoring of your test runs. One such feature is <strong>Video Recording</strong> — it allows you to record the screen of the device throughout the session, which is extremely useful for playback and debugging.</p><p>This article provides <strong>complete details</strong> on how to <strong>enable or disable the video recording</strong> feature in <strong>Appium Device Farm</strong> sessions.</p><h3>What is Video Recording in Appium Device Farm?</h3><p>The <strong>video recording feature</strong> captures a <strong>full video</strong> of the test session on the connected device. This can be helpful for:</p><ul><li>Test debugging</li><li>Visual validation</li><li>Reviewing failed test cases</li></ul><p>By default, <strong>video recording may be disabled</strong>, but Appium Device Farm gives you full control over this through session configuration.</p><h3>How to Enable/Disable Video Recording</h3><p>You can control this feature <strong>via capabilities</strong> or <strong>configuration settings</strong>.</p><blockquote><strong><em>Enable/Disable Live Streaming Per Session (via Desired Capabilities)</em></strong></blockquote><p>Appium Device Farm accepts a custom capability:</p><pre>// To enable &amp; disable video recording under appium-device-farm<br>  <br>  //cap.setCapability(&quot;df:recordVideo&quot;, false);  //To disable video recording   ///Default is disabled i.e false<br>  <br>  cap.setCapability(&quot;df:recordVideo&quot;, true);   //To enable video recording<br>  <br>  // To set video recording time limit<br>  <br>  cap.setCapability(&quot;df:videoTimeLimit&quot;, &quot;2400&quot;);  //To specify the video time limit to 4 minutes   //Default Video Time Limit is 1800 seconds (3 Mins)</pre><p><strong>Default Value for Video Recording: Is Always False</strong></p><pre>//Default is disabled i.e false</pre><p><strong>To enable for a specific session:</strong></p><pre>// To enable &amp; disable video recording under appium-device-farm<br>  <br>  cap.setCapability(&quot;df:recordVideo&quot;, true);   //To enable video recording</pre><p><strong>Example:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Z4RDsW5SffR0rkv39CeLVA.png" /></figure><p><strong>To disable for a specific session:</strong></p><pre>//To Disable Video Recording in Device Farm<br>  <br>cap.setCapability(&quot;df:recordVideo&quot;, false);</pre><p>Example:</p><p>Observe that “Video recording not available” message will be displayed under the Builds Tab.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ce31aXJLs5g3EadBdwyIXA.png" /></figure><h4>Java Example:</h4><pre> @BeforeClass<br> public void setup() throws MalformedURLException {<br>  UiAutomator2Options cap=new UiAutomator2Options();<br>  cap.setPlatformName(&quot;android&quot;);<br>  cap.setAutomationName(&quot;uiautomator2&quot;);<br>  cap.setDeviceName(&quot;Pixel9&quot;);<br>  <br>  // To enable &amp; disable video recording under appium-device-farm<br>  <br>  //cap.setCapability(&quot;df:recordVideo&quot;, false);  //To disable video recording   ///Default is disabled i.e false<br>  <br>  cap.setCapability(&quot;df:recordVideo&quot;, true);   //To enable video recording<br>  <br>  // To set video recording time limit<br>  <br>  cap.setCapability(&quot;df:videoTimeLimit&quot;, &quot;2400&quot;);  //To specify the video time limit to 4 minutes   //Default Video Time Limit is 1800 seconds (3 Mins)<br>  <br>     <br>  driver = new AndroidDriver(new URL(&quot;http://127.0.0.1:4723/wd/hub&quot;), cap);<br>  driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));  <br> }</pre><h3>JSON (Static Config)</h3><p>For server config (appium.config.json or programmatic):</p><pre>{<br>  &quot;server&quot;: {<br>    &quot;port&quot;: 4723,<br>    &quot;plugin&quot;: {<br>      &quot;device-farm&quot;: {<br>        &quot;df:recordVideo&quot;: true // or false<br>        &quot;df:videoTimeLimit&quot;: 2400 //Default Video Time Limit is 1800 seconds (3 Mins)<br>      }<br>    }<br>  }<br>}</pre><blockquote><strong><em>Where to View the Record Videos?</em></strong></blockquote><p>When enabled, the Video Record is accessible through the <strong>Device Farm Dashboard UI</strong> in the session window.</p><p>Device-Farm Dashboard →Builds</p><p><strong>Example:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Z4RDsW5SffR0rkv39CeLVA.png" /></figure><p>Click Maximize: To view Recorded Video in full scream</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hNzFbJh2qqNFa5WnwBoYZw.png" /></figure><p>It provides options , when user clicks on the 3 dots.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YX8P5xiFFd5NGPVxFoJVPg.png" /></figure><h3>Troubleshooting Tips</h3><ol><li><strong>Stream not showing up?</strong></li></ol><ul><li>Check FFmpeg path and installation.</li><li>Ensure the device screen is active (not locked).</li></ul><p><strong>2. Stream is blank or lagging?</strong></p><ul><li>Device resolution or encoding issues — try reducing resolution.</li><li>Use wired connections for physical devices (not Wi-Fi only</li></ul><p><strong>3. Can’t find video stream URL?</strong></p><ul><li>Make sure the Appium session is initialized and streaming is enabled at either global or session level.</li></ul><blockquote><strong>“Complete Code: Optimized and Ready to Use”:</strong></blockquote><pre>package com.appiumguide.devicefarm;<br><br>import org.openqa.selenium.JavascriptExecutor;<br>import org.openqa.selenium.WebElement;<br>import org.openqa.selenium.remote.RemoteWebElement;<br>import org.testng.annotations.AfterClass;<br>import org.testng.annotations.BeforeClass;<br>import org.testng.annotations.Test;<br>import com.google.common.collect.ImmutableMap;<br>import io.appium.java_client.AppiumBy;<br>import io.appium.java_client.android.AndroidDriver;<br>import io.appium.java_client.android.options.UiAutomator2Options;<br>import java.net.*;<br>import java.time.Duration;<br><br>/**<br> * Script Details - &quot;appium-device-farm”- Complete Details on Enable/Disable “live video Streaming” for the Session Under “Appium Device Farm”<br> * <br> * appium-java-client version: 9.5.0<br> * <br> * @author &#39;Ramesh Kodumuru&#39; for AppiumGuide [appiumguide@gmail.com]<br> */<br><br>public class devicefarm_VideoRecordingDemo {<br> <br> private AndroidDriver driver;<br> <br> WebElement dragelement,dropelement;<br>  <br> @BeforeClass<br> public void setup() throws MalformedURLException {<br>  UiAutomator2Options cap=new UiAutomator2Options();<br>  cap.setPlatformName(&quot;android&quot;);<br>  cap.setAutomationName(&quot;uiautomator2&quot;);<br>  cap.setDeviceName(&quot;Pixel9&quot;);<br>  <br>  // To enable &amp; disable video recording under appium-device-farm<br>  <br>  //cap.setCapability(&quot;df:recordVideo&quot;, false);  //To disable video recording   ///Default is disabled i.e false<br>  <br>  cap.setCapability(&quot;df:recordVideo&quot;, true);   //To enable video recording<br>  <br>  // To set video recording time limit<br>  <br>  cap.setCapability(&quot;df:videoTimeLimit&quot;, &quot;2400&quot;);  //To specify the video time limit to 4 minutes   //Default Video Time Limit is 1800 seconds (3 Mins)<br>  <br>     <br>  driver = new AndroidDriver(new URL(&quot;http://127.0.0.1:4723/wd/hub&quot;), cap);<br>  driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));  <br> }<br> <br> @Test<br> public void test1() throws InterruptedException {<br>  <br>  driver.activateApp(&quot;com.wdiodemoapp&quot;);<br>  <br>  Thread.sleep(5000);<br>  <br>  driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().text(\&quot;Drag\&quot;)&quot;)).click();<br>  <br>  <br>  <br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(4)&quot;));<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(10)&quot;));<br>  <br>  int eX=(int)(dropelement.getRect().getX());<br>  int eY=(int)(dropelement.getRect().getY());<br>  <br>  //Perform Drag gesture based on element id, endX &amp; endY co-ordinates<br>  System.out.println(&quot;Perform Drag gesture based on element id, endX &amp; endY co-ordinates&quot;);<br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(&quot;elementId&quot;,((RemoteWebElement) dragelement).getId(),<br>    &quot;endX&quot;,eX,<br>    &quot;endY&quot;,eY));<br>  <br>  Thread.sleep(3000);<br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(7)&quot;));<br>  <br>  int sX=(int)(dragelement.getRect().getX());<br>  int sY=(int)(dragelement.getRect().getY());<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(8)&quot;));<br>  <br>  int eX1=(int)(dropelement.getRect().getX());<br>  int eY1=(int)(dropelement.getRect().getY());<br>  <br>  //Perform Drag gesture based on element id, startX,startY,endX &amp; endY co-ordinates <br>  System.out.println(&quot;Perform Drag gesture based on element id, startX,startY,endX &amp; endY co-ordinates&quot;);<br>  <br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(<br>    &quot;startX&quot;,sX,<br>    &quot;startY&quot;,sY,<br>    &quot;endX&quot;,eX1,<br>    &quot;endY&quot;,eY1));<br>  <br>  Thread.sleep(3000);<br>  <br>  ////Perform Drag gesture based on element id,endX,endY co-ordinates and Speed<br>  <br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(1)&quot;));<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(10)&quot;));<br>  <br>  int eX2=(int)(dropelement.getRect().getX());<br>  int eY2=(int)(dropelement.getRect().getY());<br>  <br>  int speedvalue=(int)(100*2.625);<br>  System.out.println(&quot;Perform Drag gesture based on element id,endX,endY co-ordinates and Speed&quot;);<br>  <br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(&quot;elementId&quot;,((RemoteWebElement) dragelement).getId(),<br>    &quot;endX&quot;,eX2,<br>    &quot;endY&quot;,eY2,<br>    &quot;speed&quot;,speedvalue));<br>  <br>  Thread.sleep(3000);<br>  <br> }  <br>  <br> @AfterClass<br> public void teardown() {<br>  <br>  if(driver!=null) {<br>   driver.quit();<br>   System.out.println(&quot;Test Execution Completed&quot;);<br><br>  }<br>  <br> }<br><br>}<br><br></pre><p><strong>GitHub Link:</strong></p><p><a href="https://github.com/AppiumGuide/AppiumGuide">GitHub - AppiumGuide/AppiumGuide</a></p><p><strong>🎬 Explore More! Watch My Latest Videos on YouTube!</strong></p><p><a href="https://www.youtube.com/@AppiumGuide/playlists">AppiumGuide</a></p><p><strong>Visit My Official Blog:</strong></p><p><a href="https://appiumguide-by-kodumururamesh.blogspot.com/">Home-Index Page</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e1fc1e46194e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[#204. [appium-device-farm-11] —Complete Details on -Enable/Disable’ — “live video Streaming” for…]]></title>
            <link>https://medium.com/@appiumguide/204-appium-device-farm-11-complete-details-on-enable-disable-live-video-streaming-for-d6f2a18bf1bc?source=rss-d1fc7cd725bd------2</link>
            <guid isPermaLink="false">https://medium.com/p/d6f2a18bf1bc</guid>
            <category><![CDATA[appium-mobile]]></category>
            <category><![CDATA[appium-testing]]></category>
            <category><![CDATA[appium]]></category>
            <category><![CDATA[appium-inspector]]></category>
            <category><![CDATA[appium-training]]></category>
            <dc:creator><![CDATA["Appiumguide" by Ramesh Kodumuru]]></dc:creator>
            <pubDate>Mon, 28 Jul 2025 14:40:45 GMT</pubDate>
            <atom:updated>2025-07-30T12:05:19.341Z</atom:updated>
            <content:encoded><![CDATA[<h3>#204. [appium-device-farm-11] —Complete Details on -Enable/Disable’ — “live video Streaming” for the Session</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uH99ius-2_FrR9mhOiQF6w.png" /></figure><p><strong>Get a step-by-step walkthrough in the video below!</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F73VO4y55C1g%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D73VO4y55C1g&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F73VO4y55C1g%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/b8a40f835fcef69dc4b63a4c93f7ebbe/href">https://medium.com/media/b8a40f835fcef69dc4b63a4c93f7ebbe/href</a></iframe><p><strong>Appium Device Farm</strong> is a powerful plugin that enables parallel execution across real devices locally or remotely. One of its key features is <strong>Live Video Streaming</strong>, which allows you to watch the test session in real time — a valuable tool for debugging and monitoring.</p><p>In this article, we’ll cover <strong>how to enable or disable Live Video Streaming</strong> for a test session, both globally (via config) and per-session (via capabilities).</p><blockquote><strong>What is Live Video Streaming in Appium Device Farm?</strong></blockquote><p>Live video streaming displays the real-time screen output of the device during test execution. It helps:</p><ul><li>Monitor test execution visually</li><li>Debug test failures interactively</li><li>Showcase test runs in demos or reviews</li></ul><blockquote><strong>Prerequisites</strong></blockquote><p>Before using the live streaming feature:</p><ul><li>You must have installed the <strong>Appium Device Farm plugin</strong></li><li>FFmpeg should be installed and available in your system PATH</li><li>Devices should be connected and discoverable by Appium</li></ul><p><strong>Youtube Video Link To Install “FFmpeg”:</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FfvUnOlFoJjY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DfvUnOlFoJjY&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FfvUnOlFoJjY%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/5ad6672af9c1c42dec4c8b0dbe35e11a/href">https://medium.com/media/5ad6672af9c1c42dec4c8b0dbe35e11a/href</a></iframe><blockquote><strong><em>Start Appium Server with Device-Farm plugin:</em></strong></blockquote><p><strong>Command:</strong></p><pre>appium server -ka 800 --use-plugins=device-farm -pa /wd/hub --plugin-device-farm-platform=android</pre><p><strong>Example:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/788/0*cjAJWoaPIpKkblke.png" /></figure><blockquote><strong>Enable/Disable Live Streaming Per Session (via Desired Capabilities)</strong></blockquote><p>You can also <strong>control streaming at a session level</strong> using the following capability:</p><p><strong>Default Value for Live Streaming: Is Always True</strong></p><pre>//Default value for live video Streaming is true  <br></pre><p><strong>To enable for a specific session:</strong></p><pre>  //To Enable Live video streaming in Device Farm<br>  <br>   cap.setCapability(&quot;df:liveVideo&quot;, true);  //Live Video Streaming is enabled    //Default value for live video Streaming is true</pre><p><strong>Example:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MdHE-TfUpoFd6CNQS7W7qQ.png" /></figure><p>Click Maximize: To view Live Streaming in full scream</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/440/1*cs6iCdmhLQOViOtRY-PfqA.png" /></figure><p><strong>To disable for a specific session:</strong></p><pre> <br>//To Disable live video streaming in Device Farm<br>  <br>cap.setCapability(&quot;df:liveVideo&quot;, false);  <br>  <br>  </pre><p><strong>Java Example:</strong></p><pre>@BeforeClass<br> public void setup() throws MalformedURLException {<br>  UiAutomator2Options cap=new UiAutomator2Options();<br>  cap.setPlatformName(&quot;android&quot;);<br>  cap.setAutomationName(&quot;uiautomator2&quot;);<br>  cap.setDeviceName(&quot;Pixel9&quot;);<br>  <br>  //To Enable &amp; Disable the live video streaming in Device Farm<br>  <br>  cap.setCapability(&quot;df:liveVideo&quot;, false);  //Live Video Streaming is disabled<br>  <br>  //cap.setCapability(&quot;df:liveVideo&quot;, true);  //Live Video Streaming is enabled    //Default value for live video Streaming is true<br>  <br>     <br>  driver = new AndroidDriver(new URL(&quot;http://127.0.0.1:4723/wd/hub&quot;), cap);<br>  driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));  <br> }</pre><blockquote><strong>Enable Live Streaming Globally (via Plugin Config):</strong></blockquote><p>You can <strong>enable/disable live streaming globally</strong> in your Appium server config file.</p><h4>JSON Config Example (appium-config.json)</h4><pre>{<br>  &quot;server&quot;: {<br>    &quot;port&quot;: 4723,<br>    &quot;plugin&quot;: {<br>      &quot;df:liveVideo&quot;: &quot;true&quot;<br>     }<br>  }<br>}</pre><blockquote><strong>Where to View the Stream?</strong></blockquote><p>When enabled, the live video stream is accessible through the <strong>Device Farm Dashboard UI</strong> in the session window. You can monitor the test visually in real time.</p><p>Device-Farm Dashboard →Builds</p><p><strong>Example:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MdHE-TfUpoFd6CNQS7W7qQ.png" /></figure><p>Click Maximize: To view Live Streaming in full scream</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/440/1*cs6iCdmhLQOViOtRY-PfqA.png" /></figure><h3>Troubleshooting Tips</h3><ol><li><strong>Stream not showing up?</strong></li></ol><ul><li>Check FFmpeg path and installation.</li><li>Ensure the device screen is active (not locked).</li></ul><p><strong>2. Stream is blank or lagging?</strong></p><ul><li>Device resolution or encoding issues — try reducing resolution.</li><li>Use wired connections for physical devices (not Wi-Fi only</li></ul><p><strong>3. Can’t find video stream URL?</strong></p><ul><li>Make sure the Appium session is initialized and streaming is enabled at either global or session level.</li></ul><blockquote><strong><em>“Complete Code: Optimized and Ready to Use”:</em></strong></blockquote><pre>package com.appiumguide.devicefarm;<br><br>import org.openqa.selenium.JavascriptExecutor;<br>import org.openqa.selenium.WebElement;<br>import org.openqa.selenium.remote.RemoteWebElement;<br>import org.testng.annotations.AfterClass;<br>import org.testng.annotations.BeforeClass;<br>import org.testng.annotations.Test;<br>import com.google.common.collect.ImmutableMap;<br>import io.appium.java_client.AppiumBy;<br>import io.appium.java_client.android.AndroidDriver;<br>import io.appium.java_client.android.options.UiAutomator2Options;<br>import java.net.*;<br>import java.time.Duration;<br><br>/**<br> * Script Details - &quot;appium-device-farm”- Complete Details on Enable/Disable “live video Streaming” for the Session Under “Appium Device Farm”<br> * <br> * appium-java-client version: 9.5.0<br> * <br> * @author &#39;Ramesh Kodumuru&#39; for AppiumGuide [appiumguide@gmail.com]<br> */<br><br>public class devicefarm_LiveVideoDemo {<br> <br> private AndroidDriver driver;<br> <br> WebElement dragelement,dropelement;<br>  <br> @BeforeClass<br> public void setup() throws MalformedURLException {<br>  UiAutomator2Options cap=new UiAutomator2Options();<br>  cap.setPlatformName(&quot;android&quot;);<br>  cap.setAutomationName(&quot;uiautomator2&quot;);<br>  cap.setDeviceName(&quot;Pixel9&quot;);<br>  <br>  //To Enable &amp; Disable the live video streaming in Device Farm<br>  <br>  //cap.setCapability(&quot;df:liveVideo&quot;, false);  //Live Video Streaming is disabled<br>  <br>  cap.setCapability(&quot;df:liveVideo&quot;, true);  //Live Video Streaming is enabled    //Default value for live video Streaming is true<br>  <br>     <br>  driver = new AndroidDriver(new URL(&quot;http://127.0.0.1:4723/wd/hub&quot;), cap);<br>  driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));  <br> }<br> <br> @Test<br> public void test1() throws InterruptedException {<br>  <br>  driver.activateApp(&quot;com.wdiodemoapp&quot;);<br>  <br>  driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().text(\&quot;Drag\&quot;)&quot;)).click();<br>  <br>  <br>  <br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(4)&quot;));<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(10)&quot;));<br>  <br>  int eX=(int)(dropelement.getRect().getX());<br>  int eY=(int)(dropelement.getRect().getY());<br>  <br>  //Perform Drag gesture based on element id, endX &amp; endY co-ordinates<br>  System.out.println(&quot;Perform Drag gesture based on element id, endX &amp; endY co-ordinates&quot;);<br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(&quot;elementId&quot;,((RemoteWebElement) dragelement).getId(),<br>    &quot;endX&quot;,eX,<br>    &quot;endY&quot;,eY));<br>  <br>  Thread.sleep(3000);<br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(7)&quot;));<br>  <br>  int sX=(int)(dragelement.getRect().getX());<br>  int sY=(int)(dragelement.getRect().getY());<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(8)&quot;));<br>  <br>  int eX1=(int)(dropelement.getRect().getX());<br>  int eY1=(int)(dropelement.getRect().getY());<br>  <br>  //Perform Drag gesture based on element id, startX,startY,endX &amp; endY co-ordinates <br>  System.out.println(&quot;Perform Drag gesture based on element id, startX,startY,endX &amp; endY co-ordinates&quot;);<br>  <br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(<br>    &quot;startX&quot;,sX,<br>    &quot;startY&quot;,sY,<br>    &quot;endX&quot;,eX1,<br>    &quot;endY&quot;,eY1));<br>  <br>  Thread.sleep(3000);<br>  <br>  ////Perform Drag gesture based on element id,endX,endY co-ordinates and Speed<br>  <br>  dragelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.widget.ImageView\&quot;).instance(1)&quot;));<br>  <br>  dropelement=driver.findElement(AppiumBy.androidUIAutomator(&quot;new UiSelector().className(\&quot;android.view.ViewGroup\&quot;).instance(10)&quot;));<br>  <br>  int eX2=(int)(dropelement.getRect().getX());<br>  int eY2=(int)(dropelement.getRect().getY());<br>  <br>  int speedvalue=(int)(100*2.625);<br>  System.out.println(&quot;Perform Drag gesture based on element id,endX,endY co-ordinates and Speed&quot;);<br>  <br>  ((JavascriptExecutor) driver).executeScript(&quot;mobile: dragGesture&quot;,ImmutableMap.of(&quot;elementId&quot;,((RemoteWebElement) dragelement).getId(),<br>    &quot;endX&quot;,eX2,<br>    &quot;endY&quot;,eY2,<br>    &quot;speed&quot;,speedvalue));<br>  <br> }  <br>  <br> @AfterClass<br> public void teardown() {<br>  <br>  if(driver!=null) {<br>   driver.quit();<br>   System.out.println(&quot;Test Execution Completed&quot;);<br><br>  }<br>  <br> }<br><br>}</pre><p><strong>GitHub Link:</strong></p><p><a href="https://github.com/AppiumGuide/AppiumGuide">GitHub - AppiumGuide/AppiumGuide</a></p><p><strong>🎬 Explore More! Watch My Latest Videos on YouTube!</strong></p><p><a href="https://www.youtube.com/@AppiumGuide/playlists">AppiumGuide</a></p><p><strong>Visit My Official Blog:</strong></p><p><a href="https://appiumguide-by-kodumururamesh.blogspot.com/">Home-Index Page</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d6f2a18bf1bc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[#203. [appium-device-farm-10] — Download & Install “FFMPEG” & Verify the installation with…]]></title>
            <link>https://medium.com/@appiumguide/203-appium-device-farm-10-download-install-ffmpeg-verify-the-installation-with-7981c37c8172?source=rss-d1fc7cd725bd------2</link>
            <guid isPermaLink="false">https://medium.com/p/7981c37c8172</guid>
            <category><![CDATA[appium-testing]]></category>
            <category><![CDATA[appium]]></category>
            <category><![CDATA[appium-inspector]]></category>
            <category><![CDATA[appium-training]]></category>
            <category><![CDATA[appium-mobile]]></category>
            <dc:creator><![CDATA["Appiumguide" by Ramesh Kodumuru]]></dc:creator>
            <pubDate>Sun, 27 Jul 2025 09:14:14 GMT</pubDate>
            <atom:updated>2025-07-27T18:15:23.174Z</atom:updated>
            <content:encoded><![CDATA[<h3>#203. [appium-device-farm-10] — Download &amp; Install “FFMPEG” &amp; Verify the installation with ‘appium-doctor’</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*I98Ht-SAPXaYrn-2JcuC1w.png" /></figure><p><strong>Get a step-by-step walkthrough in the video below!</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FfvUnOlFoJjY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DfvUnOlFoJjY&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FfvUnOlFoJjY%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/5ad6672af9c1c42dec4c8b0dbe35e11a/href">https://medium.com/media/5ad6672af9c1c42dec4c8b0dbe35e11a/href</a></iframe><p>FFmpeg is a powerful command-line tool used to <strong>record, convert, and stream audio and video</strong>. Whether you’re building automation workflows, creating screen recordings, compressing video, or converting media formats — FFmpeg is the go-to utility.</p><p>In this article, we’ll walk you through how to download and install FFmpeg on all major operating systems.</p><h3>What is FFmpeg?</h3><p><strong>FFmpeg</strong> is a free, open-source multimedia framework that can:</p><ul><li>Convert between different video/audio formats (e.g., MP4 to MP3)</li><li>Record screen or webcam</li><li>Extract frames from video</li><li>Compress media files</li><li>Merge, split, or trim video/audio files</li></ul><h3>Installing FFmpeg on Windows</h3><blockquote><strong>Step 1: Download FFmpeg ZIP</strong></blockquote><ol><li>Go to the official FFmpeg download page:<br> 👉 <a href="https://ffmpeg.org/download.html">https://ffmpeg.org/</a></li><li>Click on the “Download” button</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VG26iMhVcercNzG4i4EFpA.png" /></figure><p>3. Click on <strong>Windows</strong> ➜ Choose <strong>“Windows builds from gyan.dev”</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7l1TR-BgyDVVwnJ5MgqElQ.png" /></figure><p>4. Download the latest <strong>release build ZIP</strong> (e.g., ffmpeg-git-full.zip)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bWB8a_aoqubZ2a3WDb_D9Q.png" /></figure><blockquote><strong>Step 2: Extract the ZIP File</strong></blockquote><ul><li>Right-click the ZIP ➜ Extract All</li><li>Navigate to the extracted folder</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/912/1*h7UlozkQHeTn6Vi2oEbzQw.png" /></figure><blockquote><strong>Step 3: Add FFmpeg to System PATH</strong></blockquote><ol><li>Copy the extracted folder &amp; paste in C:\</li><li>Rename the folder to ‘ffmpeg’</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/912/1*VnuFGCUaVkoouK3IeyShUA.png" /></figure><p>3. Open the cmd prompt as ‘Run As Administor’</p><p>4. Copy the bin folder path (e.g., C:\ffmpeg\bin) &amp; Type the below command and click enter</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/658/1*DMatWyNmOC52lMfqP0nrzQ.png" /></figure><blockquote><strong>Step 4: Verify Installation</strong></blockquote><p>Open Command Prompt and run:</p><pre>ffmpeg -version</pre><p>You should see FFmpeg version details.</p><p>Example:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QI7dy4knKlGa6X-szfdqTQ.png" /></figure><blockquote><strong>Step 5: Verify the installation with ‘appium-doctor’</strong></blockquote><p>Appium-Doctor logs — Before FFMPEG installation:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PXCRS6YC_Om15zBWjRH2Og.png" /></figure><p>Appium-Doctor logs — After FFMPEG installation:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1Il9i6giE-DtajrHWpRuuQ.png" /></figure><p><strong>GitHub Link:</strong></p><p><a href="https://github.com/AppiumGuide/AppiumGuide">GitHub - AppiumGuide/AppiumGuide</a></p><p><strong>🎬 Explore More! Watch My Latest Videos on YouTube!</strong></p><p><a href="https://www.youtube.com/@AppiumGuide/playlists">AppiumGuide</a></p><p><strong>Visit My Official Blog:</strong></p><p><a href="https://appiumguide-by-kodumururamesh.blogspot.com/">Home-Index Page</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7981c37c8172" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>