<?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>Forem: ashwithpoojary98</title>
    <description>The latest articles on Forem by ashwithpoojary98 (@ashwithpoojary98).</description>
    <link>https://forem.com/ashwithpoojary98</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%2F530442%2F679cd617-ce67-4360-b912-be7e7b0cd49a.jpg</url>
      <title>Forem: ashwithpoojary98</title>
      <link>https://forem.com/ashwithpoojary98</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ashwithpoojary98"/>
    <language>en</language>
    <item>
      <title>Gemma 4 Challenge: Build with Gemma 4</title>
      <dc:creator>ashwithpoojary98</dc:creator>
      <pubDate>Sun, 24 May 2026 12:08:34 +0000</pubDate>
      <link>https://forem.com/ashwithpoojary98/gemma-4-challenge-build-with-gemma-4-5458</link>
      <guid>https://forem.com/ashwithpoojary98/gemma-4-challenge-build-with-gemma-4-5458</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Build with Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IncidentLens&lt;/strong&gt; — a self-hosted incident response copilot for SRE and platform teams.&lt;/p&gt;

&lt;p&gt;When a P1 alert fires at 2 AM, the on-call engineer's first 30 minutes are mostly tab-switching: Grafana → Kibana → Jaeger → GitHub → Slack → runbook wiki. The actual &lt;em&gt;reasoning&lt;/em&gt; is maybe 20% of that wall-clock time. The other 80% is swivel-chair work — copy-pasting timestamps, remembering which query syntax goes where, asking on Slack who deployed last.&lt;/p&gt;

&lt;p&gt;IncidentLens collapses that loop. Point it at your observability backends (Loki/Elastic, Prometheus, Jaeger/Tempo, GitHub, Slack) via a YAML config. When an incident opens, a Gemma 4–powered agent fans out across all of them in parallel, builds a unified timeline, and returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A ranked &lt;strong&gt;root-cause hypothesis&lt;/strong&gt; with the full evidence trail behind it&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;remediation command&lt;/strong&gt; ready to execute, with estimated recovery time&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;postmortem draft&lt;/strong&gt; that writes itself as a byproduct of the diagnosis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Crucially, the whole thing runs inside your VPC. No production logs leave the perimeter. That's the unlock for regulated industries — finance, healthcare, government — where existing AIOps SaaS isn't an option because data residency rules forbid shipping prod telemetry to a third-party cloud.&lt;/p&gt;

&lt;p&gt;The engineer's job collapses from &lt;em&gt;investigate&lt;/em&gt; to &lt;em&gt;verify and approve&lt;/em&gt;. Every tool call the agent made, every signal it weighted, every alternative hypothesis it discarded is auditable — because nobody is going to trust an AI rollback they can't inspect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🎥 Video walkthrough — &lt;/p&gt;

