<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mayvin Ramasawmy</title>
    <description>The latest articles on DEV Community by Mayvin Ramasawmy (@mayvinrmm).</description>
    <link>https://dev.to/mayvinrmm</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3916371%2F67d11fa3-fa30-4e0a-8c3c-90d910527fb9.png</url>
      <title>DEV Community: Mayvin Ramasawmy</title>
      <link>https://dev.to/mayvinrmm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mayvinrmm"/>
    <language>en</language>
    <item>
      <title>Keep Appium out of your test code: BasePage + lazy locators</title>
      <dc:creator>Mayvin Ramasawmy</dc:creator>
      <pubDate>Tue, 26 May 2026 12:56:55 +0000</pubDate>
      <link>https://dev.to/mayvinrmm/keep-appium-out-of-your-test-code-basepage-lazy-locators-ohp</link>
      <guid>https://dev.to/mayvinrmm/keep-appium-out-of-your-test-code-basepage-lazy-locators-ohp</guid>
      <description>&lt;p&gt;If your test methods import &lt;strong&gt;&lt;em&gt;AndroidDriver&lt;/em&gt;&lt;/strong&gt;, call &lt;em&gt;&lt;strong&gt;findElement&lt;/strong&gt;&lt;/em&gt; directly, or know what a locator strategy is, your tests are coupled to Appium. The day a selector changes or the driver setup moves, that coupling spreads the edit across every test you've written.&lt;/p&gt;

&lt;p&gt;The fix is an abstraction layer your tests talk to instead. Tests describe intent — &lt;em&gt;loginScreen.signIn(user)&lt;/em&gt; — and never see the driver underneath.&lt;/p&gt;

&lt;p&gt;What the article builds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧱 A &lt;strong&gt;&lt;em&gt;BasePage&lt;/em&gt;&lt;/strong&gt; that runs &lt;strong&gt;&lt;em&gt;PageFactory.initElements&lt;/em&gt;&lt;/strong&gt; with &lt;strong&gt;&lt;em&gt;AppiumFieldDecorator&lt;/em&gt;&lt;/strong&gt;, so every screen object inherits element wiring for free&lt;/li&gt;
&lt;li&gt;🐌 Lazy locators — &lt;strong&gt;&lt;em&gt;@AndroidFindBy&lt;/em&gt;&lt;/strong&gt; fields resolve to real elements at interaction time, not at construction&lt;/li&gt;
&lt;li&gt;🔌 A Spring-managed &lt;strong&gt;&lt;em&gt;DriverManager&lt;/em&gt;&lt;/strong&gt; that owns the session so screen objects receive an already-initialized driver&lt;/li&gt;
&lt;li&gt;💉 Constructor injection that passes that single driver down through the framework&lt;/li&gt;
&lt;li&gt;⚖️  The SRP and DIP reasoning for why the driver lives in one place&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One concrete detail worth knowing: because &lt;strong&gt;&lt;em&gt;AppiumFieldDecorator&lt;/em&gt;&lt;/strong&gt; makes locators lazy, instantiating a screen object does not query the UI. Nothing touches the device until you actually call a method that uses a field. That's why you can construct screen objects in a constructor without the app being on the right screen yet — a common source of confusion when people expect @AndroidFindBy to fail immediately on a missing element.&lt;/p&gt;

&lt;p&gt;This is Article 3 of a series building a mobile framework end to end. If your tests are tangled up with Appium internals, this is the layer that separates them.&lt;/p&gt;

&lt;p&gt;👉 Read the full guide here: &lt;a href="https://www.mobile-automation.io/driver-setup-screen-objects-mobile-framework/" rel="noopener noreferrer"&gt;https://www.mobile-automation.io/driver-setup-screen-objects-mobile-framework/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>automation</category>
      <category>java</category>
      <category>testing</category>
    </item>
    <item>
      <title>How to structure an Appium framework that scales beyond one team</title>
      <dc:creator>Mayvin Ramasawmy</dc:creator>
      <pubDate>Wed, 20 May 2026 14:55:54 +0000</pubDate>
      <link>https://dev.to/mayvinrmm/how-to-structure-an-appium-framework-that-scales-beyond-one-team-47p2</link>
      <guid>https://dev.to/mayvinrmm/how-to-structure-an-appium-framework-that-scales-beyond-one-team-47p2</guid>
      <description>&lt;p&gt;Single-module Appium frameworks work great — until a second team needs to use them.&lt;/p&gt;

