<?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: Broxhq</title>
    <description>The latest articles on DEV Community by Broxhq (@broxhq).</description>
    <link>https://dev.to/broxhq</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%2F3966385%2F22f7c468-e38e-4580-9511-7f7137d938df.png</url>
      <title>DEV Community: Broxhq</title>
      <link>https://dev.to/broxhq</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/broxhq"/>
    <language>en</language>
    <item>
      <title>I built an AI agent that runs manual test cases in a real browser</title>
      <dc:creator>Broxhq</dc:creator>
      <pubDate>Wed, 03 Jun 2026 11:00:50 +0000</pubDate>
      <link>https://dev.to/broxhq/i-built-an-ai-agent-that-runs-manual-test-cases-in-a-real-browser-4caj</link>
      <guid>https://dev.to/broxhq/i-built-an-ai-agent-that-runs-manual-test-cases-in-a-real-browser-4caj</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Every deploy — same manual test steps. Login, open the form, &lt;br&gt;
fill the fields, check the result. Over and over.&lt;/p&gt;

&lt;p&gt;I wanted to skip the Playwright/Selenium boilerplate and just &lt;br&gt;
paste my existing test cases as plain text.&lt;/p&gt;

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

&lt;p&gt;qpilot — an AI agent that reads your manual test case and &lt;br&gt;
executes it in a real Chrome browser step by step.&lt;/p&gt;

&lt;p&gt;You write this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://myapp.com/login" rel="noopener noreferrer"&gt;https://myapp.com/login&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Enter email and password&lt;/li&gt;
&lt;li&gt;Click Login&lt;/li&gt;
&lt;li&gt;Verify dashboard is visible&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent opens Chrome, clicks, fills forms, and reports &lt;br&gt;
pass/fail/warn per step with evidence from the page.&lt;/p&gt;

&lt;p&gt;If it hits an OTP or captcha — it pauses and asks you directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Playwright controls the real Chrome browser&lt;/li&gt;
&lt;li&gt;Each step: snapshot → action → snapshot → report&lt;/li&gt;
&lt;li&gt;Claude Haiku reads the snapshot (ARIA tree) and decides what to click&lt;/li&gt;
&lt;li&gt;Element refs (e.g. e12) are used for precise targeting&lt;/li&gt;
&lt;li&gt;Context window is managed to avoid hitting token limits&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;npx qpilot&lt;/p&gt;

&lt;p&gt;No code. No config. No Selenium.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;TypeScript, Playwright, Claude Haiku via Anthropic API.&lt;/p&gt;

&lt;p&gt;Open source: &lt;a href="https://github.com/broxhq/qpilot" rel="noopener noreferrer"&gt;qpilot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious what you think — especially about edge cases &lt;br&gt;
you'd want it to handle.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>showdev</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