&lt;p&gt;🔗 Live demo — &lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;📦 Repository — (&lt;code&gt;github.com/ashwithpoojary98/incident-lens&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;Stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spring Boot 3 orchestration service (alert ingestion, tool routing, audit logging)&lt;/li&gt;
&lt;li&gt;Python agent sidecar serving Gemma 4 via vLLM with native function calling&lt;/li&gt;
&lt;li&gt;Kafka between them for streaming tool results into the timeline as they arrive&lt;/li&gt;
&lt;li&gt;PostgreSQL for incident state, Redis for active-incident working memory&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Used Gemma 4
&lt;/h2&gt;

&lt;p&gt;Gemma 4 &lt;em&gt;is&lt;/em&gt; the agent. The Spring Boot service is plumbing — every actual diagnostic decision flows through a Gemma 4 function-calling loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Current setup (local dev): Gemma 4 E4B
&lt;/h3&gt;

&lt;p&gt;I'm building and iterating on a single laptop, so I started with &lt;strong&gt;E4B&lt;/strong&gt;. Two reasons it was the right pick for the dev phase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It validates the architecture without GPU infra.&lt;/strong&gt; If the tool-use loop, prompt scaffolding, and timeline reconstruction work on E4B, they'll work better on larger models. Iterating on a 4B model means seconds per cycle, not minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;128K context is already enough to prototype long-context behavior.&lt;/strong&gt; I can fit 1–2 hours of logs plus a distributed trace plus recent commits and exercise the full end-to-end plumbing without simulating it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Production target: Gemma 4 26B A4B (MoE)
&lt;/h3&gt;

&lt;p&gt;The plan is to swap to &lt;strong&gt;26B MoE&lt;/strong&gt; before any real deployment. The reasons are specific, not generic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MoE economics.&lt;/strong&gt; 3.8B active params means I can serve it on a single L40S or RTX 6000 and still fan out 5–10 parallel tool calls without the model becoming the bottleneck. Dense 31B would cost meaningfully more per incident.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;256K context.&lt;/strong&gt; Full incident timelines (logs + traces + commits + Slack thread) fit without RAG fragmentation that loses temporal ordering — and temporal ordering is &lt;em&gt;the&lt;/em&gt; signal in incident response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configurable thinking modes.&lt;/strong&gt; Fast/shallow on the first signal so the engineer sees a hypothesis in seconds; deep reasoning when they follow up with "but &lt;em&gt;why&lt;/em&gt; did the retry storm start?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native function calling.&lt;/strong&gt; Non-negotiable. The agent lives or dies on tool-use accuracy across log/metric/trace backends. Pre-Gemma-4 this had to be bolted on with prompt scaffolding; Gemma 4 ships it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apache 2.0 + self-hostable.&lt;/strong&gt; The whole product premise is "your prod logs never leave your network." Hosted APIs literally cannot solve this market.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I deliberately did &lt;strong&gt;not&lt;/strong&gt; pick 31B Dense. Overkill for tool-using reasoning, harder to serve cheaply, and the marginal quality gain doesn't justify the inference cost when the bottleneck is tool-call accuracy, not raw reasoning ceiling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this E4B → 26B MoE path works
&lt;/h3&gt;

&lt;p&gt;Gemma 4 keeps a consistent function-calling API across the family, so the upgrade is essentially a config line swap. I get to validate the entire product loop locally on commodity hardware, then move to the production-grade model without rewriting the agent. That portability — same prompt format, same tool schemas, same thinking-mode controls from 4B all the way up — is honestly the most underrated thing about the Gemma 4 release, and it shaped my whole development approach.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
    </item>
    <item>
      <title>Why Being Both SDET and Developer Makes You a Stronger Platform Engineer</title>
      <dc:creator>ashwithpoojary98</dc:creator>
      <pubDate>Fri, 03 Apr 2026 15:58:36 +0000</pubDate>
      <link>https://forem.com/ashwithpoojary98/why-being-both-sdet-and-developer-makes-you-a-stronger-platform-engineer-djb</link>
      <guid>https://forem.com/ashwithpoojary98/why-being-both-sdet-and-developer-makes-you-a-stronger-platform-engineer-djb</guid>
      <description>&lt;p&gt;After nearly five years in IT, I’ve worked across roles—as an SDET, a developer, and now a platform engineer. Along the way, I didn’t just write tests or build features. I experienced the full lifecycle of software, including all the friction that comes after development.&lt;/p&gt;

&lt;p&gt;And that changed everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem I Kept Running Into
&lt;/h2&gt;

&lt;p&gt;As an SDET and developer, my job didn’t end after writing code. Every issue meant going through the same painful cycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build the application&lt;/li&gt;
&lt;li&gt;Deploy it to an environment&lt;/li&gt;
&lt;li&gt;Run tests and validate&lt;/li&gt;
&lt;li&gt;Debug and repeat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This process could easily take an entire day.&lt;/p&gt;

&lt;p&gt;The hardest part? I didn’t fully control it.&lt;/p&gt;

&lt;p&gt;If something broke at night, I had to wait for SREs, DevOps, or DBAs. Permissions, access, and dependencies slowed everything down. Fixing a small issue often required multiple teams to be available.&lt;/p&gt;

&lt;p&gt;That’s when I realized:&lt;/p&gt;

&lt;p&gt;The real bottleneck wasn’t code, it was the system around the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What SDET Taught Me
&lt;/h2&gt;

&lt;p&gt;Being an SDET gave me a strong foundation in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thinking about &lt;strong&gt;edge cases and failure scenarios&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Building &lt;strong&gt;robust automation frameworks&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Ensuring &lt;strong&gt;quality at every stage&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Designing systems that are &lt;strong&gt;testable by default&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I didn’t just test software, I learned how software &lt;em&gt;breaks&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Development Taught Me
&lt;/h2&gt;

&lt;p&gt;As a developer, I learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to design and build &lt;strong&gt;scalable systems&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Writing &lt;strong&gt;clean, maintainable code&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Understanding &lt;strong&gt;architecture and performance&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Shipping features with real user impact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I didn’t just find problems, I built solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where It All Came Together: Platform Engineering
&lt;/h2&gt;

&lt;p&gt;Platform engineering became the natural next step.&lt;/p&gt;

&lt;p&gt;Instead of repeatedly fixing issues inside the same broken process, I started focusing on improving the process itself.&lt;/p&gt;

&lt;p&gt;Today, I build platforms that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automate the &lt;strong&gt;entire build, test, and deployment lifecycle&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;self-service deployments&lt;/strong&gt; for developers&lt;/li&gt;
&lt;li&gt;Reduce dependency on multiple teams&lt;/li&gt;
&lt;li&gt;Provide &lt;strong&gt;consistent environments&lt;/strong&gt; across development, staging, and production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, I don’t just build software anymore. I build systems that help others build software faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Advantage of SDET + Developer Experience
&lt;/h2&gt;

&lt;p&gt;Having both backgrounds is a huge advantage in platform engineering:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. You Build with Quality in Mind
&lt;/h3&gt;

&lt;p&gt;You don’t treat testing as an afterthought. You design platforms where quality checks are built-in.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. You Understand the Full Lifecycle
&lt;/h3&gt;

&lt;p&gt;From writing code → testing → deploying → monitoring—you’ve lived every step.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. You Reduce Friction for Teams
&lt;/h3&gt;

&lt;p&gt;You know where developers and testers struggle, so you design platforms that remove those pain points.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. You Automate What Actually Matters
&lt;/h3&gt;

&lt;p&gt;Not just scripts, but meaningful automation that saves hours or days of effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. You Think in Systems, Not Just Code
&lt;/h3&gt;

&lt;p&gt;You move from solving isolated problems to improving the entire engineering workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Platform Engineering is the Future
&lt;/h2&gt;

&lt;p&gt;Modern software development is no longer just about writing code- it’s about delivering it quickly, reliably, and at scale.&lt;/p&gt;

&lt;p&gt;Platform engineering enables that by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Turning infrastructure into &lt;strong&gt;self-service&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Using &lt;strong&gt;Infrastructure as Code&lt;/strong&gt; for consistency and speed&lt;/li&gt;
&lt;li&gt;Eliminating manual handoffs and delays&lt;/li&gt;
&lt;li&gt;Empowering developers to own their code in production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As systems grow more complex, the teams that win will be the ones who can &lt;strong&gt;ship faster without sacrificing quality&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that requires strong platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Looking back, being both an SDET and a developer wasn’t just part of my journey; It was my biggest advantage.&lt;/p&gt;

&lt;p&gt;It taught me how to think about quality, build scalable systems, and most importantly, identify the real bottlenecks in software delivery.&lt;/p&gt;

&lt;p&gt;Because in the end:&lt;/p&gt;

&lt;p&gt;Great engineers don’t just write code—they build systems that make everything else faster.&lt;/p&gt;

&lt;p&gt;And that’s what "platform engineering" is all about.&lt;/p&gt;

</description>
      <category>platformengineering</category>
      <category>devops</category>
      <category>automation</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Automating Flutter App Using Flutter Appium driver</title>
      <dc:creator>ashwithpoojary98</dc:creator>
      <pubDate>Sat, 08 Jul 2023 10:07:59 +0000</pubDate>
      <link>https://forem.com/ashwithpoojary98/automating-flutter-app-using-flutter-appium-driver-1cmb</link>
      <guid>https://forem.com/ashwithpoojary98/automating-flutter-app-using-flutter-appium-driver-1cmb</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2nj6eecffrr8wpb22lb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2nj6eecffrr8wpb22lb.png" alt="Flutter App Automation"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Why Flutter is the most popular cross-platform mobile SDK??&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Running a development team for each mobile platform sucks up resources from other work. Flutter is the most popular way for one development team to build on all platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Flutter?&lt;/strong&gt;&lt;br&gt;
Flutter is Google’s free, open-source software development kit (SDK) for cross-platform mobile application development. Using a single platform-agnostic codebase, Flutter helps developers build high-performance, scalable applications with attractive and functional user interfaces for Android or IOS. Flutter relies on a library of pre-made widgets that make it simple for even people with limited programming or development experience to launch their own mobile applications quickly. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A list of companies doing noteworthy work with Flutter&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
As of January 2023, there are over 700,000 apps in the Play Store that are built with Flutter, and one in five new apps on the Play Store use Flutter, more than all other cross-platform frameworks put together. Flutter is picking up market share from other cross-platform frameworks, which are flat or declining over the last twelve months.&lt;br&gt;
Top Popular App built with flutter&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Alibaba Groups&lt;/li&gt;
&lt;li&gt;Google pay&lt;/li&gt;
&lt;li&gt;ByteDance&lt;/li&gt;
&lt;li&gt;BMW&lt;/li&gt;
&lt;li&gt;Dream11&lt;/li&gt;
&lt;li&gt;Nubank&lt;/li&gt;
&lt;li&gt;Pubg Mobile&lt;/li&gt;
&lt;li&gt;AWS Amplify&lt;/li&gt;
&lt;li&gt;Google ClassRoom&lt;/li&gt;
&lt;li&gt;Zerodha&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How to Automate Flutter App&lt;/strong&gt;&lt;br&gt;
Flutter app automation is not always straightforward.&lt;br&gt;
Flutter apps render using a two-stage process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Widget tree&lt;/li&gt;
&lt;li&gt;Render Object tree&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The flutter rendering engine is highly efficient and can render complex UIs at high frame rates. This is because the rendering engine uses a number of optimizations, such as caching render objects and batching draws calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;There are a few different ways to automate flutter apps.&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Flutter Driver:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Flutter driver used to interact with the app's UI, verify that the app is behaving as expected and perform other tasks. &lt;br&gt;
To use flutter driver, you need to install it's dependency in your flutter project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_driver:
    sdk: flutter
  test: any
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Sample test&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:flutter_driver/driver_extension.dart';
import 'package:test/main.dart' as app;

void main() {
  enableFlutterDriverExtension();
  app.main();
}

test('increments the counter', () async {
      await driver.tap(incrementButtonFinder);

      expect(await driver.getText(counterTextFinder), "1");
    });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Challenges that can encounter when using Flutter Driver to Automate Flutter apps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Writing test in other languages than Dart&lt;/li&gt;
&lt;li&gt;Running integration test for Flutter app with embedded webview or native view, or existing native app with embedded Flutter view&lt;/li&gt;
&lt;li&gt;Running test on multiple devices simultaneously(Parallel Run)&lt;/li&gt;
&lt;li&gt;Running integration test on device farms, such as Sauce Labs, HeadSpin, AWS, Firebase&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;2. Appium Flutter Driver&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Appium Flutter Driver is the most popular tool used to automate Flutter apps.&lt;br&gt;
Appium is a cross-platform automation tool that can be used to automate apps that run on a variety of platform, including flutter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre Requisite&lt;/strong&gt;&lt;br&gt;
Your Flutter app-under-test (AUT) must be compiled in &lt;strong&gt;debug&lt;/strong&gt; or &lt;strong&gt;profile&lt;/strong&gt; mode, because Flutter Driver does not support running in release mode. Also, ensure that your Flutter AUT has enableFlutterDriverExtension() before running App. Then, please make sure your app imported flutter_driver package as its devDependencies as well.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_driver:
    sdk: flutter
  test: any
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:flutter/material.dart';
import 'package:flutter_driver/driver_extension.dart';
import 'package:functional_widget_annotation/functional_widget_annotation.dart';
import 'package:hello_world/stream.dart';

part 'main.g.dart';

void main() {
enableFlutterDriverExtension(enableTextEntryEmulation: false);
 init();
  runApp(MyApp());
}

@widget
Widget myApp() =&amp;gt; MaterialApp(
  title: 'Counter App',
  home: MyHomePage(title: 'Counter App Home Page'),
);



@widget
Widget myHomePage(BuildContext context, {String title}) =&amp;gt; Scaffold(
  appBar: AppBar(
    title: Text(title),
  ),
  body: Center(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: &amp;lt;Widget&amp;gt;[
        Text(
          'You have pushed the button this many times:',
        ),
        Tooltip(
          message: 'counter_tooltip',
          child: StreamBuilder&amp;lt;int&amp;gt;(
            stream: counterStream,
            builder: (context, snapshot) {
              return Text(
                '${snapshot.data}',
                key: Key('counter'),
                style: Theme.of(context).textTheme.display1,
                semanticsLabel: 'counter_semantic',
              );
            }
          ),
        ),
        FlatButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =&amp;gt; Scaffold(
                        appBar: AppBar(
                          title: Text("Second Route"),
                        ),
                        body: Center(
                          child: SecondPage(),
                        ),
                      )),
            );
          },
          child: Text(
            'Go to next route',
            key: Key('next_route_key'),
          ),
        ),
      ],
    ),
  ),
  floatingActionButton: FloatingActionButton(
    // Provide a Key to this button. This allows finding this
    // specific button inside the test suite, and tapping it.
    key: Key('increment'),
    onPressed: () =&amp;gt; plusClickSink.add(null),
    tooltip: 'Increment',
    child: Icon(Icons.add),
  ),
);