&lt;p&gt;It starts small. A shared utility gets copy-pasted into another repo because it's quicker than figuring out how to share it properly. One team upgrades Appium. The other can't follow without breaking half their tests. What started as one shared framework is now three slightly different versions, each maintained by a different team, with no clear owner and no easy way to keep them in sync.&lt;/p&gt;

&lt;p&gt;The answer isn't more coordination. It's an architectural decision made early: stay single-module, or build something teams can share without forking.&lt;/p&gt;

&lt;p&gt;Here's what the full guide walks through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧱 When a single module is genuinely enough (and when it isn't)&lt;/li&gt;
&lt;li&gt;📦 Setting up a Maven multi-module project with a clean parent POM&lt;/li&gt;
&lt;li&gt;🌱 Why Spring Boot integration has to happen early, not retroactively&lt;/li&gt;
&lt;li&gt;🔀 The dependency direction rule that keeps your core reusable&lt;/li&gt;
&lt;li&gt;🏗️  How a core + team-tests split maps to multi-team scaling later&lt;/li&gt;
&lt;li&gt;⚠️  BOM imports, packaging types, and module naming — the Maven mistakes that silently break builds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you bring Spring Boot into a Maven framework, import the BOM in your parent POM's  instead of inheriting from spring-boot-starter-parent. Inheriting forces your parent POM to extend Spring's parent, which takes over your inheritance hierarchy. The BOM gives you the same managed versions without that trade-off — Spring Boot dependencies need no explicit version declarations.&lt;/p&gt;

&lt;p&gt;The full guide covers the parent POM setup, module layout, dependency graph, and the architectural decisions that make this framework usable by 20+ teams without forking.&lt;/p&gt;

&lt;p&gt;👉 Read the full guide here: &lt;a href="https://www.mobile-automation.io/scalable-mobile-test-framework/" rel="noopener noreferrer"&gt;https://www.mobile-automation.io/scalable-mobile-test-framework/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>appium</category>
      <category>java</category>
      <category>testing</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Stop writing test scripts. Start building a mobile automation framework.</title>
      <dc:creator>Mayvin Ramasawmy</dc:creator>
      <pubDate>Sat, 16 May 2026 16:12:14 +0000</pubDate>
      <link>https://dev.to/mayvinrmm/stop-writing-test-scripts-start-building-a-mobile-automation-framework-50mn</link>
      <guid>https://dev.to/mayvinrmm/stop-writing-test-scripts-start-building-a-mobile-automation-framework-50mn</guid>
      <description>&lt;p&gt;Most mobile test automation projects start the same way: strong intentions, decent coverage, tests that mostly pass. Then the app ships a new screen. Or the team doubles. Or you add iOS alongside Android. And suddenly the suite that looked fine at 50 tests is a nightmare at 500.&lt;/p&gt;

&lt;p&gt;The culprit is almost never the tests themselves — it's the absence of architecture underneath them.&lt;/p&gt;

&lt;p&gt;Here's what the article covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧱 The 7 quality attributes (maintainability, reliability, extensibility, and more) that separate frameworks that scale from ones that collapse&lt;/li&gt;
&lt;li&gt;🔧 How SOLID principles — SRP, OCP, LSP, ISP, DIP — apply directly to test automation code, with practical analogies for each&lt;/li&gt;
&lt;li&gt;📱 Why the Page Object Model is the right structural default for mobile, and what it actually gives you&lt;/li&gt;
&lt;li&gt;📦 How multi-module project architecture keeps team test code isolated without duplicating shared logic&lt;/li&gt;
&lt;li&gt;⚙️  Configuration management for environments, device profiles, and test profiles — with zero code changes at runtime&lt;/li&gt;
&lt;li&gt;🤖 How to design your framework now so AI tooling (self-healing selectors, AI-generated tests) can plug in later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing the article names explicitly that most teams skip: hard-coded sleeps (Thread.sleep(3000)) aren't just a minor bad habit — they're a root cause of flaky tests and a direct waste of machine resources at scale. It's a small call-out, but it's the kind of thing that quietly poisons a suite long before anyone traces the flakiness back to it.&lt;/p&gt;

