I used AI to help me build a Mobile Test Automation Framework Lately, I’ve been really curious about how AI can actually support us in real QA workflows and not just for small tasks, but in building something E2E. So I decided to test it in practice! I built a Mobile Test Automation Framework using Appium + WebdriverIO, and throughout the process, I intentionally used AI as part of my development workflow and it made a big difference. ⚙️ Tech stack • Appium • WebdriverIO • Node.js • Android Emulator • Jenkins (CI/CD integration) • Allure Report 💡 Where AI actually helped • Structuring the framework from scratch • Speeding up test development • Troubleshooting environment/setup issues • Exploring better approaches during implementation 🧠 AI tools I used • AI assistant integrated with Visual Studio Code • ChatGPT • Cursor AI 🚀 What the project includes ✔ Automated Android UI tests ✔ Integration with Jenkins for pipeline execution ✔ Detailed reports with Allure (logs + screenshots) ✔ A scalable and organized test structure 📊 With CI + reporting + AI working together, the result is: • Faster feedback • Easier debugging • A more efficient development flow AI doesn’t replace the engineer, but it definitely helps you move faster and think better. 🔗 GitHub repository: https://lnkd.in/d2sSMTa4 Still improving this project and exploring new ways to integrate AI into QA. Please, feel free to contribute to the project if you’d like :)
Building Mobile Test Automation Framework with AI and Appium
More Relevant Posts
-
Can UI tests in Android be AI-driven—and self-diagnosing? I recently explored the Mobile QA feature by Firebender. It enables: → Creating reusable UI tests from simple prompts → Automatic execution on real devices or emulators during test generation → And more importantly… self-diagnosing failures By encapsulating flows into Firebender custom commands, test failures don’t just report errors—they surface root cause, classification, and actionable fixes (whether it’s logic or test issues). This moves UI testing from: scripts that fail → to systems that explain failures Wrote a quick breakdown of how this works in practice: https://lnkd.in/dfEGVEFj
To view or add a comment, sign in
-
🚀🚀 𝗥𝗲𝗮𝗰𝘁 𝗡𝗮𝘁𝗶𝘃𝗲 — 𝗪𝗵𝘆 𝗣𝗮𝘁𝗰𝗵𝗶𝗻𝗴 𝗶𝘀 𝗡𝗲𝗲𝗱𝗲𝗱 + 𝗛𝗼𝘄 𝘁𝗼 𝗜𝗺𝗽𝗹𝗲𝗺𝗲𝗻𝘁 𝗜𝘁 🚀🚀 Ever faced a bug in a library and thought… 👉 “This isn’t my code, why is this breaking?” 😅 Let’s make this real with a situation every developer faces 👇 😅 𝑹𝒆𝒂𝒍 𝑷𝒓𝒐𝒃𝒍𝒆𝒎 (𝑯𝒂𝒑𝒑𝒆𝒏𝒔 𝒂 𝑳𝑶𝑻) >> You install a library: 📦 react-native-some-library Everything looks fine… until: ❌ App crashes ❌ UI behaves incorrectly ❌ Function doesn’t work as expected >> You debug for hours… and realize: 👉 The issue is inside node_modules, not your code. >> 🤯 Now You’re Stuck You have 3 options: 1️⃣ Wait for library update ⏳ 2️⃣ Fork the repo and maintain your own version 😵 3️⃣ Fix it locally… but it disappears after npm install 😑 None of these feel great. 🩹 𝑻𝒉𝒊𝒔 𝒊𝒔 𝑾𝒉𝒆𝒓𝒆 𝑷𝒂𝒕𝒄𝒉𝒊𝒏𝒈 𝑯𝒆𝒍𝒑𝒔 👉 You fix the issue once 👉 Save it as a patch 👉 It automatically applies every time 🔥𝑹𝒆𝒂𝒍 𝑬𝒙𝒂𝒎𝒑𝒍𝒆 >> Using: 📦 react-native-device-info DeviceInfo.getVersion() >> Returns: ❌ undefined >> You fix inside node_modules: return String(version); 🛠️ 𝑯𝒐𝒘 𝒕𝒐 𝑰𝒎𝒑𝒍𝒆𝒎��𝒏𝒕 𝑷𝒂𝒕𝒄𝒉 ?? 1️⃣ Install patch-package npm install patch-package postinstall-postinstall 2️⃣ Add postinstall script In package.json: "scripts": { "postinstall": "patch-package" } 3️⃣ Fix the library Go to: 📁 node_modules/react-native-device-info Make your fix ✍️ 4️⃣ Create patch npx patch-package react-native-device-info 👉 This creates: 📁 patches/react-native-device-info+version.patch 5️⃣ Commit patch ✔ Add patches/ folder ✔ Push to repo 🔄 𝑾𝒉𝒂𝒕 𝑯𝒂𝒑𝒑𝒆𝒏𝒔 𝑵𝒆𝒙𝒕? Every time someone runs: npm install 👉 Patch gets applied automatically 💪 💡 Why This is Powerful ✔ Fix production bugs quickly 🚨 ✔ No need to fork repo ✔ Saves time ✔ Works across team ⚠️ 𝑰𝒎𝒑𝒐𝒓𝒕𝒂𝒏𝒕 👉 It’s a temporary fix 👉 Remove patch when official fix is released 🧠 𝑺𝒊𝒎𝒑𝒍𝒆 𝑻𝒉𝒐𝒖𝒈𝒉𝒕 Without patch: Fix → reinstall → fix again 😑 With patch: Fix once → done forever ✅ HappY CodinG!! 🚀👨💻 #ReactNative #MobileDevelopment #JavaScript #AppDevelopment #FrontendDevelopment #SoftwareDeveloper #Programming #DeveloperLife #TechCommunity #LearningToCode #WebAndMobile #OpenSource
To view or add a comment, sign in
-
Hi, I would like to share my experience from over 10 years in testing and automation, one thing has become crystal clear that choosing the right tool makes all the difference. For me, Cypress.io isn’t just another testing framework, it’s been the solution 😎 From faster test execution to real-time reloading, simplified debugging, and a developer-friendly experience, Cypress has consistently helped me build more reliable and maintainable test suites. Of course, every project has its own needs. But if you’re aiming for speed, clarity, and confidence in your frontend and backend testing, Cypress is absolutely worth considering. Whats new in cypress? 1. AI-assisted test generation reduces manual effort 2. MCP enables context-aware AI integration - Auto Test Failure Analysis 3. Faster, improved component testing 4. Enhanced debugging and observability 5. Better cross-browser and cloud support Curious to hear from others, what’s been your go-to testing tool and why? 👇 #QA #SoftwareTesting #QualityEngineering #Automation #MCP #AI
To view or add a comment, sign in
-
[oh-my-agent: Portable Multi-Agent Harness] If you ask an agent to "build a TODO app," it will usually produce a good result. However, real-world development shows a deeper problem. Agents frequently produce incorrect output, exceed their defined scope, and repeat the same mistakes. Structural approaches like AGENTS.md or Skills aim to solve these issues, but their limitations quickly appear. Many shared skills lack library version information or consume tokens on unnecessarily long personas. Models also frequently fail to follow these conventions. This makes carefully written guidelines dead code. oh-my-agent addresses this problem through process rather than prompting. The framework quantitatively evaluates the agent's behavior. Instead of simply restarting when an error occurs, it records the underlying cause and applies that context to the next execution. [Clarification Debt (CD) Scoring System] The system adds and keeps points whenever the agent misunderstands requirements or deviates from the scope. - Clarify (+10): Simple confirmation questions. - Correct (+25): Course corrections because the agent failed to understand intentions. - Redo (+40): Rollbacks and restarts caused by scope deviation. - Repeating the same error applies a 1.5x multiplier. If the cumulative score exceeds 80 points, the system terminates the session immediately. The agent must then write a Root Cause Analysis (RCA). The system extracts insights and puts them into lessons-learned.md. The framework then uses this file to update the next session. This methodology matches the concept of Harness Engineering discussed by OpenAI. To use an agent effectively, you must build a control structure around it rather than rely on a single prompt. [Multiple Orchestration Modes] Users can select the depth of the process based on the task's nature. - /coordinate: A lightweight, 7-step loop. It performs fast execution and revision via PM task breakdown and QA review. - /ultrawork: A high-quality mode where 11 out of 17 steps focus on verification. It places a gate at each phase (PLAN - IMPL - VERIFY - REFINE - SHIP). These gates block progress if the work fails to match quality standards. The REFINE phase specifically analyzes side effects and removes duplicated code. [Standardized Project Structure] As multiple AI IDEs adopt the .agents/ folder as a standard, I combined skills, workflows, and configurations into a single directory. This setup provides a consistent level of control across various tools. Programming languages have evolved from machine code to high-level languages and now include natural language. As abstraction levels increase, developers need verification and control processes even more. Software development aims to achieve QCD (Quality, Cost, Delivery) simultaneously. This is why I developed this tool. I believe agent-based development is no exception. [Try it now] 🔗 Github: first-fluke/oh-my-agent https://bit.ly/4tbYXyb
To view or add a comment, sign in
-
Most developers use Claude like this: prompt → code → paste → repeat. It works. But it's not what it's capable of. When I started building a system of agents and skills — the way I develop React applications changed fundamentally. Here's how it works. — Skills are not prompts. They're contracts. A skill is a markdown file the agent reads before starting a task. Not "be careful" — a concrete technical contract for the project. Five files cover 90% of cases: component.md, testing.md, api.md, styling.md, a11y.md. Each answers one question: what does the agent need to know to get its PR approved on the first try. The agent reads only what's relevant — no extra noise in the context. — Agents — specialization over generalism Five agents, each with a strict area of ownership. Orchestrator — reads the ticket, breaks it down, defines interfaces. Component agent — UI, state, accessibility. API agent — hooks, fetching, cache. Test agent — unit + integration. Review agent — consistency, TypeScript, edge cases. The Orchestrator doesn't write code. It plans and delegates to the right agents with the right skills. — Parallelism — this is where it gets interesting Task: "Add infinite scroll with skeleton loading." Orchestrator defines the hook interface. Component agent and API agent work in parallel — the contract between them is already set. Test agent starts when both are done. Review agent looks at everything together. Medium-sized feature: ~3 hours → ~50 minutes. — Communication — through artifacts, not memory Agents don't "remember" each other. Each one leaves an explicit file: component-output/, api-output/, test-plan.md, review-notes.md. The next agent reads what the previous one left behind. No "give me the context again." This solves the biggest problem with long Claude sessions: context loss toward the end. — The core mindset shift One agent with a good prompt — a smart assistant. A system of agents with specialization and explicit interfaces — a team that doesn't get tired and doesn't lose context. Claude doesn't get better from smarter prompts. It gets better when you design the system with the same care you'd put into designing the application itself. Start with a single SKILL.md for components. You'll feel the difference immediately. — What does your Claude workflow look like right now — and how different is it from what's described here?
To view or add a comment, sign in
-
-
🚀 Have you ever wondered how APIs work behind the scenes? Let's break it down in simple terms! APIs, or Application Programming Interfaces, are sets of rules that allow different software applications to communicate with each other. Developers use APIs to access specific features or data from other applications, saving time and effort in building new functionalities. ⚙️ Understanding APIs is crucial for developers as they enable seamless integration of different services and functionalities into their own applications. This can lead to faster development, more robust features, and enhanced user experiences. By mastering APIs, developers can tap into a world of possibilities and create more powerful and interconnected software solutions. 🔍 Here's a step-by-step breakdown: 1️⃣ Define the purpose of your API integration 2️⃣ Find the appropriate API documentation 3️⃣ Obtain the necessary access keys or tokens 4️⃣ Craft your API request using the correct endpoints and parameters 5️⃣ Parse the API response and integrate the data into your application 🌐 Full code example: ``` // Sample API request using JavaScript const apiEndpoint = 'https://lnkd.in/gc8PxW6P'; fetch(apiEndpoint, { method: 'GET', headers: { 'Authorization': 'Bearer YOUR_API_TOKEN' } }) .then(response => response.json()) .then(data => console.log(data)); ``` 💡 Pro Tip: Always handle API errors gracefully to ensure smooth user experience and better error management. ⚠️ Common Mistake: Neglecting to properly secure and manage API keys can lead to unauthorized access and potential security risks. 🤔 What's the most challenging aspect of working with APIs in your projects? Share your thoughts in the comments below! 🌐 View my full portfolio and more dev resources at tharindunipun.lk #API #Developers #Coding #SoftwareDevelopment #Integration #TechTalk #CodeNewbie #WebDevelopment #DeveloperCommunity
To view or add a comment, sign in
-
-
The new application for software testing, encompassing UI, API, and mobile automation, SQL, HTML, CSS, Java, JavaScript, TypeScript, C#, Python, DevOps, and Generative AI, is now available on the Google Play Store. Access the application via the following link: https://lnkd.in/gTbs2BHM Web Link: https://lnkd.in/gkFkDkc7 Comprehensive end-to-end training, interview preparation for Quality Assurance, mock interview videos, coding practice challenges, and quizzes will be available starting this week. These resources cover Selenium, Playwright, Cypress, WebDriver IO, API testing, software testing, SQL, DevOps, and Generative AI. Please feel free to share this information with individuals seeking to acquire proficiency in these technologies from the ground level and enhance their confidence for relevant professional opportunities.
To view or add a comment, sign in
-
-
How I Built a Specialized AI Agent Team in Claude Code I'm building a complex, regulation heavy Flutter app. At some point I realized a single AI prompt cannot hold all the context effectively. So I built a dedicated agent team, and the results have been exceptional. Claude Code lets you define agents as markdown files in .claude/agents/. Each gets its own system prompt, tool permissions, and deep domain knowledge. Here's my team: Architect Agent: designs implementation plans with read only access. Every plan must map the full user workflow end to end before handoff. Implementer Agent: writes production code with full write access. It runs a mandatory integration checklist after every implementation, tracing every user action through the full stack. Code Reviewer Agent: audits for correctness, conventions, compliance, security, and quality. It never modifies code, carries 10 detailed checklists, and knows 30+ anti patterns specific to this codebase. Test Engineer Agent writes unit, widget, integration, and provider tests using shared in memory infrastructure and strict rules around test isolation. Why this beats generic subagents: Domain knowledge is permanent. Each agent carries 200 to 370 lines of specific instructions. Rules, edge cases, and past mistakes are encoded once, never re explained. Tool permissions are scoped. The architect and reviewer cannot write code. Reviews stay truly independent. Checklists prevent recurring mistakes. Our biggest problem was features that existed but were not reachable from the UI. Every agent now has integration completeness checks built in. Features now land complete, correctly integrated, properly tested, and legally compliant on the first pass. If you are building anything with real domain complexity, invest the time to build specialized agents.
To view or add a comment, sign in
-
-
Every test automation engineer knows this pain: UI changes break locators, pipelines go red, and you spend hours fixing tests that found zero bugs. So I built a self-healing interceptor in my Selenide-Cucumber framework. Here's the design: Page Object → SelfHealingInterceptor.perform(LOCATOR, action) → Try original locator → If ElementNotFound: → Capture page HTML via JavaScript → Clean HTML (strip script/style/svg, compress to 50KB) → Extract semantic context from source code → Send to GPT with semantic-aware prompt → Parse response (CSS: or XPATH: format) → Retry action with healed locator → Log WARNING with exact file + line to update → If healing fails → throw original error. Two components power this: `SelfHealingInterceptor` — A try-catch-heal-retry wrapper that intercepts Selenide actions. It catches `ElementNotFound` and `UIAssertionError`, delegates to the healer, retries with the new locator, and logs warnings on success. `AILocatorHealer` — The brain. Captures the live DOM, cleans it with Jsoup (removing scripts, styles, SVGs — noise the AI doesn't need), truncates to 50KB for the context window, then sends a carefully crafted prompt to GPT. Usage: java // Self-healing click for methods with no return type SelfHealingInterceptor.perform(LOGIN_BUTTON, el -> el.shouldBe(clickable, Duration.ofSeconds(10)).click()); // Self-healing getText for methods with return type String msg = SelfHealingInterceptor.execute(ERROR_MSG, el -> el.shouldBe(visible).getText()); For Thread-safe for parallel execution: private static final ThreadLocal<AILocatorHealer> healerThreadLocal = ThreadLocal.withInitial(AILocatorHealer::new); **Graceful degradation** — API down? AI garbage? Healed locator fails too? → Always throws the *original* error. The healing layer is invisible when it fails. **Healing logs**: ⚠️ SELF-HEALING SUCCESS - ACTION REQUIRED File: LoginPage.java (enterPassword:47) Original: By.xpath: //input[@id='old-id'] Healed: CSS: input[type='password'][name='password'] **Results:** ⏱️ 0ms overhead on passing tests 🔧 2-5 sec healing time 💰 ~$0.01/heal (~$2-3/month) 📉 90%+ reduction in false failures Stack: Java, Selenide, Cucumber, GPT. No new dependencies — just `simple-openai` and `jsoup` that were already in our stack. The Philosophy The goal isn't to heal forever — it's to heal once, alert you, and let you fix the root cause. Self-healing isn't magic. It's a safety net. It doesn't replace good locator strategy. It doesn't excuse sloppy selectors. And it definitely doesn't mean you can skip code reviews. What it does is buy your team time. Time to focus on writing meaningful tests instead of playing locator whack-a-mole. Time to investigate real bugs instead of phantom failures. Time to build confidence in your pipeline instead of muting notifications. #TestAutomation #Selenium #AI #QualityEngineering #SelfHealingTests #Selenide #Java #SoftwareTesting
To view or add a comment, sign in
-
Do you ever want to challenge yourself and see if you can build something from scratch? I wanted to see if I could build my own QA automation project without relying on an existing setup or test base, covering both backend and mobile. So I built one. I used the open source Pocket Casts project as a base. It is a real Android app in Kotlin with real user flows. It felt like a good foundation for practical automation work. I built the API testing part from scratch. I created the test scenarios, fixtures, and overall test design myself. It turned into a small test suite covering login and token refresh flows. The setup also includes typed configuration, retry and backoff, safe logging, and CI reporting. For Android, I built onboarding E2E tests from scratch and plugged them into the existing setup. I focused on two main flows: a returning user and onboarding with inline validation for a wrong password. The tricky part wasn’t assertions, but getting the tests stable and reproducible with a mixed UI stack (Compose and Android Views), async screens, real credentials, and a CI emulator. I also added automatic screen dumps on failures, which made it much easier to see what actually went wrong. Using AI was also part of the process. It helped me at the start. Codex from OpenAI generated the initial backend project based on existing requests from the Android app, and it also provided useful code review feedback. At the same time, it sometimes pushed me towards overly complex solutions. My main takeaway is simple: AI is useful, but it still needs engineering judgement. You can find the project here. API: https://lnkd.in/e5Z8mHQn Mobile: https://lnkd.in/eq8kJRFC Projects is also in my Featured section 😉
To view or add a comment, sign in
-
Explore related topics
- How AI Assists in Debugging Code
- How AI Improves Code Quality Assurance
- AI in DevOps Implementation
- How to Use AI to Make Software Development Accessible
- How to Support Developers With AI
- How Developers can Use AI in the Terminal
- How to Integrate AI in Software Development
- How to Use AI Instead of Traditional Coding Skills
- How to Use AI for Manual Coding Tasks
- Using AI Transformer Models in Software Testing