@widget
Widget secondPage() =&amp;gt; ListView(
  padding: const EdgeInsets.all(8.0),
  children: &amp;lt;Widget&amp;gt;[
    Container(
      height: 100,
      color: Colors.amber[600],
      child: const Center(child: Text('This is 2nd route')),
    ),
    Container(
      height: 200,
      color: Colors.amber[500],
      child: const Center(child: Text('Entry B')),
    ),
    Container(
      height: 500,
      color: Colors.amber[100],
      child: const Center(child: Text('Entry C')),
    ),
    Container(
      height: 1000,
      color: Colors.amber[100],
      child: const Center(child: Text('Entry D')),
    ),
    Container(
      height: 1000,
      color: Colors.amber[100],
      child: const Center(
          child: TextField(
        decoration: InputDecoration(
          border: OutlineInputBorder(),
          labelText: 'Sample Input',
        ),
      )),
    ),
  ],
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Automation Code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add maven dependency to pom.xml
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;io.github.ashwithpoojary98&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;appium_flutterfinder_java&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.1&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
import io.appium.java_client.AppiumDriver;

public class FlutterFinderExampleTest {
    RemoteWebDriver driver;

    @BeforeMethod
    public void openApp() throws MalformedURLException {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "emulator-5554");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("noReset", true);
        capabilities.setCapability("app", "");
        capabilities.setCapability("automationName", "Flutter");
        driver = new AppiumDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
    }

    @Test
    public void appiumFlutterTest() {
        FlutterFinder finder = new FlutterFinder(driver);
        WebElement element = finder.byValueKey("increment");
        element.click();
    }

    @AfterMethod
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ashwithpoojary98" rel="noopener noreferrer"&gt;
        ashwithpoojary98
      &lt;/a&gt; / &lt;a href="https://github.com/ashwithpoojary98/javaflutterfinder" rel="noopener noreferrer"&gt;
        javaflutterfinder
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Flutter driver with Java implementation
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Appium Flutter Finder Java&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Flutter appium driver is automation tool with java implementation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ashwithpoojary98/javaflutterfinder" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/605dc3db18747f1c2ada7f287677a18d7fc23ce64d97d5c4d054fd469d0f5612/68747470733a2f2f6261646765732e66726170736f66742e636f6d2f6f732f76312f6f70656e2d736f757263652e7376673f763d313033" alt="Open Source Love"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ashwithpoojary98/javaflutterfinder/stargazers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5a7f1a40b6f2c86c7b913f807393c41051858da5e884e0bedb32b53f9e57a67c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f61736877697468706f6f6a61727939382f6a617661666c757474657266696e6465722e7376673f7374796c653d666c6174" alt="GitHub stars"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ashwithpoojary98/javaflutterfinder/pulls" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/573fa646496f330413b4e854037df23248b04bb673a47e6e8e0e7cc908546af2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d57656c636f6d652d627269676874677265656e2e7376673f7374796c653d666c6174" alt="PRs Welcome"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ashwithpoojary98/javaflutterfinder/network" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c435c785d29c344b6e0794e39563008b10e9f137cf55f5787cd200d38f9a8d0f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f61736877697468706f6f6a61727939382f6a617661666c757474657266696e6465722e7376673f7374796c653d736f6369616c266c6162656c3d466f726b" alt="GitHub forks"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;maven-plugin&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/ashwithpoojary98/javaflutterfinder/actions/workflows/mavenbuild.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/ashwithpoojary98/javaflutterfinder/actions/workflows/mavenbuild.yml/badge.svg" alt="Build Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Add maven dependency to pom.xml&lt;/p&gt;
&lt;div class="highlight highlight-text-xml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&amp;lt;&lt;span class="pl-ent"&gt;dependency&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span class="pl-ent"&gt;groupId&lt;/span&gt;&amp;gt;io.github.ashwithpoojary98&amp;lt;/&lt;span class="pl-ent"&gt;groupId&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span class="pl-ent"&gt;artifactId&lt;/span&gt;&amp;gt;appium_flutterfinder_java&amp;lt;/&lt;span class="pl-ent"&gt;artifactId&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span class="pl-ent"&gt;version&lt;/span&gt;&amp;gt;1.0.9&amp;lt;/&lt;span class="pl-ent"&gt;version&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span class="pl-ent"&gt;dependency&lt;/span&gt;&amp;gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Maven Center Repo link&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://mvnrepository.com/artifact/io.github.ashwithpoojary98/appium_flutterfinder_java" rel="nofollow noopener noreferrer"&gt;https://mvnrepository.com/artifact/io.github.ashwithpoojary98/appium_flutterfinder_java&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-java notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-s1"&gt;io&lt;/span&gt;.&lt;span class="pl-s1"&gt;appium&lt;/span&gt;.&lt;span class="pl-s1"&gt;java_client&lt;/span&gt;.&lt;span class="pl-s1"&gt;AppiumDriver&lt;/span&gt;
&lt;span class="pl-k"&gt;public&lt;/span&gt; &lt;span class="pl-k"&gt;class&lt;/span&gt; &lt;span class="pl-smi"&gt;FlutterFinderExampleTest&lt;/span&gt; {
    &lt;span class="pl-smi"&gt;RemoteWebDriver&lt;/span&gt; &lt;span class="pl-s1"&gt;driver&lt;/span&gt;;

    &lt;span class="pl-c1"&gt;@&lt;/span&gt;&lt;span class="pl-c1"&gt;BeforeMethod&lt;/span&gt;
    &lt;span class="pl-k"&gt;public&lt;/span&gt; &lt;span class="pl-smi"&gt;void&lt;/span&gt; &lt;span class="pl-en"&gt;openApp&lt;/span&gt;() &lt;span class="pl-k"&gt;throws&lt;/span&gt; &lt;span class="pl-smi"&gt;MalformedURLException&lt;/span&gt; {
        &lt;span class="pl-smi"&gt;DesiredCapabilities&lt;/span&gt; &lt;span class="pl-s1"&gt;capabilities&lt;/span&gt; = &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-smi"&gt;DesiredCapabilities&lt;/span&gt;();
        &lt;span class="pl-s1"&gt;capabilities&lt;/span&gt;.&lt;span class="pl-en"&gt;setCapability&lt;/span&gt;(&lt;span class="pl-s"&gt;"deviceName"&lt;/span&gt;, &lt;span class="pl-s"&gt;"emulator-5554"&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;capabilities&lt;/span&gt;.&lt;span class="pl-en"&gt;setCapability&lt;/span&gt;(&lt;span class="pl-s"&gt;"platformName"&lt;/span&gt;, &lt;span class="pl-s"&gt;"Android"&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;capabilities&lt;/span&gt;.&lt;span class="pl-en"&gt;setCapability&lt;/span&gt;(&lt;span class="pl-s"&gt;"noReset"&lt;/span&gt;, &lt;span class="pl-c1"&gt;true&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;capabilities&lt;/span&gt;.&lt;span class="pl-en"&gt;setCapability&lt;/span&gt;(&lt;span class="pl-s"&gt;"app"&lt;/span&gt;, &lt;span class="pl-s"&gt;""&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;capabilities&lt;/span&gt;.&lt;span class="pl-en"&gt;setCapability&lt;/span&gt;(&lt;span class="pl-s"&gt;"automationName"&lt;/span&gt;, &lt;span class="pl-s"&gt;"Flutter"&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;driver&lt;/span&gt; = &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-smi"&gt;AppiumDriver&lt;/span&gt;(&lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-smi"&gt;URL&lt;/span&gt;(&lt;span class="pl-s"&gt;"http://0.0.0.0:4723/wd/hub"&lt;/span&gt;), &lt;span class="pl-s1"&gt;capabilities&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;driver&lt;/span&gt;.&lt;span class="pl-en"&gt;manage&lt;/span&gt;().&lt;span class="pl-en"&gt;timeouts&lt;/span&gt;().&lt;span class="pl-en"&gt;implicitlyWait&lt;/span&gt;(&lt;span class="pl-smi"&gt;Duration&lt;/span&gt;.&lt;span class="pl-en"&gt;ofSeconds&lt;/span&gt;(&lt;span class="pl-c1"&gt;30&lt;/span&gt;));
    }

    &lt;span class="pl-c1"&gt;@&lt;/span&gt;&lt;span class="pl-c1"&gt;Test&lt;/span&gt;
    &lt;span class="pl-k"&gt;public&lt;/span&gt; &lt;span class="pl-smi"&gt;void&lt;/span&gt; &lt;span class="pl-en"&gt;appiumFlutterTest&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ashwithpoojary98/javaflutterfinder" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;If you have any queries at all, please feel free to reach out.&lt;/strong&gt;&lt;br&gt;
Gmail: &lt;a href="mailto:ashwithpoojary98@gmail.com"&gt;ashwithpoojary98@gmail.com&lt;/a&gt;&lt;br&gt;
Insta: ashwith__poojary&lt;br&gt;
Github: &lt;a href="https://github.com/ashwithpoojary98" rel="noopener noreferrer"&gt;https://github.com/ashwithpoojary98&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you....&lt;/p&gt;

</description>
      <category>fultterappautomation</category>
      <category>appium</category>
      <category>java</category>
      <category>appautomation</category>
    </item>
  </channel>
</rss>