&lt;p&gt;This is the foundation article for a full framework build series. Everything that follows — Maven multi-module setup, driver configuration, BDD integration, parallel execution, device farms — builds on the blueprint laid out here.&lt;/p&gt;

&lt;p&gt;👉 Read the full guide here: &lt;a href="https://www.mobile-automation.io/why-mobile-test-automation-frameworks-fail/" rel="noopener noreferrer"&gt;https://www.mobile-automation.io/why-mobile-test-automation-frameworks-fail/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;I write practical guides on mobile test automation and AI tooling at mobile-automation.io (&lt;a href="https://www.mobile-automation.io/" rel="noopener noreferrer"&gt;https://www.mobile-automation.io/&lt;/a&gt;). If this was useful, feel free to follow along.&lt;/p&gt;

</description>
      <category>appium</category>
      <category>testing</category>
      <category>mobile</category>
      <category>beginners</category>
    </item>
    <item>
      <title>The 9-Step Path to Mobile Test Automation with Appium 3</title>
      <dc:creator>Mayvin Ramasawmy</dc:creator>
      <pubDate>Wed, 06 May 2026 17:09:28 +0000</pubDate>
      <link>https://dev.to/mayvinrmm/the-9-step-path-to-mobile-test-automation-with-appium-3-2369</link>
      <guid>https://dev.to/mayvinrmm/the-9-step-path-to-mobile-test-automation-with-appium-3-2369</guid>
      <description>&lt;p&gt;Setting up Appium for the first time is harder than it should be. It's not one thing — it's five things that all have to work together: the right driver, the right SDK, the right capabilities, the right device config. Miss one and your session won't even start.&lt;/p&gt;

&lt;p&gt;Most guides online don't help much either. A lot of them are still written for older Appium versions, and the ecosystem has changed significantly.&lt;/p&gt;

&lt;p&gt;This guide is the learning path I wish existed when I started — 9 steps, in order, from zero to writing real end-to-end tests on Android and iOS.&lt;/p&gt;

&lt;p&gt;Here's what's covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📦 Installing Appium 3 and running Appium Doctor to verify your setup&lt;/li&gt;
&lt;li&gt;🤖 Android setup — UIAutomator2 driver, Android Studio, SDK, and emulators&lt;/li&gt;
&lt;li&gt;🍎 iOS setup — Xcode, simulators, WebDriverAgent, and real device gotchas&lt;/li&gt;
&lt;li&gt;🔍 Appium Inspector — finding locators and understanding your app's UI structure&lt;/li&gt;
&lt;li&gt;⚙️ Capabilities — the config layer that controls how Appium launches your app&lt;/li&gt;
&lt;li&gt;🧪 End-to-end tests — login flows, gestures, and drag-and-drop on both platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing worth knowing upfront: iOS setup is genuinely more involved than Android. Xcode alone has several configuration steps that catch people off guard. The iOS article covers all of them, including          WebDriverAgent and real device provisioning, so you're not left guessing.&lt;/p&gt;

&lt;p&gt;If you're starting from scratch or feel like your setup is fragile, this path is designed for you.&lt;/p&gt;

&lt;p&gt;👉 Read the full guide here: &lt;a href="https://www.mobile-automation.io/getting-started-with-appium/" rel="noopener noreferrer"&gt;https://www.mobile-automation.io/getting-started-with-appium/&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I write practical guides on mobile test automation and AI tooling at &lt;a href="https://www.mobile-automation.io/" rel="noopener noreferrer"&gt;mobile-automation.io&lt;/a&gt;. If this was useful, feel free to follow along.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>appium</category>
      <category>testing</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
