<?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: Markus Gasser</title>
    <description>The latest articles on DEV Community by Markus Gasser (@mellowthunder735).</description>
    <link>https://dev.to/mellowthunder735</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3908163%2Fd64abf60-796e-4faa-8c13-cada6d4bae3c.png</url>
      <title>DEV Community: Markus Gasser</title>
      <link>https://dev.to/mellowthunder735</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mellowthunder735"/>
    <language>en</language>
    <item>
      <title>Your Test Didn't Flake. Your UI Moved While Nobody Was Looking.</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Wed, 14 Oct 2026 21:07:37 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/your-test-didnt-flake-your-ui-moved-while-nobody-was-looking-5dol</link>
      <guid>https://dev.to/mellowthunder735/your-test-didnt-flake-your-ui-moved-while-nobody-was-looking-5dol</guid>
      <description>&lt;p&gt;A test clicks Save. The app saves the record. A green toast appears, hangs around for two seconds, and blocks the next button.&lt;/p&gt;

&lt;p&gt;The test fails.&lt;/p&gt;

&lt;p&gt;Someone adds a three-second sleep. The test passes. Everyone moves on.&lt;/p&gt;

&lt;p&gt;Two weeks later, the toast takes four seconds to disappear on a busy CI machine. Same failure. Different Monday.&lt;/p&gt;

&lt;p&gt;I think this is one of the most expensive habits in frontend testing: treating every unpredictable UI event as a timing problem. Sometimes the timing is fine. The application has changed which element is actually available for interaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small UI change can be a big state change
&lt;/h2&gt;

&lt;p&gt;Modern apps throw a surprising amount of stuff at a browser: notifications, loading masks, drawers, dropdowns, permission prompts, confirmation dialogs, and third-party widgets. Any of these can alter where focus goes or which control is on top.&lt;/p&gt;

&lt;p&gt;Imagine this sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A user changes a billing address.&lt;/li&gt;
&lt;li&gt;A confirmation dialog opens.&lt;/li&gt;
&lt;li&gt;Clicking Confirm triggers a loading overlay.&lt;/li&gt;
&lt;li&gt;A toast slides across the bottom of the page.&lt;/li&gt;
&lt;li&gt;The test tries to click Continue.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If Continue is behind the toast, clicking it isn't a legitimate user action at that moment. Retrying the same coordinates is no better. A useful test should wait for an actionable state, then locate the button again.&lt;/p&gt;

&lt;p&gt;This is why I like the idea behind &lt;a href="https://bugbench.com/benchmark-plan-comparing-ai-testing-platforms-on-toast-interference-modal-stacking-and-recovery-after-ui-noise/" rel="noopener noreferrer"&gt;this benchmark for testing toast interference and modal stacking&lt;/a&gt;. It separates completing the flow from &lt;em&gt;recovering sensibly&lt;/em&gt; when the interface gets noisy. Those are different abilities.&lt;/p&gt;

&lt;p&gt;A test that passes after twenty silent retries isn't automatically better than one that fails immediately with a screenshot showing the obstruction.&lt;/p&gt;

&lt;h2&gt;
  
  
  The DOM can be ready while the experience isn't
&lt;/h2&gt;

&lt;p&gt;React and Next.js introduce a variation of the same problem. The server sends HTML. The browser paints it. Hydration begins. Something changes.&lt;/p&gt;

&lt;p&gt;The button you found on the first render might be replaced, disabled, or wired to behavior only after hydration. This creates a particularly irritating failure: everything looks fine in the screenshot, but the click happens at the wrong stage.&lt;/p&gt;

&lt;p&gt;Blanket rules such as "fail the build for every hydration warning" are tempting. They also make it hard to distinguish a harmless discrepancy from a broken purchase button.&lt;/p&gt;

&lt;p&gt;A more useful approach is to reproduce the mismatch, identify the affected component, and assert the interaction the user actually needs. There's a focused walkthrough of &lt;a href="https://test-automation-experts.com/how-to-test-hydration-mismatches-in-react-and-next-js-without-turning-every-console-warning-into-a-broken-build/" rel="noopener noreferrer"&gt;testing React and Next.js hydration mismatches without treating every warning as fatal&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The key question isn't whether the console is immaculate. It's whether the page ended up usable and correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  Focus bugs are the quiet cousin of click bugs
&lt;/h2&gt;

&lt;p&gt;Custom comboboxes are a great trap for overconfident tests. You type into the box, see an option, click it, and assume the widget works.&lt;/p&gt;

&lt;p&gt;Now try the same thing without touching the mouse.&lt;/p&gt;

&lt;p&gt;Does Arrow Down move the active option? Does Escape close the list? Does focus remain where it should? Does &lt;code&gt;aria-activedescendant&lt;/code&gt; point to a real option? Does Enter choose the highlighted item rather than the first item in the DOM?&lt;/p&gt;

&lt;p&gt;A click-only test can happily pass through a component that fails for keyboard users. The &lt;a href="https://bughuntersclub.com/how-to-test-custom-comboboxes-typeahead-menus-and-aria-activedescendant-keyboard-behavior-without-missing-focus-bugs/" rel="noopener noreferrer"&gt;combobox and typeahead testing guide&lt;/a&gt; is worth using as a checklist when you're dealing with custom widgets.&lt;/p&gt;

&lt;p&gt;I'd add one rule: check the resulting value and focus state, not merely whether a dropdown was visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Please stop screenshotting every pixel
&lt;/h2&gt;

&lt;p&gt;The same mistaken obsession with implementation details shows up in layout testing.&lt;/p&gt;

&lt;p&gt;A grid can reflow because content grows, a font changes, or the viewport narrows. That doesn't necessarily mean the user experience is broken. Meanwhile, a footer button can become inaccessible with only a tiny visible change.&lt;/p&gt;

&lt;p&gt;For CSS subgrid and intrinsic sizing, I'd rather assert things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Key elements don't overlap.&lt;/li&gt;
&lt;li&gt;Important controls remain inside the viewport or reachable by scrolling.&lt;/li&gt;
&lt;li&gt;Text isn't clipped.&lt;/li&gt;
&lt;li&gt;Reading and tab order still make sense.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use screenshots for visually meaningful regressions, not as the only definition of correctness. The practical examples in &lt;a href="https://frontendtester.com/how-to-test-css-subgrid-intrinsic-sizing-and-auto-placement-reflows-without-brittle-pixel-assertions/" rel="noopener noreferrer"&gt;this piece on testing CSS subgrid and layout reflows&lt;/a&gt; make that distinction nicely.&lt;/p&gt;

&lt;h2&gt;
  
  
  A better way to debug the next "flaky" failure
&lt;/h2&gt;

&lt;p&gt;When the next intermittent click failure appears, resist the immediate urge to increase a timeout. First find out what was actually on screen. Was the button covered? Was it disabled? Did the page re-render? Where was keyboard focus? Which state was the app in immediately before the action?&lt;/p&gt;

&lt;p&gt;Then create a small, repeatable version of the problem. Force the toast to appear. Delay the hydration step. Stack the dialogs. Navigate with the keyboard.&lt;/p&gt;

&lt;p&gt;A test that fails consistently under a known bad state is easier to fix than a test that passes inconsistently after a random sleep.&lt;/p&gt;

&lt;p&gt;The funny part is that teams often spend more time arguing about locator syntax than asking whether the element was genuinely available to the user. The second question is usually where the bug lives.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>automation</category>
    </item>
    <item>
      <title>10 No-Code Test Automation Tools in 2026, Compared on Real-World Scenarios</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Tue, 06 Oct 2026 21:56:11 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/10-no-code-test-automation-tools-in-2026-compared-on-real-world-scenarios-3f0e</link>
      <guid>https://dev.to/mellowthunder735/10-no-code-test-automation-tools-in-2026-compared-on-real-world-scenarios-3f0e</guid>
      <description>&lt;p&gt;There are plenty of lists of no-code testing tools.&lt;/p&gt;

&lt;p&gt;Most are easy to write.&lt;/p&gt;

&lt;p&gt;Open ten vendor websites. Copy the feature lists. Note that everyone now has AI, self-healing tests, and CI/CD integration. Put the products into a table. Call it a comparison.&lt;/p&gt;

&lt;p&gt;The problem is that this tells you very little about what happens when you try to automate a difficult application.&lt;/p&gt;

&lt;p&gt;A login form is easy.&lt;/p&gt;

&lt;p&gt;What about uploading a file inside an iframe?&lt;/p&gt;

&lt;p&gt;What about a signup flow that requires opening an email?&lt;/p&gt;

&lt;p&gt;What happens when the application opens another browser tab halfway through the test?&lt;/p&gt;

&lt;p&gt;Can the tool handle variables, API calls, PDFs, and drag-and-drop interactions without forcing the tester to write JavaScript?&lt;/p&gt;

&lt;p&gt;Those are much better questions.&lt;/p&gt;

&lt;p&gt;For this comparison, those awkward cases matter more than the size of a vendor's feature list.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Best fit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://endtest.io/" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Best overall no-code test automation platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.mabl.com/" rel="noopener noreferrer"&gt;mabl&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Strong low-code alternative for modern QA teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.browserstack.com/low-code-automation" rel="noopener noreferrer"&gt;BrowserStack Low Code Automation&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Teams that care heavily about browser and device coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a href="https://katalon.com/" rel="noopener noreferrer"&gt;Katalon&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Teams mixing manual testers and automation engineers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a href="https://testsigma.com/" rel="noopener noreferrer"&gt;Testsigma&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;AI-first test creation across several application types&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.accelq.com/" rel="noopener noreferrer"&gt;ACCELQ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Large enterprise testing programs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;a href="https://testrigor.com/" rel="noopener noreferrer"&gt;testRigor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Teams that like writing tests in plain English&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.testim.io/" rel="noopener noreferrer"&gt;Testim&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web and Salesforce testing with optional JavaScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.leapwork.com/" rel="noopener noreferrer"&gt;Leapwork&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Visual business-process automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.shiplight.ai/" rel="noopener noreferrer"&gt;Shiplight&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Developer teams using coding agents and Playwright&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If the goal is simply to choose one platform to try first, &lt;strong&gt;Endtest would be the pick&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That recommendation comes from what happened once the test cases became difficult, rather than from counting AI features on product pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small problem with the term "no-code"
&lt;/h2&gt;

&lt;p&gt;"No-code" has become a loose category.&lt;/p&gt;

&lt;p&gt;Some platforms let non-technical users build most tests visually but still expose JavaScript or another scripting layer for difficult cases. Others try to keep the whole workflow in natural language.&lt;/p&gt;

&lt;p&gt;Neither model is automatically better.&lt;/p&gt;

&lt;p&gt;Having an escape hatch is useful.&lt;/p&gt;

&lt;p&gt;The better question is how often you need it.&lt;/p&gt;

&lt;p&gt;For this article, a no-code tool is one where the normal way of building and maintaining a useful end-to-end suite does not require programming.&lt;/p&gt;

&lt;p&gt;Optional code is fine.&lt;/p&gt;

&lt;p&gt;Needing custom code every time the application does something unusual is where the label starts getting weaker.&lt;/p&gt;

&lt;h2&gt;
  
  
  The scenarios that matter
&lt;/h2&gt;

&lt;p&gt;Rather than comparing products with a basic search or login test, the hands-on portion of the evaluation used scenarios such as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Uploading a file from a form located inside an iframe&lt;/li&gt;
&lt;li&gt;Creating an account with email verification&lt;/li&gt;
&lt;li&gt;Dragging cards between columns&lt;/li&gt;
&lt;li&gt;Moving between multiple browser tabs&lt;/li&gt;
&lt;li&gt;Entering and leaving iframes&lt;/li&gt;
&lt;li&gt;Working with PDF files&lt;/li&gt;
&lt;li&gt;Creating and reusing variables&lt;/li&gt;
&lt;li&gt;Calling an API during an end-to-end test&lt;/li&gt;
&lt;li&gt;Changing the application's language and verifying the result&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;They are not exotic laboratory tests.&lt;/p&gt;

&lt;p&gt;Sooner or later, most large end-to-end suites contain things like these.&lt;/p&gt;

&lt;p&gt;They also expose an important difference between platforms. A tool may be excellent at creating straightforward tests and still become surprisingly awkward once a workflow stops being linear.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;a href="https://endtest.io/" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Endtest came out on top because it handled the full set of benchmark scenarios while staying inside the same test-authoring model.&lt;/p&gt;

&lt;p&gt;It supports several ways of building tests. A tester can record a browser session, add steps manually, or give its AI Test Creation Agent a scenario in plain English.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fagwi1huh02m28j3xjkz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fagwi1huh02m28j3xjkz2.png" alt="endtest new test" width="800" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The resulting test remains visible and editable rather than disappearing into an opaque AI workflow.&lt;/p&gt;

&lt;p&gt;That matters more than it initially sounds.&lt;/p&gt;

&lt;p&gt;AI test generation is becoming common. The question is what you have after the AI finishes.&lt;/p&gt;

&lt;p&gt;With Endtest, the result is still a normal test made of readable steps. A tester can change a locator, insert an assertion, use a variable, add conditional logic, call an API, or inspect exactly what the agent created.&lt;/p&gt;

&lt;p&gt;The platform also supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI assertions&lt;/li&gt;
&lt;li&gt;AI variables&lt;/li&gt;
&lt;li&gt;self-healing locators&lt;/li&gt;
&lt;li&gt;visual testing&lt;/li&gt;
&lt;li&gt;API testing&lt;/li&gt;
&lt;li&gt;email and SMS flows&lt;/li&gt;
&lt;li&gt;PDF testing&lt;/li&gt;
&lt;li&gt;accessibility checks&lt;/li&gt;
&lt;li&gt;web and mobile automation&lt;/li&gt;
&lt;li&gt;cross-browser execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The benchmark result was the biggest reason for putting it first: &lt;strong&gt;Endtest completed all nine scenarios&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There was another difference that showed up during execution.&lt;/p&gt;

&lt;p&gt;In the test suite used for this comparison, Endtest ran at approximately &lt;strong&gt;1.21 steps per second&lt;/strong&gt;. mabl averaged around &lt;strong&gt;0.38 steps per second&lt;/strong&gt; in the corresponding cloud runs.&lt;/p&gt;

&lt;p&gt;Those numbers should not be treated as a universal performance benchmark. Application speed, waits, geography, and test design can all change the result.&lt;/p&gt;

&lt;p&gt;Still, the gap was large enough to matter in this particular test set.&lt;/p&gt;

&lt;p&gt;There is also something refreshingly simple about the pricing.&lt;/p&gt;

&lt;p&gt;The Starter plan is currently listed at $175 per month. Endtest publishes its &lt;a href="https://endtest.io/pricing" rel="noopener noreferrer"&gt;pricing&lt;/a&gt; and includes unlimited test creation, unlimited executions, and unlimited users in its standard plans.&lt;/p&gt;

&lt;p&gt;The weak point is ecosystem size.&lt;/p&gt;

&lt;p&gt;BrowserStack has a much larger device-testing ecosystem. Katalon has a larger community around mixed code and no-code automation. A company that already standardized on one of those platforms may have a good reason to stay there.&lt;/p&gt;

&lt;p&gt;For a team starting from scratch, though, Endtest required the fewest compromises in this comparison.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt; teams that want serious web and mobile automation without building a traditional automation framework or hiring a large team to maintain it.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. &lt;a href="https://www.mabl.com/" rel="noopener noreferrer"&gt;mabl&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;mabl was the closest competitor.&lt;/p&gt;

&lt;p&gt;The authoring experience is polished, and the product is clearly built around the idea that testers and developers may work on the same automation suite.&lt;/p&gt;

&lt;p&gt;Tests can be created with point-and-click interactions or natural-language instructions. Developers who want more control can add JavaScript or Appium snippets and work alongside Playwright tests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0b9ynozqqrq7kasktfmd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0b9ynozqqrq7kasktfmd.png" alt="mabl variable" width="800" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the benchmark used here, &lt;strong&gt;mabl handled six of the nine scenarios directly&lt;/strong&gt;. The remaining three could be completed with workarounds.&lt;/p&gt;

&lt;p&gt;That is a respectable result.&lt;/p&gt;

&lt;p&gt;It also illustrates why feature matrices can be deceptive.&lt;/p&gt;

&lt;p&gt;Two platforms may both have a checkmark next to "file uploads" or "iframes," yet one might handle the exact workflow naturally while the other requires restructuring the test.&lt;/p&gt;

&lt;p&gt;mabl is especially appealing for organizations where QA engineers work closely with developers and nobody is particularly ideological about whether a test is no-code or low-code.&lt;/p&gt;

&lt;p&gt;The cloud execution speed was the main disappointment in this comparison. The runs used here averaged about &lt;strong&gt;0.38 steps per second&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Again, that is one test environment, so it would be a mistake to convert it into a general claim that every Endtest suite runs three times faster than every mabl suite.&lt;/p&gt;

&lt;p&gt;It was still noticeable.&lt;/p&gt;

&lt;p&gt;If Endtest were removed from this list, mabl would probably be the next platform to evaluate.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;a href="https://www.browserstack.com/low-code-automation" rel="noopener noreferrer"&gt;BrowserStack Low Code Automation&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;BrowserStack has something most specialized automation vendors cannot easily reproduce: its testing infrastructure.&lt;/p&gt;

&lt;p&gt;Its Low Code Automation product uses a recorder for test creation, supports natural-language AI interactions, provides self-healing capabilities, and runs through BrowserStack's cloud infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcia5at0i0zzid4jyk63k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcia5at0i0zzid4jyk63k.png" alt="browserstack low code recorder" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reports can include video, screenshots, console information, and network logs.&lt;/p&gt;

&lt;p&gt;For cross-browser work, that is a strong package.&lt;/p&gt;

&lt;p&gt;BrowserStack is particularly attractive when the difficult part of your testing problem is the environment matrix.&lt;/p&gt;

&lt;p&gt;You may need Chrome and Edge on Windows, Safari, several mobile browsers, and a long list of real phones.&lt;/p&gt;

&lt;p&gt;That has been BrowserStack's territory for years.&lt;/p&gt;

&lt;p&gt;There are a couple of details worth noticing during an evaluation.&lt;/p&gt;

&lt;p&gt;Some advanced workflows can still lead back to JavaScript. That makes the product feel more accurately described as low-code than completely no-code.&lt;/p&gt;

&lt;p&gt;There is nothing wrong with that. It just matters if the reason you are shopping for a platform is that your QA team specifically wants to avoid programming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt; teams where browser and real-device infrastructure matters just as much as the test editor.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. &lt;a href="https://katalon.com/" rel="noopener noreferrer"&gt;Katalon&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Katalon is harder to place on a list like this because it can be several different products depending on who is using it.&lt;/p&gt;

&lt;p&gt;A manual tester can work with record-and-playback and visual tooling.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh744zefiuxm6t7yf6kd2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh744zefiuxm6t7yf6kd2.png" alt="katalon recorder" width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More technical QA engineers can go deeper.&lt;/p&gt;

&lt;p&gt;Developers can write code.&lt;/p&gt;

&lt;p&gt;Katalon has also been adding AI features around requirements, test generation, execution, failure analysis, and bug reporting.&lt;/p&gt;

&lt;p&gt;That range is useful inside a large QA organization.&lt;/p&gt;

&lt;p&gt;It can also make the product feel heavier than a focused no-code platform.&lt;/p&gt;

&lt;p&gt;Katalon makes the most sense when a company does not want to choose between codeless testing and traditional automation.&lt;/p&gt;

&lt;p&gt;Different people can work at different levels of abstraction.&lt;/p&gt;

&lt;p&gt;The tradeoff is that there is more to learn.&lt;/p&gt;

&lt;p&gt;A small team that simply wants to describe a scenario and turn it into a maintainable end-to-end test may find Endtest or mabl more direct.&lt;/p&gt;

&lt;p&gt;A larger QA department with manual testers, automation engineers, and existing testing processes may prefer Katalon's breadth.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. &lt;a href="https://testsigma.com/" rel="noopener noreferrer"&gt;Testsigma&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Testsigma has become more interesting as it has moved further into agent-based testing.&lt;/p&gt;

&lt;p&gt;Its newer AI workflows can generate tests from plain English, requirements, and other artifacts.&lt;/p&gt;

&lt;p&gt;The platform covers web, mobile, APIs, and several enterprise application types.&lt;/p&gt;

&lt;p&gt;The appeal is straightforward: the starting point for automation can be material the team already has.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vdg7dihbsp706q1ph35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vdg7dihbsp706q1ph35.png" alt="testsigma new test" width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A company with Jira stories, requirements, and manual cases does not necessarily have to rebuild everything as automation by hand.&lt;/p&gt;

&lt;p&gt;The part worth testing carefully is what happens after generation.&lt;/p&gt;

&lt;p&gt;Ask to see the generated test.&lt;/p&gt;

&lt;p&gt;Change it.&lt;/p&gt;

&lt;p&gt;Break the application intentionally.&lt;/p&gt;

&lt;p&gt;Change an element.&lt;/p&gt;

&lt;p&gt;Add a conditional branch.&lt;/p&gt;

&lt;p&gt;See what the maintenance workflow feels like.&lt;/p&gt;

&lt;p&gt;The first AI-generated test is the easy part now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt; teams that want AI involved early in test design and already have a lot of written requirements or manual test cases.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. &lt;a href="https://www.accelq.com/" rel="noopener noreferrer"&gt;ACCELQ&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;ACCELQ has been pushing codeless automation for much longer than the latest wave of generative AI products.&lt;/p&gt;

&lt;p&gt;Its approach is built around natural-language test logic and reusable application models.&lt;/p&gt;

&lt;p&gt;The platform supports web interfaces, APIs, databases, and other enterprise systems, including end-to-end flows that cross more than one technical layer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyzza0qm97jzoyd08a43z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyzza0qm97jzoyd08a43z.png" alt="accelq test" width="799" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is one of the products where "enterprise" really does describe the problem it is trying to solve.&lt;/p&gt;

&lt;p&gt;Imagine an order that begins in a browser, triggers backend services, writes to a database, and eventually appears in another internal system.&lt;/p&gt;

&lt;p&gt;ACCELQ is comfortable in that kind of environment.&lt;/p&gt;

&lt;p&gt;That depth comes with more concepts and more setup than lighter tools.&lt;/p&gt;

&lt;p&gt;For a five-person SaaS company that wants to automate its regression suite, ACCELQ would probably be more platform than necessary.&lt;/p&gt;

&lt;p&gt;For an organization testing large business processes across multiple systems, it deserves a serious look.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. &lt;a href="https://testrigor.com/" rel="noopener noreferrer"&gt;testRigor&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;testRigor takes the plain-English idea further than most products.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsul2x3wb4xjtqojg8dl3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsul2x3wb4xjtqojg8dl3.png" alt="testrigor new test" width="799" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of building tests around conventional selectors, users write instructions closer to how a human would describe the action.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;click "Add to cart"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is easier to read than a long CSS selector or XPath expression.&lt;/p&gt;

&lt;p&gt;Readable tests matter.&lt;/p&gt;

&lt;p&gt;They are easier for someone new to the project to understand, and they reduce the gap between the person defining the requirement and the person automating it.&lt;/p&gt;

&lt;p&gt;The concern with any natural-language system is ambiguity.&lt;/p&gt;

&lt;p&gt;Humans are good at understanding imprecise instructions because we bring a large amount of context with us.&lt;/p&gt;

&lt;p&gt;Automation software still has to decide what those instructions mean.&lt;/p&gt;

&lt;p&gt;So when evaluating testRigor, skip the demo-shop examples and feed it workflows from your own application where two controls have similar names or where the page changes dynamically.&lt;/p&gt;

&lt;p&gt;If the natural-language model matches the way your application is structured, testRigor can be a very attractive no-code option.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. &lt;a href="https://www.testim.io/" rel="noopener noreferrer"&gt;Testim&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Testim is a mature product with a recorder, a visual editor, and AI-powered Smart Locators.&lt;/p&gt;

&lt;p&gt;It also gives users a real JavaScript editor when the visual tooling is not enough.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngkmkcob57xlzly2rxr0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngkmkcob57xlzly2rxr0.png" alt="testim ui" width="799" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tests can contain conditions, loops, reusable groups, and data-driven parameters.&lt;/p&gt;

&lt;p&gt;That makes Testim flexible.&lt;/p&gt;

&lt;p&gt;It also puts it firmly on the low-code side of the spectrum.&lt;/p&gt;

&lt;p&gt;The hands-on benchmark used for this comparison ran into problems with the specific iframe and multi-tab scenarios being tested.&lt;/p&gt;

&lt;p&gt;A custom-step workaround did not solve those particular flows.&lt;/p&gt;

&lt;p&gt;That should not be read as "Testim cannot use iframes or tabs."&lt;/p&gt;

&lt;p&gt;It means the tested workflows did not work cleanly in that evaluation.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;A vendor can support a capability in general while still struggling with your version of the problem.&lt;/p&gt;

&lt;p&gt;Testim becomes more interesting if Salesforce is involved. Tricentis has a dedicated &lt;a href="https://www.testim.io/salesforce-testing/" rel="noopener noreferrer"&gt;Testim Salesforce&lt;/a&gt; product aimed specifically at Lightning applications and Salesforce workflows.&lt;/p&gt;

&lt;p&gt;For conventional web applications, Testim remains capable.&lt;/p&gt;

&lt;p&gt;For Salesforce-heavy companies, its position on the shortlist gets stronger.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. &lt;a href="https://www.leapwork.com/" rel="noopener noreferrer"&gt;Leapwork&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Leapwork looks different from most of the tools above.&lt;/p&gt;

&lt;p&gt;Tests are built visually as flows made from connected building blocks. There is less emphasis on a traditional test-script metaphor.&lt;/p&gt;

&lt;p&gt;That can work particularly well when the thing being automated is already thought of as a business process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ficjzeeobii3d06xypslc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ficjzeeobii3d06xypslc.png" alt="leapwork new step" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A tester can look at the flow and understand how one action leads to the next without reading code.&lt;/p&gt;

&lt;p&gt;The same approach can cover applications beyond a normal browser-testing scenario, which is one reason Leapwork often appears in larger enterprise automation programs.&lt;/p&gt;

&lt;p&gt;The downside is that visual flows have their own learning curve.&lt;/p&gt;

&lt;p&gt;"No code" does not automatically mean "no complexity."&lt;/p&gt;

&lt;p&gt;A large visual workflow can become difficult to understand in the same way that a large codebase can.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt; organizations that prefer visual process modeling and need non-developers to understand or maintain automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. &lt;a href="https://www.shiplight.ai/" rel="noopener noreferrer"&gt;Shiplight&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Shiplight is the odd one on this list.&lt;/p&gt;

&lt;p&gt;"Agent-native" is probably a more accurate category than traditional no-code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9a26aui5q08kbaypt2o9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9a26aui5q08kbaypt2o9.png" alt="shiplight steps" width="800" height="626"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Shiplight installs into coding-agent environments such as Claude Code, Cursor, and Codex.&lt;/p&gt;

&lt;p&gt;The coding agent operates the browser and writes readable YAML tests. Those tests are ultimately executed through Playwright and can be converted into regular Playwright files.&lt;/p&gt;

&lt;p&gt;That is a very different workflow from giving a manual tester a visual automation editor.&lt;/p&gt;

&lt;p&gt;For a development team already spending its day inside an AI coding agent, the model makes sense.&lt;/p&gt;

&lt;p&gt;The test lives closer to the codebase.&lt;/p&gt;

&lt;p&gt;The coding agent can create it while working on the product.&lt;/p&gt;

&lt;p&gt;Playwright remains underneath.&lt;/p&gt;

&lt;p&gt;For a manual QA team looking for a browser recorder and a visual editor, Shiplight would not be the first recommendation.&lt;/p&gt;

&lt;p&gt;This is less a criticism than a category distinction.&lt;/p&gt;

&lt;p&gt;The interesting question over the next couple of years will be whether agent-native testing becomes a separate market or gets absorbed into existing test platforms.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Endtest ranked first
&lt;/h2&gt;

&lt;p&gt;The answer is fairly mundane.&lt;/p&gt;

&lt;p&gt;It ran the scenarios.&lt;/p&gt;

&lt;p&gt;That sounds obvious, but it is easy to lose sight of when evaluating software from landing pages.&lt;/p&gt;

&lt;p&gt;Endtest did well in the areas that matter after the demo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tests remained readable and editable after AI creation.&lt;/li&gt;
&lt;li&gt;The difficult browser scenarios in the benchmark worked.&lt;/li&gt;
&lt;li&gt;API, email, PDF, and data operations could stay inside the same test.&lt;/li&gt;
&lt;li&gt;Cross-browser execution did not require a separate infrastructure product.&lt;/li&gt;
&lt;li&gt;The measured cloud runs were fast.&lt;/li&gt;
&lt;li&gt;Pricing was public and relatively straightforward.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Endtest also allows loops, conditions, variables, database operations, and custom JavaScript from its editor, so there is still an escape hatch when a team wants one.&lt;/p&gt;

&lt;p&gt;The difference is that the escape hatch did not become the normal path during the scenarios used here.&lt;/p&gt;

&lt;p&gt;That is what a good no-code platform should aim for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The feature that matters more than AI test generation
&lt;/h2&gt;

&lt;p&gt;Test generation is getting cheap.&lt;/p&gt;

&lt;p&gt;Almost every serious platform on this list now has some combination of a recorder, natural-language generation, or an AI agent.&lt;/p&gt;

&lt;p&gt;A year or two ago, seeing a prompt turn into an automated browser test felt impressive.&lt;/p&gt;

&lt;p&gt;In 2026, it should be expected.&lt;/p&gt;

&lt;p&gt;Maintenance is harder.&lt;/p&gt;

&lt;p&gt;Create 500 tests and then change the application.&lt;/p&gt;

&lt;p&gt;Rename buttons.&lt;/p&gt;

&lt;p&gt;Move elements.&lt;/p&gt;

&lt;p&gt;Replace a checkout component.&lt;/p&gt;

&lt;p&gt;Change the navigation.&lt;/p&gt;

&lt;p&gt;Introduce a new authentication step.&lt;/p&gt;

&lt;p&gt;Now see how much work is required to get the suite green again.&lt;/p&gt;

&lt;p&gt;That exercise tells you far more about the long-term cost of a test automation platform than watching an agent create a checkout test.&lt;/p&gt;

&lt;p&gt;Self-healing deserves the same scrutiny.&lt;/p&gt;

&lt;p&gt;Ask what the product actually heals.&lt;/p&gt;

&lt;p&gt;Does it simply find an element after its CSS selector changes?&lt;/p&gt;

&lt;p&gt;Can it understand that an interaction changed?&lt;/p&gt;

&lt;p&gt;Does it silently modify the test?&lt;/p&gt;

&lt;p&gt;Can a tester review what changed?&lt;/p&gt;

&lt;p&gt;There is a substantial difference between recovering a locator and understanding a modified workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Take your worst tests into the trial
&lt;/h2&gt;

&lt;p&gt;This is probably the most useful advice in this article.&lt;/p&gt;

&lt;p&gt;Do not spend a product trial automating your homepage.&lt;/p&gt;

&lt;p&gt;Pick the test cases your current QA team hates.&lt;/p&gt;

&lt;p&gt;The ones everyone postpones.&lt;/p&gt;

&lt;p&gt;Maybe there is an iframe inside an iframe.&lt;/p&gt;

&lt;p&gt;Maybe clicking a button opens another tab.&lt;/p&gt;

&lt;p&gt;Maybe the flow waits for an email, extracts a link, downloads a PDF, and checks something inside it.&lt;/p&gt;

&lt;p&gt;Try those first.&lt;/p&gt;

&lt;p&gt;A platform that handles your five ugliest tests will almost certainly handle the easy 200.&lt;/p&gt;

&lt;p&gt;The reverse is not necessarily true.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which tool should you choose?
&lt;/h2&gt;

&lt;p&gt;For a general-purpose no-code platform, start with &lt;strong&gt;Endtest&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;mabl would be the next product to evaluate if you want a polished low-code workflow and close collaboration between QA and engineering.&lt;/p&gt;

&lt;p&gt;BrowserStack deserves extra attention when browser and real-device coverage dominate the buying decision.&lt;/p&gt;

&lt;p&gt;Katalon fits organizations that want manual, no-code, and coded automation living relatively close together.&lt;/p&gt;

&lt;p&gt;ACCELQ makes sense when testing crosses several enterprise systems.&lt;/p&gt;

&lt;p&gt;Testsigma and testRigor are both worth evaluating if plain-English creation is central to how the team wants to work.&lt;/p&gt;

&lt;p&gt;Testim becomes more compelling when Salesforce is part of the application stack.&lt;/p&gt;

&lt;p&gt;Leapwork suits organizations that think visually in terms of processes.&lt;/p&gt;

&lt;p&gt;Shiplight is interesting for developer teams that want the coding agent itself to own more of the testing workflow.&lt;/p&gt;

&lt;p&gt;There is no reason to narrow the decision down from screenshots and feature grids.&lt;/p&gt;

&lt;p&gt;Pick three.&lt;/p&gt;

&lt;p&gt;Give all three the same unpleasant test cases.&lt;/p&gt;

&lt;p&gt;Then keep the one that causes the least swearing.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the best no-code test automation tool in 2026?
&lt;/h3&gt;

&lt;p&gt;Endtest is the strongest general-purpose option in this comparison.&lt;/p&gt;

&lt;p&gt;It completed all nine scenarios in the hands-on benchmark and combines agentic test creation with an editable no-code test model, cross-browser execution, mobile testing, APIs, email/SMS testing, PDFs, and self-healing capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between no-code and low-code testing?
&lt;/h3&gt;

&lt;p&gt;A no-code platform expects the main test workflow to be created and maintained without programming.&lt;/p&gt;

&lt;p&gt;Low-code products do the same for common cases but deliberately expose scripting or programming features for more advanced situations.&lt;/p&gt;

&lt;p&gt;There is no clean industry boundary between the two terms, so it is more useful to ask how often your own tests require the coding layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can no-code tools handle complex end-to-end testing?
&lt;/h3&gt;

&lt;p&gt;Some can.&lt;/p&gt;

&lt;p&gt;The useful test is whether they can deal with things such as iframes, tabs, file uploads, emails, APIs, dynamic data, and non-trivial application state without requiring a custom script every few steps.&lt;/p&gt;

&lt;p&gt;That is why evaluating real workflows matters more than checking whether a product has a recorder.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can no-code testing replace Playwright or Selenium?
&lt;/h3&gt;

&lt;p&gt;For some teams, yes.&lt;/p&gt;

&lt;p&gt;A QA team that mainly needs maintainable end-to-end coverage may get better results from a managed no-code platform because browser infrastructure, reporting, maintenance, and authoring are already provided.&lt;/p&gt;

&lt;p&gt;A development team that wants tests stored entirely as source code, custom fixtures, unusual integrations, or complete control over execution may still prefer Playwright or Selenium.&lt;/p&gt;

&lt;p&gt;Neither approach is automatically better.&lt;/p&gt;

&lt;p&gt;They solve different organizational problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  What should you test during a free trial?
&lt;/h3&gt;

&lt;p&gt;Start with five difficult cases from your existing regression suite.&lt;/p&gt;

&lt;p&gt;Include dynamic elements, multiple tabs, iframes, uploads, external messages, or documents if your application uses them.&lt;/p&gt;

&lt;p&gt;Also change something in the application after the tests are created.&lt;/p&gt;

&lt;p&gt;Creating the test tells you about authoring.&lt;/p&gt;

&lt;p&gt;Breaking it tells you about the product.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>qa</category>
      <category>automation</category>
      <category>ai</category>
    </item>
    <item>
      <title>What If Your Test Automation Strategy Is Optimizing the Wrong Thing?</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Tue, 06 Oct 2026 10:01:57 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/the-test-passed-until-the-cookie-banner-showed-up-gi1</link>
      <guid>https://dev.to/mellowthunder735/the-test-passed-until-the-cookie-banner-showed-up-gi1</guid>
      <description>&lt;p&gt;Most test automation strategies are built around a few familiar goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create more tests&lt;/li&gt;
&lt;li&gt;run them faster&lt;/li&gt;
&lt;li&gt;increase coverage&lt;/li&gt;
&lt;li&gt;reduce manual QA&lt;/li&gt;
&lt;li&gt;catch bugs before production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All reasonable.&lt;/p&gt;

&lt;p&gt;But I think a lot of teams are optimizing the wrong part of the system.&lt;/p&gt;

&lt;p&gt;Because once your test suite gets large enough, the expensive part isn't necessarily &lt;strong&gt;writing the test&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And it isn't always &lt;strong&gt;running the test&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Something failed. Now how long does it take before a human actually understands why?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That number is usually invisible.&lt;/p&gt;

&lt;p&gt;Nobody puts it on the dashboard.&lt;/p&gt;

&lt;p&gt;Nobody brags about it in a product demo.&lt;/p&gt;

&lt;p&gt;And yet it might be one of the biggest costs in your entire automation strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test execution is cheap. Confusion is expensive.
&lt;/h2&gt;

&lt;p&gt;Imagine your CI runs 8,000 browser tests overnight.&lt;/p&gt;

&lt;p&gt;Forty fail.&lt;/p&gt;

&lt;p&gt;The dashboard looks bad, but the actual problem starts the next morning.&lt;/p&gt;

&lt;p&gt;Somebody now has to answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Is this a real bug?

Is this a test bug?

Is this a browser issue?

Did a third-party script interfere?

Did the environment change?

Did the page load differently?

Did a consent banner appear?

Did a WebSocket reconnect at the wrong moment?

Did the AI "repair" something incorrectly?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If each failure takes 20 minutes to understand, you've burned more than 13 engineering hours before anyone has fixed anything.&lt;/p&gt;

&lt;p&gt;The actual test run may have taken 30 minutes.&lt;/p&gt;

&lt;p&gt;So which number matters more?&lt;/p&gt;

&lt;h2&gt;
  
  
  We measure the wrong things because they're easier to measure
&lt;/h2&gt;

&lt;p&gt;Test automation dashboards love clean numbers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Execution time: 18m 42s
Pass rate: 98.7%
Coverage: 74%
Tests created this month: 312
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those are easy to count.&lt;/p&gt;

&lt;p&gt;But what about:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Average time to understand a failed test: 17 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Percentage of failures another engineer can reproduce
without talking to the test author: 41%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those metrics are much harder to measure.&lt;/p&gt;

&lt;p&gt;They're also much closer to the real cost of maintaining automation.&lt;/p&gt;

&lt;p&gt;There's an interesting &lt;a href="https://test-automation-tools.com/benchmark-plan-measuring-how-fast-teams-can-reconstruct-a-failed-browser-test-from-evidence-packs-logs-and-replay-data/" rel="noopener noreferrer"&gt;benchmark plan for measuring how quickly teams can reconstruct a failed browser test from evidence packs, logs, and replay data&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I think that's a much more interesting benchmark than shaving another three seconds off a test run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The browser is no longer just your application
&lt;/h2&gt;

&lt;p&gt;This is where things get messy.&lt;/p&gt;

&lt;p&gt;People still talk about browser tests as if the browser is loading &lt;em&gt;your page&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It's not.&lt;/p&gt;

&lt;p&gt;It's loading something more like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your application
+ analytics
+ tag manager
+ cookie consent
+ feature flags
+ chat widget
+ monitoring
+ payment scripts
+ A/B testing
+ whatever marketing added last Thursday
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now imagine one of those scripts loads slowly.&lt;/p&gt;

&lt;p&gt;Or not at all.&lt;/p&gt;

&lt;p&gt;Or in a different order.&lt;/p&gt;

&lt;p&gt;Or injects a banner.&lt;/p&gt;

&lt;p&gt;Or moves the layout.&lt;/p&gt;

&lt;p&gt;Or blocks a click.&lt;/p&gt;

&lt;p&gt;Your test fails with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Element not clickable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And everybody starts looking at the selector.&lt;/p&gt;

&lt;p&gt;The selector may be perfectly fine.&lt;/p&gt;

&lt;p&gt;The button may simply have a consent banner sitting on top of it.&lt;/p&gt;

&lt;p&gt;This guide on &lt;a href="https://testingradar.com/how-to-investigate-browser-test-failures-caused-by-third-party-scripts-tag-managers-and-consent-banners/" rel="noopener noreferrer"&gt;investigating browser test failures caused by third-party scripts, tag managers, and consent banners&lt;/a&gt; covers this category of failure in much more detail.&lt;/p&gt;

&lt;p&gt;The important lesson is bigger than cookie banners.&lt;/p&gt;

&lt;p&gt;A modern browser test is often testing an ecosystem, not just your frontend.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Page loaded" is becoming a meaningless concept
&lt;/h2&gt;

&lt;p&gt;Here's another assumption that quietly breaks automation.&lt;/p&gt;

&lt;p&gt;The page finished loading.&lt;/p&gt;

&lt;p&gt;So the page is ready.&lt;/p&gt;

&lt;p&gt;Not necessarily.&lt;/p&gt;

&lt;p&gt;A modern application might do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Navigation complete
    ↓
React hydration
    ↓
Feature flags loaded
    ↓
User state fetched
    ↓
WebSocket connected
    ↓
Live data arrives
    ↓
UI updates
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At which point is the application actually ready?&lt;/p&gt;

&lt;p&gt;That depends on what you're testing.&lt;/p&gt;

&lt;p&gt;If your test starts asserting against the UI between steps four and six, you can get failures that look random but are actually completely deterministic.&lt;/p&gt;

&lt;p&gt;You just happened to observe the application in a valid intermediate state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-time applications make this much worse
&lt;/h2&gt;

&lt;p&gt;WebSocket-heavy applications are a good example.&lt;/p&gt;

&lt;p&gt;Suppose your dashboard says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Open incidents: 12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then a WebSocket event arrives.&lt;/p&gt;

&lt;p&gt;Now it says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Open incidents: 13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fine.&lt;/p&gt;

&lt;p&gt;Now imagine this sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Socket disconnects
Reconnect begins
Two events arrive
UI renders one
Another event arrives
React rerenders
Assertion runs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You now have a race that may happen only occasionally.&lt;/p&gt;

&lt;p&gt;The test fails.&lt;/p&gt;

&lt;p&gt;Someone reruns it.&lt;/p&gt;

&lt;p&gt;It passes.&lt;/p&gt;

&lt;p&gt;"Flaky."&lt;/p&gt;

&lt;p&gt;Done.&lt;/p&gt;

&lt;p&gt;Except nothing was random.&lt;/p&gt;

&lt;p&gt;Your test just didn't model the application lifecycle correctly.&lt;/p&gt;

&lt;p&gt;There's a useful guide on &lt;a href="https://playwright-vs-selenium.com/how-to-test-websocket-driven-ui-updates-reconnect-states-and-live-data-races-in-playwright-and-selenium/" rel="noopener noreferrer"&gt;testing WebSocket-driven UI updates, reconnect states, and live data races in Playwright and Selenium&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These are the kinds of scenarios I'd use to evaluate an automation stack.&lt;/p&gt;

&lt;p&gt;Not whether it can fill in a login form.&lt;/p&gt;

&lt;h2&gt;
  
  
  More AI-generated tests may actually make this problem worse
&lt;/h2&gt;

&lt;p&gt;This is the part I think a lot of teams are going to discover over the next couple of years.&lt;/p&gt;

&lt;p&gt;AI makes test creation cheaper.&lt;/p&gt;

&lt;p&gt;That's useful.&lt;/p&gt;

&lt;p&gt;But if you make something cheaper, people usually do more of it.&lt;/p&gt;

&lt;p&gt;So instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;500 tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5,000 tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great.&lt;/p&gt;

&lt;p&gt;Now what happens when 83 fail after a deploy?&lt;/p&gt;

&lt;p&gt;The bottleneck moves.&lt;/p&gt;

&lt;p&gt;You didn't remove the maintenance problem.&lt;/p&gt;

&lt;p&gt;You moved it from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do we write enough tests?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do we understand what all these tests are telling us?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's why platform capabilities around failure evidence, CI stability, ownership, and handoff become much more important as test volume grows.&lt;/p&gt;

&lt;p&gt;This rubric on &lt;a href="https://thesdet.com/what-to-look-for-in-ai-testing-platforms-when-you-need-stable-ci-gates-shareable-failure-evidence-and-low-maintenance-ownership/" rel="noopener noreferrer"&gt;choosing a testing platform when you need stable CI gates, shareable failure evidence, and low-maintenance ownership&lt;/a&gt; looks at the problem from that angle.&lt;/p&gt;

&lt;p&gt;That sounds much less exciting than "AI writes your tests."&lt;/p&gt;

&lt;p&gt;But it's probably closer to the problem mature teams eventually have.&lt;/p&gt;

&lt;h2&gt;
  
  
  A passing test can be more dangerous than a failing one
&lt;/h2&gt;

&lt;p&gt;This is another uncomfortable part of AI-assisted testing.&lt;/p&gt;

&lt;p&gt;Let's say you have this step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Click "Delete Account"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The UI changes.&lt;/p&gt;

&lt;p&gt;The locator breaks.&lt;/p&gt;

&lt;p&gt;An AI system repairs the step by pointing it at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Deactivate Account
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The test runs.&lt;/p&gt;

&lt;p&gt;Everything passes.&lt;/p&gt;

&lt;p&gt;Your dashboard is green.&lt;/p&gt;

&lt;p&gt;Except the test is no longer testing the same thing.&lt;/p&gt;

&lt;p&gt;A failed test tells you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Something changed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A wrongly repaired test tells you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nothing changed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's worse.&lt;/p&gt;

&lt;p&gt;So if your platform supports automatic repair, I want answers to questions like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What changed?
Why was this replacement selected?
What was the original locator?
What is the new one?
Can I review the repair?
Can I reject it?
Can I see the first failure before the rerun?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the answer is no, then "self-healing" might be reducing visible failures while increasing invisible risk.&lt;/p&gt;

&lt;p&gt;That's not a trade I'd make blindly.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is why "best testing tool" is usually the wrong question
&lt;/h2&gt;

&lt;p&gt;People love asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What's the best test automation platform?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There usually isn't one.&lt;/p&gt;

&lt;p&gt;Different teams are optimizing for different things.&lt;/p&gt;

&lt;p&gt;One team may care about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fast authoring&lt;/li&gt;
&lt;li&gt;easy onboarding&lt;/li&gt;
&lt;li&gt;low maintenance&lt;/li&gt;
&lt;li&gt;fewer QA specialists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another may care about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;governance&lt;/li&gt;
&lt;li&gt;permissions&lt;/li&gt;
&lt;li&gt;reporting&lt;/li&gt;
&lt;li&gt;reusable components&lt;/li&gt;
&lt;li&gt;centralized administration&lt;/li&gt;
&lt;li&gt;broader QA workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's why a comparison like &lt;a href="https://aitestingcompare.com/mabl-vs-katalon-which-ai-test-automation-platform-fits-teams-that-need-faster-authoring-or-broader-qa-governance/" rel="noopener noreferrer"&gt;mabl vs Katalon&lt;/a&gt; is more useful when it frames the question as &lt;strong&gt;faster authoring versus broader governance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's an actual tradeoff.&lt;/p&gt;

&lt;p&gt;A score like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tool A: 9.1
Tool B: 8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is almost meaningless without knowing what the team cares about.&lt;/p&gt;

&lt;p&gt;Software teams don't buy scores.&lt;/p&gt;

&lt;p&gt;They buy operating models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feature matrices are becoming less useful too
&lt;/h2&gt;

&lt;p&gt;Most modern testing platforms can claim some version of this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI ✓
Cross-browser ✓
CI/CD ✓
Assertions ✓
Reports ✓
Self-healing ✓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Okay.&lt;/p&gt;

&lt;p&gt;Now show me what happens when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a third-party script blocks the page&lt;/li&gt;
&lt;li&gt;the WebSocket disconnects&lt;/li&gt;
&lt;li&gt;the UI hydrates slowly&lt;/li&gt;
&lt;li&gt;an iframe changes origin&lt;/li&gt;
&lt;li&gt;the browser opens another tab&lt;/li&gt;
&lt;li&gt;test data changes&lt;/li&gt;
&lt;li&gt;the locator repair picks the wrong element&lt;/li&gt;
&lt;li&gt;the test fails after 37 successful steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That tells me much more.&lt;/p&gt;

&lt;p&gt;There are some broader comparisons trying to test these tools against more realistic scenarios. For example, this independent review of &lt;a href="https://medium.com/@liviu.lupei/the-10-best-ai-powered-test-automation-tools-in-2026-a3297eeee058" rel="noopener noreferrer"&gt;10 AI-powered test automation tools in 2026&lt;/a&gt; looks at practical flows including iframes, file uploads, multiple tabs, email validation, variables, API calls, and language changes.&lt;/p&gt;

&lt;p&gt;That's the kind of evaluation I find more useful than another grid of checkmarks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here's the question I'd ask your QA team tomorrow
&lt;/h2&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How many tests do we have?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What's our pass rate?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not even:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How fast does CI run?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ask this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When a browser test fails, how long does it usually take us to know what actually happened?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And then ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Could someone who didn't write the test figure it out from the artifacts alone?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the answer to the second question is no, your automation strategy has a scaling problem.&lt;/p&gt;

&lt;p&gt;Because every failure now depends on tribal knowledge.&lt;/p&gt;

&lt;p&gt;That's fine with 50 tests.&lt;/p&gt;

&lt;p&gt;It's painful with 500.&lt;/p&gt;

&lt;p&gt;It's expensive with 5,000.&lt;/p&gt;

&lt;p&gt;And AI can get you from 500 to 5,000 surprisingly quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  A better automation benchmark
&lt;/h2&gt;

&lt;p&gt;If I were evaluating a testing platform today, I'd build one deliberately nasty scenario.&lt;/p&gt;

&lt;p&gt;Something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Start with an authenticated user
2. Trigger a consent banner
3. Load a third-party script
4. Connect to a WebSocket
5. Receive a live data update
6. Change network conditions
7. Disconnect the socket
8. Reconnect
9. Trigger a layout change
10. Intentionally cause a failure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I'd stop looking at the test runner.&lt;/p&gt;

&lt;p&gt;I'd give the output to someone else.&lt;/p&gt;

&lt;p&gt;Someone who didn't create the test.&lt;/p&gt;

&lt;p&gt;No walkthrough.&lt;/p&gt;

&lt;p&gt;No hints.&lt;/p&gt;

&lt;p&gt;No rerunning it five times.&lt;/p&gt;

&lt;p&gt;And I'd ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What broke?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then I'd start the clock.&lt;/p&gt;

&lt;p&gt;That number might tell you more about the value of the platform than most of the metrics you're tracking today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maybe the goal isn't more automation
&lt;/h2&gt;

&lt;p&gt;This is the part I think is worth questioning.&lt;/p&gt;

&lt;p&gt;A lot of teams treat "more automation" as automatically better.&lt;/p&gt;

&lt;p&gt;But automation isn't the goal.&lt;/p&gt;

&lt;p&gt;The goal is reducing uncertainty.&lt;/p&gt;

&lt;p&gt;A test that fails and creates 30 minutes of confusion isn't necessarily saving you much.&lt;/p&gt;

&lt;p&gt;A test that fails and immediately explains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The checkout button became inaccessible
after the consent layer loaded.
Here is the screenshot.
Here is the DOM.
Here are the console logs.
Here is the network activity.
Here is the exact sequence that reproduced it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is incredibly valuable.&lt;/p&gt;

&lt;p&gt;So maybe your next test automation project shouldn't be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do we generate 2x more tests?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Maybe it should be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do we make every failure 5x easier to understand?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because once test creation gets cheap enough, that's probably where the real bottleneck moves.&lt;/p&gt;

&lt;p&gt;And if your current strategy doesn't account for that, you may be optimizing a number that stopped mattering a while ago.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>qa</category>
      <category>automation</category>
      <category>playwright</category>
    </item>
    <item>
      <title>The Boring Part of Test Automation That Matters More Than AI</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Fri, 02 Oct 2026 17:51:15 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/the-boring-part-of-test-automation-that-matters-more-than-ai-1h40</link>
      <guid>https://dev.to/mellowthunder735/the-boring-part-of-test-automation-that-matters-more-than-ai-1h40</guid>
      <description>&lt;p&gt;Every few months, test automation gets a new shiny object.&lt;/p&gt;

&lt;p&gt;First it was Selenium.&lt;/p&gt;

&lt;p&gt;Then Cypress.&lt;/p&gt;

&lt;p&gt;Then Playwright.&lt;/p&gt;

&lt;p&gt;Now everything has AI attached to it.&lt;/p&gt;

&lt;p&gt;AI-generated tests. AI self-healing. AI agents clicking around your application. AI deciding what should be tested. AI deciding whether a test actually failed.&lt;/p&gt;

&lt;p&gt;And some of this stuff is genuinely useful.&lt;/p&gt;

&lt;p&gt;But after working with test automation for long enough, I've become increasingly convinced that one of the biggest problems isn't &lt;strong&gt;creating tests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's answering a much less exciting question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When a test fails, can another human figure out what actually happened?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sounds boring.&lt;/p&gt;

&lt;p&gt;It is boring.&lt;/p&gt;

&lt;p&gt;It's also where a surprising amount of engineering time disappears.&lt;/p&gt;

&lt;h2&gt;
  
  
  A failed test is not the same thing as useful information
&lt;/h2&gt;

&lt;p&gt;Imagine your CI pipeline tells you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Checkout test failed.

Element not found:
#place-order-button
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Okay.&lt;/p&gt;

&lt;p&gt;Now what?&lt;/p&gt;

&lt;p&gt;Was the button missing?&lt;/p&gt;

&lt;p&gt;Was the checkout page still loading?&lt;/p&gt;

&lt;p&gt;Was the user redirected?&lt;/p&gt;

&lt;p&gt;Did an experiment change the DOM?&lt;/p&gt;

&lt;p&gt;Did a cookie banner cover the button?&lt;/p&gt;

&lt;p&gt;Did the test end up inside the wrong iframe?&lt;/p&gt;

&lt;p&gt;Did the application return a 500?&lt;/p&gt;

&lt;p&gt;Did the browser resize and trigger an entirely different layout?&lt;/p&gt;

&lt;p&gt;Was there a JavaScript error?&lt;/p&gt;

&lt;p&gt;Or did the test simply click too early?&lt;/p&gt;

&lt;p&gt;The red &lt;code&gt;FAILED&lt;/code&gt; label is usually the least interesting part of the failure.&lt;/p&gt;

&lt;p&gt;The interesting part is the evidence around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test automation has an evidence problem
&lt;/h2&gt;

&lt;p&gt;A good failure should ideally give you enough context that you don't need to immediately rerun the test locally.&lt;/p&gt;

&lt;p&gt;At minimum, I want some combination of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the exact failed step&lt;/li&gt;
&lt;li&gt;screenshots&lt;/li&gt;
&lt;li&gt;browser console output&lt;/li&gt;
&lt;li&gt;network information&lt;/li&gt;
&lt;li&gt;page source or DOM state&lt;/li&gt;
&lt;li&gt;browser and operating system&lt;/li&gt;
&lt;li&gt;timestamps&lt;/li&gt;
&lt;li&gt;previous steps&lt;/li&gt;
&lt;li&gt;test data&lt;/li&gt;
&lt;li&gt;video when useful&lt;/li&gt;
&lt;li&gt;enough environment information to reproduce the run&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This becomes even more important once the person investigating the failure isn't the person who created the test.&lt;/p&gt;

&lt;p&gt;That's common in larger teams.&lt;/p&gt;

&lt;p&gt;It's basically guaranteed if you're outsourcing QA.&lt;/p&gt;

&lt;p&gt;There's a good breakdown of this problem in &lt;a href="https://automated-testing-services.com/how-to-define-a-test-evidence-standard-for-outsourced-qa-so-developers-can-reproduce-failures-without-a-live-walkthrough/" rel="noopener noreferrer"&gt;The Evidence Standard That Makes Outsourced QA Bugs Reproducible&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The central idea is simple: a bug report shouldn't require a Zoom call to become useful.&lt;/p&gt;

&lt;p&gt;The same should be true for an automated test failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI actually makes this problem more important
&lt;/h2&gt;

&lt;p&gt;Here's the funny part.&lt;/p&gt;

&lt;p&gt;As AI makes test creation cheaper, we're probably going to create &lt;strong&gt;more tests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Which means:&lt;/p&gt;

&lt;p&gt;More executions.&lt;/p&gt;

&lt;p&gt;More failures.&lt;/p&gt;

&lt;p&gt;More flaky failures.&lt;/p&gt;

&lt;p&gt;More unusual edge cases.&lt;/p&gt;

&lt;p&gt;And therefore more things somebody has to investigate.&lt;/p&gt;

&lt;p&gt;Generating 500 tests sounds impressive until 37 of them fail overnight and your engineering team spends Tuesday morning figuring out which four failures are real.&lt;/p&gt;

&lt;p&gt;This is why I'd pay attention to how AI testing platforms handle evidence and review workflows, not just how impressive their test-generation demo looks.&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://aitestingreport.com/benchmark-plan-comparing-ai-testing-platforms-on-audit-pack-completeness-evidence-exports-and-reproducible-review-handoffs/" rel="noopener noreferrer"&gt;benchmark plan for AI testing platforms&lt;/a&gt; takes an interesting approach by looking at audit-pack completeness, evidence exports, and whether another person can actually reproduce what happened.&lt;/p&gt;

&lt;p&gt;That's a much more useful benchmark than:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We asked the AI to test a todo app and it found three bugs."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Modern web apps are making failures weirder
&lt;/h2&gt;

&lt;p&gt;Web applications aren't getting simpler either.&lt;/p&gt;

&lt;p&gt;Consider something as ordinary as an embedded payment form.&lt;/p&gt;

&lt;p&gt;It may be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your application
    ↓
iframe
    ↓
cross-origin payment widget
    ↓
dynamic authentication flow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When automation fails somewhere inside that stack, &lt;code&gt;"element not found"&lt;/code&gt; tells you almost nothing.&lt;/p&gt;

&lt;p&gt;Cross-origin frames and embedded widgets deserve their own testing strategy. There's a detailed &lt;a href="https://bugbench.com/benchmark-plan-comparing-browser-testing-platforms-on-cross-origin-iframes-embedded-widgets-and-frame-switch-failure-evidence/" rel="noopener noreferrer"&gt;browser testing benchmark focused specifically on cross-origin iframes, embedded widgets, and frame-switch failure evidence&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These are exactly the kinds of scenarios I'd include when evaluating a testing platform.&lt;/p&gt;

&lt;p&gt;Not another login form.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layout is becoming state
&lt;/h2&gt;

&lt;p&gt;Here's another category of failures that can waste hours.&lt;/p&gt;

&lt;p&gt;A test works perfectly.&lt;/p&gt;

&lt;p&gt;Then someone introduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ResizeObserver&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;container queries&lt;/li&gt;
&lt;li&gt;hydration&lt;/li&gt;
&lt;li&gt;responsive rendering&lt;/li&gt;
&lt;li&gt;lazy-loaded components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And suddenly the button that was clickable 100 milliseconds ago is somewhere else.&lt;/p&gt;

&lt;p&gt;Or the DOM node gets recreated.&lt;/p&gt;

&lt;p&gt;Or a component appears before hydration finishes and then disappears.&lt;/p&gt;

&lt;p&gt;If you've encountered tests that mysteriously fail after responsive or hydration changes, this guide on &lt;a href="https://browserslack.com/how-to-debug-browser-tests-that-fail-only-after-resizeobserver-container-queries-or-hydration-reflow-changes-the-layout/" rel="noopener noreferrer"&gt;debugging browser tests after ResizeObserver, container queries, or hydration reflow&lt;/a&gt; is worth reading.&lt;/p&gt;

&lt;p&gt;The broader lesson is that screenshots alone aren't always sufficient.&lt;/p&gt;

&lt;p&gt;You need enough evidence to reconstruct &lt;strong&gt;how the page got into that state&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The edge cases are where automation platforms separate themselves
&lt;/h2&gt;

&lt;p&gt;Almost every browser automation product can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;open Google&lt;/li&gt;
&lt;li&gt;type something&lt;/li&gt;
&lt;li&gt;click a button&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's no longer an interesting benchmark.&lt;/p&gt;

&lt;p&gt;I want to know what happens when the browser is doing something annoying.&lt;/p&gt;

&lt;p&gt;For example, what happens under bandwidth constraints?&lt;/p&gt;

&lt;p&gt;Testing &lt;code&gt;prefers-reduced-data&lt;/code&gt; and slow connections introduces a completely different set of timing problems. &lt;a href="https://bughuntersclub.com/how-to-test-prefers-reduced-data-slow-network-fallbacks-and-bandwidth-sensitive-ui-without-chasing-timing-flakes/" rel="noopener noreferrer"&gt;This guide covers testing slow-network and bandwidth-sensitive interfaces without turning the suite into a collection of timing flakes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Or consider browser storage.&lt;/p&gt;

&lt;p&gt;What happens when this happens?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;veryLargeValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the browser replies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;QuotaExceededError
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Does your application recover gracefully?&lt;/p&gt;

&lt;p&gt;Does your automated test even know what happened?&lt;/p&gt;

&lt;p&gt;There's a useful walkthrough on &lt;a href="https://web-developer-reviews.com/how-to-test-quotaexceedederror-storage-limits-and-graceful-fallbacks-in-browser-automation/" rel="noopener noreferrer"&gt;testing QuotaExceededError, browser storage limits, and graceful fallbacks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These aren't exotic theoretical scenarios.&lt;/p&gt;

&lt;p&gt;They're the exact cases where "works on my machine" starts becoming expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infinite lists are another great example
&lt;/h2&gt;

&lt;p&gt;Virtualized lists are fantastic for application performance.&lt;/p&gt;

&lt;p&gt;They're also wonderfully annoying to automate.&lt;/p&gt;

&lt;p&gt;The test may believe it saw 20 rows.&lt;/p&gt;

&lt;p&gt;The user thinks there are 2,000.&lt;/p&gt;

&lt;p&gt;Then the framework recycles those 20 DOM elements while you scroll.&lt;/p&gt;

&lt;p&gt;Now you're testing a UI where:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DOM element ≠ permanent record
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That changes how you should think about assertions, scrolling, selectors, and screenshots.&lt;/p&gt;

&lt;p&gt;There's a solid guide to &lt;a href="https://testautomationguide.com/how-to-test-virtualized-infinite-lists-without-missing-recycled-rows-loading-gaps-or-offscreen-click-bugs/" rel="noopener noreferrer"&gt;testing virtualized infinite lists without missing recycled rows, loading gaps, or offscreen click bugs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Again, these are the tests I'd run before choosing a tool.&lt;/p&gt;

&lt;p&gt;Not whether its landing page says "AI-powered."&lt;/p&gt;

&lt;h2&gt;
  
  
  And then there's state
&lt;/h2&gt;

&lt;p&gt;State is responsible for an absurd number of test failures.&lt;/p&gt;

&lt;p&gt;Cookies.&lt;/p&gt;

&lt;p&gt;Local storage.&lt;/p&gt;

&lt;p&gt;Accounts.&lt;/p&gt;

&lt;p&gt;Feature flags.&lt;/p&gt;

&lt;p&gt;Experiments.&lt;/p&gt;

&lt;p&gt;Cached resources.&lt;/p&gt;

&lt;p&gt;Previous executions.&lt;/p&gt;

&lt;p&gt;A test that leaves state behind isn't really an independent test anymore.&lt;/p&gt;

&lt;p&gt;Feature flags make this especially interesting.&lt;/p&gt;

&lt;p&gt;Suppose you test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Flag OFF → old checkout
Flag ON  → new checkout
Flag OFF → old checkout again
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That third state matters.&lt;/p&gt;

&lt;p&gt;You aren't just verifying that a feature flag works.&lt;/p&gt;

&lt;p&gt;You're verifying that it &lt;strong&gt;rolls back cleanly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This walkthrough on &lt;a href="https://qatoolguide.com/how-to-test-feature-flag-rollbacks-in-browser-automation-without-carrying-state-between-runs/" rel="noopener noreferrer"&gt;testing feature-flag rollbacks without carrying state between browser automation runs&lt;/a&gt; covers the issue in more depth.&lt;/p&gt;

&lt;p&gt;It's a small detail until your release process depends on rolling a bad feature back at 2:00 AM.&lt;/p&gt;

&lt;p&gt;Then it stops being a small detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test results should help you make a decision
&lt;/h2&gt;

&lt;p&gt;This is ultimately where I think QA tooling gets evaluated incorrectly.&lt;/p&gt;

&lt;p&gt;People compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;recorder quality&lt;/li&gt;
&lt;li&gt;AI generation&lt;/li&gt;
&lt;li&gt;number of integrations&lt;/li&gt;
&lt;li&gt;supported browsers&lt;/li&gt;
&lt;li&gt;pricing&lt;/li&gt;
&lt;li&gt;whether there's a nice dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those matter.&lt;/p&gt;

&lt;p&gt;But your testing system ultimately exists to answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can we ship this?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And when the answer is "maybe," it needs to show you why.&lt;/p&gt;

&lt;p&gt;A useful failure should be able to move through something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Automated test
      ↓
Failure evidence
      ↓
Developer / QA review
      ↓
Jira / GitHub / Slack
      ↓
Decision
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If information gets lost between those steps, the automation isn't saving as much time as you think.&lt;/p&gt;

&lt;p&gt;There's a useful overview of &lt;a href="https://test-automation-tools.com/what-to-look-for-in-qa-platforms-for-release-sign-off-jira-escalations-and-slack-friendly-triage/" rel="noopener noreferrer"&gt;what to look for in QA platforms used for release sign-off, Jira escalations, and Slack-friendly triage&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I like this framing because it evaluates testing software as part of an engineering process rather than as an isolated test runner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Autonomy vs. control is another real tradeoff
&lt;/h2&gt;

&lt;p&gt;AI testing products are also starting to split into different philosophies.&lt;/p&gt;

&lt;p&gt;Some aim for:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Give us your application and we'll figure everything out.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Others are closer to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We'll automate a lot, but you still control the scenarios, environments, and browser coverage.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Neither approach is automatically better.&lt;/p&gt;

&lt;p&gt;They're solving slightly different problems.&lt;/p&gt;

&lt;p&gt;For example, this &lt;a href="https://aitestingcompare.com/qa-tech-vs-octomind-which-ai-native-testing-platform-fits-teams-that-want-faster-autonomy-or-more-control-over-browser-coverage/" rel="noopener noreferrer"&gt;QA.tech vs Octomind comparison&lt;/a&gt; frames the decision around autonomy versus control over browser coverage.&lt;/p&gt;

&lt;p&gt;That's the kind of tradeoff teams should actually discuss.&lt;/p&gt;

&lt;p&gt;If you're running a small SaaS with three engineers, maximum autonomy may be exactly what you want.&lt;/p&gt;

&lt;p&gt;If you're testing a mature application with payments, iframes, multiple tabs, complicated state, permission levels, and several supported browsers, control may matter a lot more.&lt;/p&gt;

&lt;h2&gt;
  
  
  My boring test for testing tools
&lt;/h2&gt;

&lt;p&gt;So here's the evaluation I'd use.&lt;/p&gt;

&lt;p&gt;Take a genuinely ugly flow.&lt;/p&gt;

&lt;p&gt;Something with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an iframe&lt;/li&gt;
&lt;li&gt;multiple browser contexts&lt;/li&gt;
&lt;li&gt;dynamic content&lt;/li&gt;
&lt;li&gt;an API call&lt;/li&gt;
&lt;li&gt;a responsive layout change&lt;/li&gt;
&lt;li&gt;persisted state&lt;/li&gt;
&lt;li&gt;a deliberately introduced failure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then run it.&lt;/p&gt;

&lt;p&gt;Don't watch the successful execution.&lt;/p&gt;

&lt;p&gt;Break it.&lt;/p&gt;

&lt;p&gt;Now hand the failure report to someone who didn't create the test.&lt;/p&gt;

&lt;p&gt;And ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can you tell me what happened?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No screen sharing.&lt;/p&gt;

&lt;p&gt;No rerunning it five times.&lt;/p&gt;

&lt;p&gt;No asking the person who wrote the test.&lt;/p&gt;

&lt;p&gt;Just the evidence.&lt;/p&gt;

&lt;p&gt;If they can understand the failure and reproduce it, you've got something useful.&lt;/p&gt;

&lt;p&gt;If they can't, it doesn't really matter how quickly the AI created the test.&lt;/p&gt;

&lt;p&gt;Because test creation is only the first few minutes of a test's life.&lt;/p&gt;

&lt;p&gt;You'll be debugging and maintaining it for the next three years.&lt;/p&gt;

&lt;p&gt;And that's the boring part nobody puts in the demo.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>qa</category>
      <category>testing</category>
      <category>automation</category>
    </item>
    <item>
      <title>AI Test Automation Is Easy to Demo. Reliability Is the Hard Part.</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Sat, 19 Sep 2026 21:49:06 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/ai-test-automation-is-easy-to-demo-reliability-is-the-hard-part-24dn</link>
      <guid>https://dev.to/mellowthunder735/ai-test-automation-is-easy-to-demo-reliability-is-the-hard-part-24dn</guid>
      <description>&lt;p&gt;There is a version of AI test automation that looks almost magical.&lt;/p&gt;

&lt;p&gt;You open a website.&lt;/p&gt;

&lt;p&gt;You tell an AI agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Test the checkout flow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It clicks around for a few minutes, creates some tests, finds a broken button, and hands you a report.&lt;/p&gt;

&lt;p&gt;If you're evaluating testing tools, this is an impressive demo.&lt;/p&gt;

&lt;p&gt;But there is an awkward question that usually doesn't get answered during the demo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens after you run those tests 500 times?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because creating an automated test has never really been the difficult part.&lt;/p&gt;

&lt;p&gt;Keeping it useful is.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cost of creating tests is collapsing
&lt;/h2&gt;

&lt;p&gt;Ten years ago, creating a serious end-to-end test suite usually meant writing a lot of Selenium code.&lt;/p&gt;

&lt;p&gt;Then came better frameworks.&lt;/p&gt;

&lt;p&gt;Then low-code and no-code tools.&lt;/p&gt;

&lt;p&gt;Then recorders.&lt;/p&gt;

&lt;p&gt;Now we have AI agents that can inspect an application, understand a natural-language instruction, identify elements, generate assertions, and sometimes even repair tests when the UI changes.&lt;/p&gt;

&lt;p&gt;That is real progress.&lt;/p&gt;

&lt;p&gt;A QA engineer who previously spent an afternoon creating a complicated workflow might now create it in twenty minutes.&lt;/p&gt;

&lt;p&gt;A developer who doesn't know much about Selenium locators can describe what they want tested in plain English.&lt;/p&gt;

&lt;p&gt;And a small startup that never had enough QA resources can potentially automate workflows that previously remained entirely manual.&lt;/p&gt;

&lt;p&gt;All of this is good.&lt;/p&gt;

&lt;p&gt;But it also changes where the bottleneck lives.&lt;/p&gt;

&lt;p&gt;When generating tests becomes cheap, &lt;strong&gt;maintaining trust in those tests becomes expensive&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A test that passes once tells you almost nothing
&lt;/h2&gt;

&lt;p&gt;Imagine you build a test that does this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create an account.&lt;/li&gt;
&lt;li&gt;Verify the email address.&lt;/li&gt;
&lt;li&gt;Add a product to the cart.&lt;/li&gt;
&lt;li&gt;Apply a discount code.&lt;/li&gt;
&lt;li&gt;Complete checkout.&lt;/li&gt;
&lt;li&gt;Verify the confirmation email.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You run it.&lt;/p&gt;

&lt;p&gt;Green.&lt;/p&gt;

&lt;p&gt;Great.&lt;/p&gt;

&lt;p&gt;Then you run it tomorrow.&lt;/p&gt;

&lt;p&gt;Green again.&lt;/p&gt;

&lt;p&gt;Still great.&lt;/p&gt;

&lt;p&gt;Now put it in your CI/CD pipeline and run it hundreds of times across Chrome, Firefox, Safari, different screen resolutions, and different test environments.&lt;/p&gt;

&lt;p&gt;Things start getting interesting.&lt;/p&gt;

&lt;p&gt;The application takes two seconds longer to load.&lt;/p&gt;

&lt;p&gt;An API rate limit kicks in.&lt;/p&gt;

&lt;p&gt;A third-party authentication provider responds slowly.&lt;/p&gt;

&lt;p&gt;A cookie banner appears only in one geography.&lt;/p&gt;

&lt;p&gt;A browser update changes timing behavior.&lt;/p&gt;

&lt;p&gt;The test account already exists.&lt;/p&gt;

&lt;p&gt;A download takes seven seconds instead of three.&lt;/p&gt;

&lt;p&gt;The application opens a link in another tab.&lt;/p&gt;

&lt;p&gt;An iframe loads after the test already tried to interact with it.&lt;/p&gt;

&lt;p&gt;Suddenly your elegant AI-generated test isn't really testing the application anymore.&lt;/p&gt;

&lt;p&gt;It's testing your ability to keep the test alive.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is why flaky tests are more dangerous than missing tests
&lt;/h2&gt;

&lt;p&gt;A missing test is obvious.&lt;/p&gt;

&lt;p&gt;Everyone knows the workflow isn't covered.&lt;/p&gt;

&lt;p&gt;A flaky test is worse because it slowly trains the team to ignore the test suite.&lt;/p&gt;

&lt;p&gt;It usually happens gradually.&lt;/p&gt;

&lt;p&gt;At first, one test fails occasionally.&lt;/p&gt;

&lt;p&gt;Someone reruns it.&lt;/p&gt;

&lt;p&gt;Green.&lt;/p&gt;

&lt;p&gt;Then three tests behave that way.&lt;/p&gt;

&lt;p&gt;Eventually someone says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;CI is red, but it's probably just the tests.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sentence is the beginning of the end for an automation suite.&lt;/p&gt;

&lt;p&gt;Once developers stop believing that a failure represents a real problem, your tests become expensive background noise.&lt;/p&gt;

&lt;p&gt;This is why I think one of the most important metrics for an AI testing platform isn't how quickly it can &lt;strong&gt;generate&lt;/strong&gt; tests.&lt;/p&gt;

&lt;p&gt;It's how effectively it helps you understand and maintain them after generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI-generated tests still need evidence
&lt;/h2&gt;

&lt;p&gt;Suppose an AI agent tells you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Checkout failed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's useful.&lt;/p&gt;

&lt;p&gt;But the next question is obvious.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A serious testing system should give you enough evidence to answer that question without recreating the entire execution manually.&lt;/p&gt;

&lt;p&gt;That can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;screenshots&lt;/li&gt;
&lt;li&gt;video recordings&lt;/li&gt;
&lt;li&gt;browser console logs&lt;/li&gt;
&lt;li&gt;network information&lt;/li&gt;
&lt;li&gt;page source&lt;/li&gt;
&lt;li&gt;timestamps&lt;/li&gt;
&lt;li&gt;test data&lt;/li&gt;
&lt;li&gt;environment configuration&lt;/li&gt;
&lt;li&gt;the exact step that failed&lt;/li&gt;
&lt;li&gt;the locator or element that was used&lt;/li&gt;
&lt;li&gt;execution history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This becomes even more important when AI is involved.&lt;/p&gt;

&lt;p&gt;If an AI agent automatically changes a locator, retries a step, or decides that another element is equivalent to the original one, you need visibility into what happened.&lt;/p&gt;

&lt;p&gt;Otherwise self-healing can quietly turn into self-hiding.&lt;/p&gt;

&lt;p&gt;A test that remains green by changing its own interpretation of the expected behavior is not necessarily a healthy test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-healing should repair implementation details, not requirements
&lt;/h2&gt;

&lt;p&gt;There is an important distinction here.&lt;/p&gt;

&lt;p&gt;Imagine your application changes this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"checkout-button"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;data-testid=&lt;/span&gt;&lt;span class="s"&gt;"complete-order"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The behavior is identical.&lt;/p&gt;

&lt;p&gt;A testing system finding the new element automatically can be extremely useful.&lt;/p&gt;

&lt;p&gt;Now imagine the product team removes the checkout confirmation message entirely.&lt;/p&gt;

&lt;p&gt;If the AI decides:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I can't find the confirmation message, but I found the order history page, so I'll consider that equivalent.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's very different.&lt;/p&gt;

&lt;p&gt;The first example repairs a locator.&lt;/p&gt;

&lt;p&gt;The second example changes the meaning of the test.&lt;/p&gt;

&lt;p&gt;Good AI-assisted automation needs a boundary between the two.&lt;/p&gt;

&lt;p&gt;AI can help maintain &lt;em&gt;how&lt;/em&gt; a test interacts with the application.&lt;/p&gt;

&lt;p&gt;It should be much more conservative about changing &lt;em&gt;what the test is proving&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The best test isn't necessarily the smartest test
&lt;/h2&gt;

&lt;p&gt;There is another trap with AI-generated automation.&lt;/p&gt;

&lt;p&gt;Because AI can generate complicated scenarios quickly, teams are tempted to create complicated scenarios everywhere.&lt;/p&gt;

&lt;p&gt;But boring tests are often better tests.&lt;/p&gt;

&lt;p&gt;A small, deterministic workflow that validates one important business function can be much more valuable than a huge autonomous agent exploring half the application.&lt;/p&gt;

&lt;p&gt;You want tests where a failure produces a useful signal.&lt;/p&gt;

&lt;p&gt;If a 45-step AI-generated journey fails on step 38, you now need to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether step 38 is broken&lt;/li&gt;
&lt;li&gt;whether step 12 corrupted state&lt;/li&gt;
&lt;li&gt;whether the AI chose the wrong path&lt;/li&gt;
&lt;li&gt;whether test data changed&lt;/li&gt;
&lt;li&gt;whether the environment caused the failure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's a lot of uncertainty.&lt;/p&gt;

&lt;p&gt;Sometimes five smaller tests would have been better.&lt;/p&gt;

&lt;p&gt;AI changes the economics of test creation.&lt;/p&gt;

&lt;p&gt;It doesn't repeal the engineering principles behind good automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluate test automation tools after the honeymoon period
&lt;/h2&gt;

&lt;p&gt;When teams evaluate testing platforms, the first evaluation is usually something like:&lt;/p&gt;

&lt;p&gt;"Can this tool automate our login and checkout flows?"&lt;/p&gt;

&lt;p&gt;That's reasonable.&lt;/p&gt;

&lt;p&gt;But almost every mature testing platform can automate a login form.&lt;/p&gt;

&lt;p&gt;The more revealing questions come later.&lt;/p&gt;

&lt;p&gt;What happens when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the UI changes?&lt;/li&gt;
&lt;li&gt;a locator matches three elements?&lt;/li&gt;
&lt;li&gt;the application becomes slower?&lt;/li&gt;
&lt;li&gt;the test needs a dynamically generated email address?&lt;/li&gt;
&lt;li&gt;a file has to be uploaded?&lt;/li&gt;
&lt;li&gt;a PDF gets downloaded?&lt;/li&gt;
&lt;li&gt;the workflow opens another browser tab?&lt;/li&gt;
&lt;li&gt;authentication expires halfway through the test?&lt;/li&gt;
&lt;li&gt;the same suite runs in CI instead of someone's laptop?&lt;/li&gt;
&lt;li&gt;Chrome ships an update?&lt;/li&gt;
&lt;li&gt;a test fails only on Windows?&lt;/li&gt;
&lt;li&gt;twenty tests fail at once?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those scenarios tell you much more about a testing platform than watching an AI agent successfully click a Sign In button.&lt;/p&gt;

&lt;p&gt;If you're currently comparing platforms, the report &lt;strong&gt;&lt;a href="https://notebook.google.com/notebook/38a651a1-30ab-446c-97ff-01cdd667a2b0/artifact/103744f2-5964-4e50-ac0b-e652e3a980f6?utm_source=nlm_web_share&amp;amp;utm_medium=google_oo&amp;amp;utm_campaign=art_share_1&amp;amp;utm_content=&amp;amp;utm_smc=nlm_web_share_google_oo_art_share_1_" rel="noopener noreferrer"&gt;Top Test Automation Tools in 2026 - A Performance-Based Comparison Review&lt;/a&gt;&lt;/strong&gt; provides another useful perspective on the current test automation landscape.&lt;/p&gt;

&lt;p&gt;But whatever comparison you use, I would spend less time asking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"How quickly can I create my first test?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And more time asking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What does test number 500 look like?"&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CI/CD is the real maturity test
&lt;/h2&gt;

&lt;p&gt;One of the fastest ways to discover whether your automated tests are actually reliable is to put them in a pipeline.&lt;/p&gt;

&lt;p&gt;Running a test manually is forgiving.&lt;/p&gt;

&lt;p&gt;You can see what's happening.&lt;/p&gt;

&lt;p&gt;You know whether the environment is having a bad day.&lt;/p&gt;

&lt;p&gt;You can rerun something.&lt;/p&gt;

&lt;p&gt;You can wait another few seconds.&lt;/p&gt;

&lt;p&gt;CI doesn't care.&lt;/p&gt;

&lt;p&gt;The test either works or it doesn't.&lt;/p&gt;

&lt;p&gt;That exposes assumptions very quickly.&lt;/p&gt;

&lt;p&gt;You discover that your tests depended on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a specific screen resolution&lt;/li&gt;
&lt;li&gt;cached authentication&lt;/li&gt;
&lt;li&gt;manually prepared test data&lt;/li&gt;
&lt;li&gt;a file sitting on someone's computer&lt;/li&gt;
&lt;li&gt;an unusually fast network&lt;/li&gt;
&lt;li&gt;a particular browser version&lt;/li&gt;
&lt;li&gt;tests running in a specific order&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is painful, but useful.&lt;/p&gt;

&lt;p&gt;A test suite that reliably survives CI execution is much closer to something you can trust in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI should reduce debugging time, not just authoring time
&lt;/h2&gt;

&lt;p&gt;This might be the bigger opportunity for AI in testing.&lt;/p&gt;

&lt;p&gt;Generating tests gets most of the attention because it demos well.&lt;/p&gt;

&lt;p&gt;But consider the economics.&lt;/p&gt;

&lt;p&gt;Suppose AI reduces the creation time of a test from 30 minutes to 5 minutes.&lt;/p&gt;

&lt;p&gt;You saved 25 minutes.&lt;/p&gt;

&lt;p&gt;Good.&lt;/p&gt;

&lt;p&gt;Now suppose that test runs 2,000 times during its lifetime and fails unexpectedly 30 times.&lt;/p&gt;

&lt;p&gt;If each failure takes someone 15 minutes to investigate, you've spent seven and a half hours debugging one test.&lt;/p&gt;

&lt;p&gt;This is why AI-assisted failure analysis, intelligent log summaries, locator diagnosis, screenshot comparison, and root-cause suggestions may ultimately provide more value than test generation itself.&lt;/p&gt;

&lt;p&gt;The expensive part of automation isn't always writing the first version.&lt;/p&gt;

&lt;p&gt;It's everything that happens afterward.&lt;/p&gt;

&lt;h2&gt;
  
  
  The boring future of AI testing is probably the useful one
&lt;/h2&gt;

&lt;p&gt;I suspect AI testing will gradually become less impressive to watch.&lt;/p&gt;

&lt;p&gt;And that's a good thing.&lt;/p&gt;

&lt;p&gt;Today, the demos emphasize autonomous agents moving around websites.&lt;/p&gt;

&lt;p&gt;A few years from now, the valuable AI functionality may be much less visible.&lt;/p&gt;

&lt;p&gt;It will quietly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;choose better locators&lt;/li&gt;
&lt;li&gt;recognize when the application is genuinely broken&lt;/li&gt;
&lt;li&gt;distinguish product failures from infrastructure failures&lt;/li&gt;
&lt;li&gt;explain why an assertion failed&lt;/li&gt;
&lt;li&gt;detect repeated flaky patterns&lt;/li&gt;
&lt;li&gt;generate appropriate test data&lt;/li&gt;
&lt;li&gt;adapt to harmless UI changes&lt;/li&gt;
&lt;li&gt;summarize hundreds of execution logs&lt;/li&gt;
&lt;li&gt;highlight unusual behavior across browsers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, AI will stop being the star of the demo.&lt;/p&gt;

&lt;p&gt;It will become infrastructure.&lt;/p&gt;

&lt;p&gt;That's usually what happens with useful technology.&lt;/p&gt;

&lt;p&gt;The novelty disappears.&lt;/p&gt;

&lt;p&gt;The reliability remains.&lt;/p&gt;

&lt;p&gt;And in test automation, reliability was the thing we actually needed all along.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Best Tests Aren’t the Ones That Pass</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Tue, 25 Aug 2026 07:47:31 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/the-best-tests-arent-the-ones-that-pass-1m5m</link>
      <guid>https://dev.to/mellowthunder735/the-best-tests-arent-the-ones-that-pass-1m5m</guid>
      <description>&lt;p&gt;There’s a trap in test automation that’s surprisingly easy to fall into:&lt;/p&gt;

&lt;p&gt;You optimize for &lt;strong&gt;getting tests to pass&lt;/strong&gt; instead of optimizing for &lt;strong&gt;learning something useful when they fail&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Those sound similar. They aren’t.&lt;/p&gt;

&lt;p&gt;A good test doesn’t just turn green in CI. It survives the messy parts of a real software team: changing environments, stale state, UI refactors, prompt changes, preview deployments, and the occasional modal that decides scrolling is optional.&lt;/p&gt;

&lt;p&gt;I’ve been reading a few interesting pieces lately that approach this from different angles.&lt;/p&gt;

&lt;p&gt;For AI systems, &lt;a href="https://aitestingreviews.com/ai-testing-platforms-for-prompt-change-governance-review-gates-approvals-and-evidence-retention/" rel="noopener noreferrer"&gt;this look at prompt change governance&lt;/a&gt; makes an important point: once prompts become part of production behavior, reviewing and approving their changes starts looking a lot like reviewing code.&lt;/p&gt;

&lt;p&gt;The same operational thinking applies to APIs. &lt;a href="https://test-automation-tools.com/what-to-look-for-in-api-testing-tools-when-you-need-environment-switching-shareable-collections-and-ci-friendly-output/" rel="noopener noreferrer"&gt;This guide to choosing API testing tools&lt;/a&gt; focuses on the boring-but-important stuff: environment switching, sharing collections, and getting useful CI output.&lt;/p&gt;

&lt;p&gt;Preview environments are another good example. Spinning one up is easy. Trusting the smoke test that runs against it is harder. &lt;a href="https://vibiumlabs.com/benchmark-plan-comparing-api-triggered-preview-app-smoke-checks-on-setup-friction-evidence-quality-and-tear-down-safety/" rel="noopener noreferrer"&gt;This benchmark plan&lt;/a&gt; looks at setup friction, evidence quality, and whether cleanup is actually safe.&lt;/p&gt;

&lt;p&gt;Even something as mundane as overlays can expose weak automation. &lt;a href="https://frontendtester.com/how-to-test-scroll-lock-body-freezing-and-overscroll-containment-in-overlay-heavy-uis-without-brittle-assertions/" rel="noopener noreferrer"&gt;Testing scroll lock, body freezing, and overscroll containment&lt;/a&gt; is a nice example of testing behavior instead of hard-coding implementation details.&lt;/p&gt;

&lt;p&gt;And as AI test agents become more common, I suspect one metric will matter more than almost anything else: &lt;strong&gt;what happens after something goes wrong?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://ai-test-agents.com/benchmark-plan-measuring-recovery-path-quality-in-ai-test-agents-after-locator-drift-timeouts-and-stale-state/" rel="noopener noreferrer"&gt;benchmark for recovery-path quality&lt;/a&gt; explores exactly that.&lt;/p&gt;

&lt;p&gt;A test that works on the happy path is a demo.&lt;/p&gt;

&lt;p&gt;A test system that gives you useful evidence, adapts to ordinary change, and fails in understandable ways is infrastructure.&lt;/p&gt;

&lt;p&gt;That’s a much higher bar.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>qa</category>
      <category>automation</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Your Browser Tests Don’t Need to Be Perfect. They Need to Explain Themselves.</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Wed, 19 Aug 2026 21:57:26 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/your-browser-tests-dont-need-to-be-perfect-they-need-to-explain-themselves-19b8</link>
      <guid>https://dev.to/mellowthunder735/your-browser-tests-dont-need-to-be-perfect-they-need-to-explain-themselves-19b8</guid>
      <description>&lt;p&gt;There’s a strange goal that creeps into test automation projects.&lt;/p&gt;

&lt;p&gt;We start by wanting confidence that the product works.&lt;/p&gt;

&lt;p&gt;Then, somewhere along the way, the goal quietly changes to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make the tests pass.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sounds similar. It isn’t.&lt;/p&gt;

&lt;p&gt;If a browser test fails once every 50 runs and nobody knows why, the problem isn't merely that the test is flaky. The problem is that every failure creates a small investigation.&lt;/p&gt;

&lt;p&gt;And investigations are expensive.&lt;/p&gt;

&lt;p&gt;Someone opens CI. Someone reruns the job. Someone looks at a screenshot. Someone asks whether Chrome updated. Someone wonders if the test account was already logged in.&lt;/p&gt;

&lt;p&gt;Twenty minutes later, the test passes on a rerun and everybody moves on.&lt;/p&gt;

&lt;p&gt;Nothing was actually learned.&lt;/p&gt;

&lt;p&gt;Do that across 500 tests, several browsers, and a few releases per week, and you've accidentally built a small tax system for your engineering team.&lt;/p&gt;

&lt;h2&gt;
  
  
  A failed test is only useful if it leaves evidence
&lt;/h2&gt;

&lt;p&gt;I think one of the most underrated characteristics of a test automation system is how well it explains failure.&lt;/p&gt;

&lt;p&gt;Consider a login test that unexpectedly lands on the dashboard instead of the login page.&lt;/p&gt;

&lt;p&gt;There are at least two very different explanations.&lt;/p&gt;

&lt;p&gt;The application might have a bug.&lt;/p&gt;

&lt;p&gt;Or the previous test might have left behind a cookie.&lt;/p&gt;

&lt;p&gt;Those require completely different fixes.&lt;/p&gt;

&lt;p&gt;This is why understanding &lt;a href="https://testautomationguide.com/how-to-tell-whether-browser-test-failures-come-from-app-bugs-or-leaked-browser-state/" rel="noopener noreferrer"&gt;whether browser test failures come from application bugs or leaked browser state&lt;/a&gt; matters more than simply adding another retry.&lt;/p&gt;

&lt;p&gt;Retries can make dashboards greener.&lt;/p&gt;

&lt;p&gt;They don't necessarily make the system more reliable.&lt;/p&gt;

&lt;p&gt;A better test setup preserves enough information to answer questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What URL was actually loaded?&lt;/li&gt;
&lt;li&gt;What did the DOM look like?&lt;/li&gt;
&lt;li&gt;Which cookies and local storage values existed?&lt;/li&gt;
&lt;li&gt;Which browser and version ran the test?&lt;/li&gt;
&lt;li&gt;What happened immediately before the failure?&lt;/li&gt;
&lt;li&gt;Was this a fresh browser session?&lt;/li&gt;
&lt;li&gt;Did the network request succeed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The more of those questions you can answer without rerunning the test, the cheaper failures become.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI doesn't remove this requirement
&lt;/h2&gt;

&lt;p&gt;AI testing tools are making test creation dramatically easier.&lt;/p&gt;

&lt;p&gt;That's useful.&lt;/p&gt;

&lt;p&gt;But generating a test is usually not the expensive part of its lifecycle.&lt;/p&gt;

&lt;p&gt;The expensive part comes six months later when the test fails after somebody changes authentication, redesigns a component, upgrades Chrome, modifies test data, or introduces a new asynchronous request.&lt;/p&gt;

&lt;p&gt;So when evaluating an AI testing product, I would spend less time watching the "create a test from a prompt" demo and more time investigating what happens after something breaks.&lt;/p&gt;

&lt;p&gt;A useful starting point is this guide on &lt;a href="https://testautomationreviews.com/what-to-check-in-an-ai-native-test-automation-platform-for-low-maintenance-browser-regression/" rel="noopener noreferrer"&gt;what to check in an AI-native test automation platform for low-maintenance browser regression&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The important questions aren't just:&lt;/p&gt;

&lt;p&gt;"Can the AI create a test?"&lt;/p&gt;

&lt;p&gt;They're things like:&lt;/p&gt;

&lt;p&gt;"Can I understand what it created?"&lt;/p&gt;

&lt;p&gt;"Can I edit it?"&lt;/p&gt;

&lt;p&gt;"Can I see why it changed something?"&lt;/p&gt;

&lt;p&gt;"Can I debug the result without asking the AI to try again?"&lt;/p&gt;

&lt;p&gt;That distinction becomes even more important as systems become more agentic.&lt;/p&gt;

&lt;p&gt;If an agent performs several actions before something goes wrong, you need to reconstruct its decisions. Traceability, replay controls, screenshots, logs, and failure evidence stop being nice debugging features and become part of the testing model itself.&lt;/p&gt;

&lt;p&gt;There's a useful breakdown of this in &lt;a href="https://aitestingtoolreviews.com/evaluating-ai-testing-platforms-for-agent-traceability-replay-controls-and-failure-evidence/" rel="noopener noreferrer"&gt;how to evaluate AI testing platforms for traceability, replay, and failure evidence&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;AI can reduce maintenance.&lt;/p&gt;

&lt;p&gt;It shouldn't turn test execution into a black box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sometimes the browser isn't actually the thing you're testing
&lt;/h2&gt;

&lt;p&gt;Downloads are a great example.&lt;/p&gt;

&lt;p&gt;I've seen teams build surprisingly elaborate automation around the browser's native download dialog.&lt;/p&gt;

&lt;p&gt;That often creates more trouble than value.&lt;/p&gt;

&lt;p&gt;The requirement usually isn't:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Verify that Chrome rendered its Save File dialog correctly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The requirement is closer to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Verify that clicking Export produces the correct file.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are different tests.&lt;/p&gt;

&lt;p&gt;A more robust approach is often to trigger the download, wait for the browser to report it, inspect the resulting file, and validate what actually matters: filename, type, existence, size, or contents.&lt;/p&gt;

&lt;p&gt;That's why &lt;a href="https://test-automation-experts.com/how-to-test-browser-file-downloads-without-relying-on-fragile-native-dialog-assertions/" rel="noopener noreferrer"&gt;testing browser file downloads without relying on fragile native dialog assertions&lt;/a&gt; is a useful pattern.&lt;/p&gt;

&lt;p&gt;It illustrates a broader rule:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automate the business outcome, not every implementation detail between the user and that outcome.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The closer your assertions are to what the user actually cares about, the less likely your suite is to break because a browser vendor moved a button around.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then Chrome updates
&lt;/h2&gt;

&lt;p&gt;Of course, even a well-designed suite still runs inside a browser.&lt;/p&gt;

&lt;p&gt;And browsers move fast.&lt;/p&gt;

&lt;p&gt;An application can remain completely unchanged while a test that passed yesterday suddenly fails because the execution environment changed underneath it.&lt;/p&gt;

&lt;p&gt;That can come from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;browser updates,&lt;/li&gt;
&lt;li&gt;driver changes,&lt;/li&gt;
&lt;li&gt;security restrictions,&lt;/li&gt;
&lt;li&gt;rendering behavior,&lt;/li&gt;
&lt;li&gt;permission changes,&lt;/li&gt;
&lt;li&gt;timing changes,&lt;/li&gt;
&lt;li&gt;deprecated APIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates one of the more frustrating categories of automation failures because the team naturally starts debugging its own code first.&lt;/p&gt;

&lt;p&gt;Sometimes for hours.&lt;/p&gt;

&lt;p&gt;Keeping track of &lt;a href="https://browserslack.com/how-browser-version-drift-creates-flaky-failures-a-practical-guide-to-pinning-compatibility-exceptions-and-upgrade-checks/" rel="noopener noreferrer"&gt;browser version drift, pinning strategies, compatibility exceptions, and upgrade checks&lt;/a&gt; can save a surprising amount of time.&lt;/p&gt;

&lt;p&gt;Pinning everything forever isn't the answer either.&lt;/p&gt;

&lt;p&gt;Eventually your users will run newer browsers.&lt;/p&gt;

&lt;p&gt;A healthier strategy is usually controlled change: know which versions you're running, upgrade intentionally, and have a small compatibility suite that tells you whether a browser update is about to become your problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The metric I would actually watch
&lt;/h2&gt;

&lt;p&gt;Teams love test counts.&lt;/p&gt;

&lt;p&gt;"We have 2,400 automated tests."&lt;/p&gt;

&lt;p&gt;Fine.&lt;/p&gt;

&lt;p&gt;But 2,400 tests that produce 40 ambiguous failures every morning might be worse than 700 tests that reliably tell you when the product is broken.&lt;/p&gt;

&lt;p&gt;So I'd pay attention to something else:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much human time does a failed automated test consume before we understand what happened?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Call it mean time to diagnosis if you want to make it sound respectable.&lt;/p&gt;

&lt;p&gt;But the concept is simple.&lt;/p&gt;

&lt;p&gt;If a failure takes two minutes to understand, automation is doing its job.&lt;/p&gt;

&lt;p&gt;If it takes 30 minutes, several reruns, a Slack thread, and the person who originally wrote the framework three years ago, you don't have a test coverage problem.&lt;/p&gt;

&lt;p&gt;You have an observability problem.&lt;/p&gt;

&lt;p&gt;And adding another 500 tests will probably make it worse.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reliability is useful. Explainability is what makes it scale.
&lt;/h2&gt;

&lt;p&gt;No serious browser test suite will have zero failures unrelated to product defects.&lt;/p&gt;

&lt;p&gt;Networks fail. Data changes. Browsers update. Environments drift. Authentication expires. Third-party services behave strangely.&lt;/p&gt;

&lt;p&gt;Trying to eliminate every one of those variables is probably impossible.&lt;/p&gt;

&lt;p&gt;The more practical goal is to make unexpected behavior cheap to understand.&lt;/p&gt;

&lt;p&gt;That means preserving state.&lt;/p&gt;

&lt;p&gt;Recording evidence.&lt;/p&gt;

&lt;p&gt;Knowing your browser versions.&lt;/p&gt;

&lt;p&gt;Testing outcomes instead of incidental UI.&lt;/p&gt;

&lt;p&gt;And making sure that when AI participates in test creation or maintenance, humans can still see what happened.&lt;/p&gt;

&lt;p&gt;A good automation system doesn't merely tell you:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Red.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It tells you enough that five minutes later you can say:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ah. That's why.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That difference sounds small.&lt;/p&gt;

&lt;p&gt;At scale, it may be one of the most important differences between a test suite people trust and one they quietly learn to ignore.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>qa</category>
      <category>automation</category>
      <category>devops</category>
    </item>
    <item>
      <title>AI Can Write Tests Faster Than Your Team Can Understand Them</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Sat, 08 Aug 2026 21:18:01 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/ai-can-write-tests-faster-than-your-team-can-understand-them-bji</link>
      <guid>https://dev.to/mellowthunder735/ai-can-write-tests-faster-than-your-team-can-understand-them-bji</guid>
      <description>&lt;p&gt;AI coding tools have solved one problem remarkably well:&lt;/p&gt;

&lt;p&gt;They can produce code extremely quickly.&lt;/p&gt;

&lt;p&gt;That sounds obviously good.&lt;/p&gt;

&lt;p&gt;And most of the time, it is.&lt;/p&gt;

&lt;p&gt;But software development has never really been constrained by how fast we can type.&lt;/p&gt;

&lt;p&gt;The expensive part comes later.&lt;/p&gt;

&lt;p&gt;Understanding the code.&lt;/p&gt;

&lt;p&gt;Reviewing it.&lt;/p&gt;

&lt;p&gt;Debugging it.&lt;/p&gt;

&lt;p&gt;Changing it six months later when the person—or model—that wrote it has forgotten why it exists.&lt;/p&gt;

&lt;p&gt;Test automation is where this becomes especially interesting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generating the Test Is the Cheap Part
&lt;/h2&gt;

&lt;p&gt;You can ask an AI coding assistant:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write Playwright tests for our signup, login, checkout, password reset, dashboard, invoices, settings, and admin pages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And a few minutes later you might have hundreds or thousands of lines of test code.&lt;/p&gt;

&lt;p&gt;It feels like incredible leverage.&lt;/p&gt;

&lt;p&gt;Until the suite starts failing.&lt;/p&gt;

&lt;p&gt;That’s the argument behind looking at &lt;a href="https://playwright-vs-selenium.com/hidden-cost-of-ai-generated-test-code/" rel="noopener noreferrer"&gt;the hidden cost of AI-generated test code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Generation cost has collapsed.&lt;/p&gt;

&lt;p&gt;Maintenance cost hasn’t.&lt;/p&gt;

&lt;p&gt;In some cases, AI actually increases it because you now have more code than your team would have written manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Pull Requests Need Different Review
&lt;/h2&gt;

&lt;p&gt;There’s another subtle problem.&lt;/p&gt;

&lt;p&gt;Humans tend to judge large AI-generated pull requests differently.&lt;/p&gt;

&lt;p&gt;When someone on your team writes 80 lines, you probably read them.&lt;/p&gt;

&lt;p&gt;When an AI assistant generates 1,800 lines?&lt;/p&gt;

&lt;p&gt;You skim.&lt;/p&gt;

&lt;p&gt;You look at the filenames.&lt;/p&gt;

&lt;p&gt;You check whether CI is green.&lt;/p&gt;

&lt;p&gt;Merge.&lt;/p&gt;

&lt;p&gt;That’s dangerous for normal application code and potentially worse for test code because a bad test can happily pass for months.&lt;/p&gt;

&lt;p&gt;There are good ideas in this guide to &lt;a href="https://ai-testing-tools.com/how-to-test-ai-coding-assistant-pull-requests-without-missing-ui-and-logic-regressions/" rel="noopener noreferrer"&gt;testing AI coding assistant pull requests&lt;/a&gt;, but the bigger principle is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI-generated tests need validation just like AI-generated product code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“Generated successfully” does not mean “tests the right thing.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents Add Another Failure Mode
&lt;/h2&gt;

&lt;p&gt;Now we’re moving from AI that writes test code to AI that actually decides what actions to take.&lt;/p&gt;

&lt;p&gt;That introduces a new question:&lt;/p&gt;

&lt;p&gt;What if the model chooses the wrong tool?&lt;/p&gt;

&lt;p&gt;An agent might have access to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;browser interaction&lt;/li&gt;
&lt;li&gt;API calls&lt;/li&gt;
&lt;li&gt;database queries&lt;/li&gt;
&lt;li&gt;file operations&lt;/li&gt;
&lt;li&gt;search&lt;/li&gt;
&lt;li&gt;internal tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The action itself may work perfectly.&lt;/p&gt;

&lt;p&gt;It’s just the wrong action.&lt;/p&gt;

&lt;p&gt;Testing &lt;a href="https://ai-test-agents.com/how-to-test-an-ai-agents-tool-selection-failures-before-they-reach-production/" rel="noopener noreferrer"&gt;tool-selection failures in AI agents&lt;/a&gt; therefore becomes part of testing the product.&lt;/p&gt;

&lt;p&gt;And dynamic web applications make this harder.&lt;/p&gt;

&lt;p&gt;Partial renders, changing state, asynchronous updates, and stale context can cause an agent to confidently interact with yesterday’s version of the page.&lt;/p&gt;

&lt;p&gt;That combination of &lt;a href="https://aitestingtoolreviews.com/why-ai-test-agents-fail-on-dynamic-web-apps-tool-selection-state-drift-and-partial-renders/" rel="noopener noreferrer"&gt;tool selection, state drift, and partial renders&lt;/a&gt; is probably going to become a much bigger QA category over the next few years.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-Healing Can Heal the Wrong Thing
&lt;/h2&gt;

&lt;p&gt;AI test repair is another feature that sounds almost universally good.&lt;/p&gt;

&lt;p&gt;Selector changed?&lt;/p&gt;

&lt;p&gt;Fix it automatically.&lt;/p&gt;

&lt;p&gt;But imagine the application used to have:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Submit Order&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And now has:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Submit Quote&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The test can no longer find its element.&lt;/p&gt;

&lt;p&gt;An AI repair system finds the new button and updates the test automatically.&lt;/p&gt;

&lt;p&gt;Technically, it repaired the selector.&lt;/p&gt;

&lt;p&gt;Semantically, it may have changed what the test means.&lt;/p&gt;

&lt;p&gt;That’s why I like the idea of evaluating &lt;a href="https://testingradar.com/what-testing-teams-should-evaluate-in-ai-generated-test-repair-tools-before-they-trust-automatic-fixes/" rel="noopener noreferrer"&gt;AI-generated test repairs before trusting automatic fixes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Self-healing should reduce maintenance.&lt;/p&gt;

&lt;p&gt;It shouldn’t quietly rewrite your specification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure Trust, Not Just Pass Rate
&lt;/h2&gt;

&lt;p&gt;Traditional test dashboards love pass rates.&lt;/p&gt;

&lt;p&gt;97.4% passed.&lt;/p&gt;

&lt;p&gt;Great.&lt;/p&gt;

&lt;p&gt;But with AI-generated or AI-repaired testing, I think teams need another category of metrics:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How trustworthy was the conclusion?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That includes things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Was the failure reproducible?&lt;/li&gt;
&lt;li&gt;Was a selector repaired?&lt;/li&gt;
&lt;li&gt;Did the test behavior change after repair?&lt;/li&gt;
&lt;li&gt;Was the failure caused by infrastructure?&lt;/li&gt;
&lt;li&gt;Did AI classify the failure correctly?&lt;/li&gt;
&lt;li&gt;How often do humans override AI conclusions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s why these ideas around &lt;a href="https://aitestingreviews.com/what-engineering-teams-should-measure-before-trusting-ai-test-failures-in-ci/" rel="noopener noreferrer"&gt;measuring AI test failures in CI&lt;/a&gt; matter.&lt;/p&gt;

&lt;p&gt;The next generation of QA dashboards probably won’t just say PASS or FAIL.&lt;/p&gt;

&lt;p&gt;They’ll tell you why the system believes the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Should Reduce Abstraction, Not Increase It
&lt;/h2&gt;

&lt;p&gt;This is where I think test automation is heading in an interesting direction.&lt;/p&gt;

&lt;p&gt;The worst outcome would be:&lt;/p&gt;

&lt;p&gt;AI generates enormous automation frameworks that humans barely understand, then another AI maintains those frameworks because humans can no longer understand them.&lt;/p&gt;

&lt;p&gt;That’s technically impressive.&lt;/p&gt;

&lt;p&gt;It’s also a strange place to end up.&lt;/p&gt;

&lt;p&gt;The better outcome is AI generating tests into representations humans can still inspect, understand, and modify.&lt;/p&gt;

&lt;p&gt;Use AI to remove work.&lt;/p&gt;

&lt;p&gt;Don’t use it to create a larger black box.&lt;/p&gt;

&lt;p&gt;Because the real productivity metric isn’t:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much test code did the AI generate?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much less testing infrastructure does your team have to think about?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>automation</category>
      <category>devops</category>
    </item>
    <item>
      <title>Your Browser Tests Aren’t Flaky. Your Product Is Stateful.</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Fri, 07 Aug 2026 22:02:53 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/your-browser-tests-arent-flaky-your-product-is-stateful-2o9d</link>
      <guid>https://dev.to/mellowthunder735/your-browser-tests-arent-flaky-your-product-is-stateful-2o9d</guid>
      <description>&lt;p&gt;There’s a point in almost every end-to-end test suite where the team starts blaming the tests.&lt;/p&gt;

&lt;p&gt;The login test fails once every 40 runs.&lt;/p&gt;

&lt;p&gt;The onboarding flow occasionally opens on step three instead of step two.&lt;/p&gt;

&lt;p&gt;A notification appears before the assertion is ready.&lt;/p&gt;

&lt;p&gt;Someone adds a two-second wait.&lt;/p&gt;

&lt;p&gt;Problem solved.&lt;/p&gt;

&lt;p&gt;Until next Tuesday.&lt;/p&gt;

&lt;p&gt;What we call “flaky tests” are often something more interesting: &lt;strong&gt;state problems that the test suite happens to expose&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Modern web applications have a lot more state than they did ten years ago. There’s browser state, server state, authentication state, feature-flag state, WebSocket state, local storage, cookies, background jobs, third-party services, extensions, and whatever your frontend framework is currently keeping alive in memory.&lt;/p&gt;

&lt;p&gt;The test runner is often the least mysterious thing in the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hardest bugs happen between steps
&lt;/h2&gt;

&lt;p&gt;Consider a five-step onboarding process.&lt;/p&gt;

&lt;p&gt;Most teams test it like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fill out step one.&lt;/li&gt;
&lt;li&gt;Continue.&lt;/li&gt;
&lt;li&gt;Fill out step two.&lt;/li&gt;
&lt;li&gt;Continue.&lt;/li&gt;
&lt;li&gt;Finish.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s useful.&lt;/p&gt;

&lt;p&gt;But customers don’t behave like a test script.&lt;/p&gt;

&lt;p&gt;They click Back.&lt;/p&gt;

&lt;p&gt;They reload halfway through.&lt;/p&gt;

&lt;p&gt;They open another tab.&lt;/p&gt;

&lt;p&gt;They submit twice.&lt;/p&gt;

&lt;p&gt;Their session expires.&lt;/p&gt;

&lt;p&gt;They abandon the flow and return tomorrow.&lt;/p&gt;

&lt;p&gt;That’s why I liked this breakdown of &lt;a href="https://testproject.to/how-to-test-multi-step-onboarding-flows-without-missing-state-leaks-broken-validation-or-back-button-bugs/" rel="noopener noreferrer"&gt;testing multi-step onboarding flows without missing state leaks, validation problems, and back-button bugs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The important thing isn’t adding 30 more assertions.&lt;/p&gt;

&lt;p&gt;It’s testing the transitions.&lt;/p&gt;

&lt;p&gt;Stateful applications tend to break in the gaps between the happy-path steps.&lt;/p&gt;

&lt;p&gt;This applies well beyond onboarding. If your application contains long-lived sessions, dynamic forms, approval processes, or workflows that stretch across multiple screens, this guide on &lt;a href="https://qatoolguide.com/how-to-evaluate-a-test-automation-platform-for-multi-step-workflows-dynamic-forms-and-session-heavy-flows/" rel="noopener noreferrer"&gt;evaluating automation platforms for multi-step workflows and session-heavy flows&lt;/a&gt; covers many of the same issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-time applications make this worse
&lt;/h2&gt;

&lt;p&gt;Then you add WebSockets.&lt;/p&gt;

&lt;p&gt;Now the browser can change without the browser doing anything.&lt;/p&gt;

&lt;p&gt;A notification arrives.&lt;/p&gt;

&lt;p&gt;A status becomes “Approved.”&lt;/p&gt;

&lt;p&gt;A dashboard updates.&lt;/p&gt;

&lt;p&gt;A chat message appears.&lt;/p&gt;

&lt;p&gt;The naive approach is to sprinkle sleeps everywhere:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wait 2 seconds
check status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But if the event normally arrives in 200 milliseconds and occasionally takes 2.2 seconds, you haven’t fixed the timing problem.&lt;/p&gt;

&lt;p&gt;You’ve created a slower flaky test.&lt;/p&gt;

&lt;p&gt;A better model is to wait for a meaningful application condition.&lt;/p&gt;

&lt;p&gt;There’s a useful discussion of this in &lt;a href="https://softwaretestingreviews.com/how-to-test-websocket-and-real-time-ui-updates-without-creating-flaky-browser-suites/" rel="noopener noreferrer"&gt;how to test WebSocket and real-time UI updates without creating flaky browser suites&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The distinction matters:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time passing is not an application state.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“Wait until the order becomes processed” is meaningful.&lt;/p&gt;

&lt;p&gt;“Wait three seconds” is guessing.&lt;/p&gt;

&lt;p&gt;That sounds obvious when you write it down, yet huge automation suites are held together with exactly those guesses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mock less than you think — but more than zero
&lt;/h2&gt;

&lt;p&gt;Another place teams get stuck is deciding whether E2E tests should hit real services.&lt;/p&gt;

&lt;p&gt;I don’t think there’s a universal answer.&lt;/p&gt;

&lt;p&gt;If every browser test calls seven third-party APIs, your suite can become a distributed systems monitoring tool instead of a product test.&lt;/p&gt;

&lt;p&gt;But if you mock everything, you can build a beautiful green test suite for an application that doesn’t actually work.&lt;/p&gt;

&lt;p&gt;A good compromise is to ask what the test is supposed to prove.&lt;/p&gt;

&lt;p&gt;If you’re testing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how your UI handles an error response, stub it;&lt;/li&gt;
&lt;li&gt;a complicated edge case that is expensive to reproduce, mock it;&lt;/li&gt;
&lt;li&gt;the actual integration between two systems, use the real service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article on &lt;a href="https://thesdet.com/how-i-decide-whether-to-mock-stub-or-hit-real-services-in-playwright-e2e-tests/" rel="noopener noreferrer"&gt;when to mock, stub, or hit real services in Playwright E2E tests&lt;/a&gt; goes deeper into that tradeoff.&lt;/p&gt;

&lt;p&gt;The mistake is turning this into ideology.&lt;/p&gt;

&lt;p&gt;“E2E tests must always use real services” sounds principled until Stripe has an incident and your deployment pipeline becomes unusable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Browser state is part of your application
&lt;/h2&gt;

&lt;p&gt;Cookies are another great example.&lt;/p&gt;

&lt;p&gt;A consent banner looks trivial until you realize that accepting it might affect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;analytics initialization,&lt;/li&gt;
&lt;li&gt;advertising scripts,&lt;/li&gt;
&lt;li&gt;local storage,&lt;/li&gt;
&lt;li&gt;accessibility,&lt;/li&gt;
&lt;li&gt;page layout,&lt;/li&gt;
&lt;li&gt;tracking events,&lt;/li&gt;
&lt;li&gt;subsequent sessions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Testing whether the button disappears is not enough.&lt;/p&gt;

&lt;p&gt;The more useful question is whether the application enters the correct state afterward.&lt;/p&gt;

&lt;p&gt;There’s a good practical checklist in &lt;a href="https://bughuntersclub.com/how-to-test-cookie-consent-banners-without-breaking-analytics-tracking-or-accessibility/" rel="noopener noreferrer"&gt;how to test cookie consent banners without breaking analytics, tracking, or accessibility&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Browser extensions can create an even stranger version of the same problem.&lt;/p&gt;

&lt;p&gt;Password managers, ad blockers, developer extensions, privacy extensions, or your own product extension can inject DOM nodes, scripts, styles, and event handlers.&lt;/p&gt;

&lt;p&gt;Suddenly a test behaves differently on one machine and everyone blames Selenium.&lt;/p&gt;

&lt;p&gt;If that sounds familiar, &lt;a href="https://browserslack.com/how-to-debug-chrome-extension-side-effects-in-browser-automation-without-polluting-your-main-test-suite/" rel="noopener noreferrer"&gt;debugging Chrome extension side effects without polluting your main test suite&lt;/a&gt; is worth reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don’t page people because a selector blinked
&lt;/h2&gt;

&lt;p&gt;There’s one last consequence of all this.&lt;/p&gt;

&lt;p&gt;If your test suite has uncertain state, be very careful before connecting every failure to Slack, Teams, or PagerDuty.&lt;/p&gt;

&lt;p&gt;Alerts create an implicit promise:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This deserves your attention.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Break that promise often enough and people stop paying attention.&lt;/p&gt;

&lt;p&gt;Then the one important failure gets ignored along with the 43 harmless ones.&lt;/p&gt;

&lt;p&gt;The better approach is to classify failures first.&lt;/p&gt;

&lt;p&gt;Is this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a confirmed product regression?&lt;/li&gt;
&lt;li&gt;an infrastructure problem?&lt;/li&gt;
&lt;li&gt;an environment outage?&lt;/li&gt;
&lt;li&gt;a test maintenance issue?&lt;/li&gt;
&lt;li&gt;a transient retry?&lt;/li&gt;
&lt;li&gt;an unknown failure worth investigating?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Only some of those deserve an interruption.&lt;/p&gt;

&lt;p&gt;If you’re wiring browser automation into incident channels, this guide on &lt;a href="https://test-automation-experts.com/what-to-check-before-you-add-browser-test-alerts-to-slack-teams-or-pagerduty/" rel="noopener noreferrer"&gt;what to check before adding browser test alerts to Slack, Teams, or PagerDuty&lt;/a&gt; is a useful sanity check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flakiness is information
&lt;/h2&gt;

&lt;p&gt;A flaky test is annoying.&lt;/p&gt;

&lt;p&gt;But it’s also telling you something.&lt;/p&gt;

&lt;p&gt;Sometimes the selector is bad.&lt;/p&gt;

&lt;p&gt;Sometimes the test is badly designed.&lt;/p&gt;

&lt;p&gt;And sometimes the test is exposing the fact that your application has five sources of state nobody has clearly modeled.&lt;/p&gt;

&lt;p&gt;Deleting the test fixes only one of those problems.&lt;/p&gt;

&lt;p&gt;The more productive question isn’t:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why did the automation fail?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What assumption did this test make that wasn’t true this time?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question tends to lead somewhere useful.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>qa</category>
      <category>automation</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Framework Tax Is a Product Decision</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Wed, 05 Aug 2026 19:07:15 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/the-framework-tax-is-a-product-decision-51b5</link>
      <guid>https://dev.to/mellowthunder735/the-framework-tax-is-a-product-decision-51b5</guid>
      <description>&lt;p&gt;A few years ago, the default test automation decision was mostly technical.&lt;/p&gt;

&lt;p&gt;Do we use Selenium? Which language? Where do we run the grid?&lt;/p&gt;

&lt;p&gt;Today, the menu is much larger. You can write Playwright tests, ask Claude to generate them, use an AI-first testing platform, or combine several of those approaches.&lt;/p&gt;

&lt;p&gt;That sounds like progress, and it is. But more choices have also made it easier to optimize for the wrong thing.&lt;/p&gt;

&lt;p&gt;Teams compare how quickly the first test can be created. They should be comparing what happens to the hundredth test after six months of product changes.&lt;/p&gt;

&lt;p&gt;The initial script is cheap.&lt;/p&gt;

&lt;p&gt;Ownership is expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  The framework is not the whole cost
&lt;/h2&gt;

&lt;p&gt;Selenium is open source. Playwright is open source. An AI coding assistant may already be included in a developer’s subscription.&lt;/p&gt;

&lt;p&gt;That can make a code-first setup look nearly free.&lt;/p&gt;

&lt;p&gt;But the license is only one line in the budget. The rest is scattered across engineering time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building and updating fixtures&lt;/li&gt;
&lt;li&gt;Managing browsers and drivers&lt;/li&gt;
&lt;li&gt;Maintaining CI workflows&lt;/li&gt;
&lt;li&gt;Investigating flaky failures&lt;/li&gt;
&lt;li&gt;Reviewing generated test code&lt;/li&gt;
&lt;li&gt;Keeping shared utilities understandable&lt;/li&gt;
&lt;li&gt;Training people who did not design the framework&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This comparison of &lt;a href="https://test-automation-tools.com/endtest-vs-selenium-for-teams-that-need-lower-maintenance-on-browser-regression-suites/" rel="noopener noreferrer"&gt;Endtest and Selenium for lower-maintenance browser regression suites&lt;/a&gt; gets to the heart of the tradeoff.&lt;/p&gt;

&lt;p&gt;Selenium gives teams a tremendous amount of control. But control creates responsibility. Someone has to own the framework, the browser infrastructure, the reporting, and the conventions that keep the suite from becoming a collection of unrelated scripts.&lt;/p&gt;

&lt;p&gt;A second analysis of &lt;a href="https://softwaretestingreviews.com/endtest-vs-selenium-for-teams-that-need-browser-coverage-without-owning-grid-infrastructure/" rel="noopener noreferrer"&gt;Endtest versus Selenium without owning grid infrastructure&lt;/a&gt; makes the same point from an infrastructure angle.&lt;/p&gt;

&lt;p&gt;The question is not whether your team &lt;em&gt;can&lt;/em&gt; maintain a Selenium Grid.&lt;/p&gt;

&lt;p&gt;The question is whether maintaining it is a good use of your team’s attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI-generated code still becomes your code
&lt;/h2&gt;

&lt;p&gt;AI coding tools have made it dramatically faster to produce Playwright tests.&lt;/p&gt;

&lt;p&gt;That is useful. It also creates a new kind of maintenance illusion.&lt;/p&gt;

&lt;p&gt;A generated test may look complete, but somebody still has to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why the locator was chosen&lt;/li&gt;
&lt;li&gt;Which waits are meaningful&lt;/li&gt;
&lt;li&gt;What data assumptions are hidden in the setup&lt;/li&gt;
&lt;li&gt;Whether the assertions represent the actual user outcome&lt;/li&gt;
&lt;li&gt;How the test should change when the application changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This comparison of &lt;a href="https://playwright-vs-selenium.com/claude-for-playwright-tests-vs-endtest/" rel="noopener noreferrer"&gt;Claude-generated Playwright tests and editable Endtest automation&lt;/a&gt; frames the choice well.&lt;/p&gt;

&lt;p&gt;Code generation accelerates authorship.&lt;/p&gt;

&lt;p&gt;Editable automation changes who can maintain the result.&lt;/p&gt;

&lt;p&gt;That difference matters for teams where QA owns browser coverage but does not have a dedicated SDET maintaining a custom framework.&lt;/p&gt;

&lt;p&gt;I am not arguing that one model is universally better. A team with strong test engineering skills may prefer code because it offers maximum flexibility. A smaller product team may prefer a managed system because it keeps tests readable and execution infrastructure out of the critical path.&lt;/p&gt;

&lt;p&gt;The right answer depends on the team you actually have, not the team architecture looks impressive on a slide.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI-generated frontends make framework ownership harder
&lt;/h2&gt;

&lt;p&gt;AI is changing the application side too.&lt;/p&gt;

&lt;p&gt;Teams are generating components, layouts, and entire frontend flows faster than before. That can increase product velocity, but it also means the interface may churn more frequently.&lt;/p&gt;

&lt;p&gt;The article on &lt;a href="https://web-developer-reviews.com/endtest-vs-playwright-for-teams-testing-ai-generated-frontends-without-owning-a-framework-tax/" rel="noopener noreferrer"&gt;testing AI-generated frontends with Endtest and Playwright&lt;/a&gt; describes an increasingly common problem: the test framework becomes a second system that must keep pace with a rapidly changing first system.&lt;/p&gt;

&lt;p&gt;If the UI changes weekly, the team needs one of two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enough engineering capacity to maintain the framework continuously.&lt;/li&gt;
&lt;li&gt;A testing model designed to reduce that maintenance burden.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The worst option is pretending the burden does not exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare churn, not just features
&lt;/h2&gt;

&lt;p&gt;AI-first testing tools often look similar in feature lists.&lt;/p&gt;

&lt;p&gt;They may all mention test generation, self-healing, browser coverage, dashboards, and integrations.&lt;/p&gt;

&lt;p&gt;A more useful comparison is how they handle churn.&lt;/p&gt;

&lt;p&gt;This review of &lt;a href="https://aitestingcompare.com/endtest-vs-mabl-for-teams-testing-ai-generated-ui-changes-in-fast-moving-product-releases/" rel="noopener noreferrer"&gt;Endtest and Mabl for teams testing AI-generated UI changes&lt;/a&gt; is valuable because it focuses on what happens after the interface changes.&lt;/p&gt;

&lt;p&gt;When evaluating any platform, I would ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are generated tests understandable?&lt;/li&gt;
&lt;li&gt;Can a human edit every important step?&lt;/li&gt;
&lt;li&gt;Are locator changes visible?&lt;/li&gt;
&lt;li&gt;Can AI suggestions be rejected?&lt;/li&gt;
&lt;li&gt;Does the system preserve evidence when a repair is attempted?&lt;/li&gt;
&lt;li&gt;Can the team separate product failures from test maintenance?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tool that creates the prettiest demo is not necessarily the one that survives twelve months of product development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing should include maintenance
&lt;/h2&gt;

&lt;p&gt;People naturally compare subscription prices because they are visible.&lt;/p&gt;

&lt;p&gt;Engineering time is harder to measure, so it often disappears from the comparison.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://aitestingreport.com/endtest-pricing-breakdown-what-teams-actually-pay-for-browser-coverage-automation-support-and-maintenance/" rel="noopener noreferrer"&gt;Endtest pricing breakdown for browser coverage, support, and maintenance&lt;/a&gt; is a useful reminder to calculate total operating cost, not just the invoice.&lt;/p&gt;

&lt;p&gt;For a code-first framework, include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initial setup&lt;/li&gt;
&lt;li&gt;Monthly framework maintenance&lt;/li&gt;
&lt;li&gt;CI and browser infrastructure&lt;/li&gt;
&lt;li&gt;Failure investigation time&lt;/li&gt;
&lt;li&gt;Onboarding&lt;/li&gt;
&lt;li&gt;Opportunity cost when engineers are pulled away from product work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a managed platform, include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subscription cost&lt;/li&gt;
&lt;li&gt;Migration effort&lt;/li&gt;
&lt;li&gt;Platform limitations&lt;/li&gt;
&lt;li&gt;Vendor dependency&lt;/li&gt;
&lt;li&gt;Training and workflow changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither side should get a free pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision is really about ownership
&lt;/h2&gt;

&lt;p&gt;At &lt;a href="https://endtest.io/" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;, we have always believed that tests should remain human-readable and editable, even when AI helps create them. Features such as the AI Test Creation Agent are useful because they compress the tedious part without turning the result into a black box.&lt;/p&gt;

&lt;p&gt;But the larger principle applies beyond any single product.&lt;/p&gt;

&lt;p&gt;Choose the automation model that matches your ownership model.&lt;/p&gt;

&lt;p&gt;Use a custom framework when the flexibility is worth maintaining.&lt;/p&gt;

&lt;p&gt;Use a managed platform when browser infrastructure and framework upkeep are not strategic advantages.&lt;/p&gt;

&lt;p&gt;Use AI generation when someone can still review and understand the result.&lt;/p&gt;

&lt;p&gt;The most expensive test suite is not the one with the highest subscription price.&lt;/p&gt;

&lt;p&gt;It is the one everybody depends on and nobody truly owns.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>qa</category>
      <category>automation</category>
      <category>devops</category>
    </item>
    <item>
      <title>The Test Automation Tax Nobody Budgets For</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Tue, 04 Aug 2026 22:18:06 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/the-test-automation-tax-nobody-budgets-for-8a</link>
      <guid>https://dev.to/mellowthunder735/the-test-automation-tax-nobody-budgets-for-8a</guid>
      <description>&lt;p&gt;Most teams calculate the cost of test automation by looking at how long it takes to create the first version of the test suite.&lt;/p&gt;

&lt;p&gt;That is usually the least expensive part.&lt;/p&gt;

&lt;p&gt;The real cost appears six months later, when the application has changed, the original test author has moved to another project, and nobody is entirely sure whether the failing test represents a product bug or a stale assumption.&lt;/p&gt;

&lt;p&gt;I have seen teams spend far more time maintaining automation than they originally spent building it. The problem is rarely a single bad technology decision. It is usually a collection of small decisions that compound.&lt;/p&gt;

&lt;p&gt;The wrong locator here. A test with no clear owner there. A self-healing system that quietly changes behavior. Eventually, the test suite becomes another product that the company must maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Difficult interfaces reveal weak abstractions
&lt;/h2&gt;

&lt;p&gt;A simple login form can make almost any automation tool look good.&lt;/p&gt;

&lt;p&gt;The more useful evaluation happens when you point the tool at the awkward parts of your application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nested iframes&lt;/li&gt;
&lt;li&gt;Shadow DOM components&lt;/li&gt;
&lt;li&gt;Dynamic tables&lt;/li&gt;
&lt;li&gt;Custom controls&lt;/li&gt;
&lt;li&gt;Reusable web components&lt;/li&gt;
&lt;li&gt;Elements rendered differently across browsers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good starting point is this guide on &lt;a href="https://test-automation-tools.com/how-to-evaluate-a-test-automation-tool-for-shadow-dom-iframes-and-other-hard-to-test-ui-surfaces/" rel="noopener noreferrer"&gt;evaluating automation tools for Shadow DOM, iframes, and other hard-to-test surfaces&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The goal is not to find a tool that claims to support every frontend technology. Nearly every vendor can create a convincing demo.&lt;/p&gt;

&lt;p&gt;The question is what happens when the component changes.&lt;/p&gt;

&lt;p&gt;Can someone on the QA team understand the generated locator? Can they replace it without rewriting the test? Does the failure report explain which DOM boundary caused the problem?&lt;/p&gt;

&lt;p&gt;Testing modern components also requires a more deliberate approach to selectors. This guide to &lt;a href="https://testautomationguide.com/how-to-test-web-components-and-slot-based-uis-without-fragile-selectors/" rel="noopener noreferrer"&gt;testing web components and slot-based interfaces without fragile selectors&lt;/a&gt; highlights an important principle: tests should target stable product meaning, not incidental implementation details.&lt;/p&gt;

&lt;p&gt;That distinction sounds academic until a frontend refactor breaks 80 tests overnight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code generation does not eliminate maintenance
&lt;/h2&gt;

&lt;p&gt;Playwright has made browser automation considerably more approachable. But approachable is not the same as maintenance-free.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://playwright-vs-selenium.com/hidden-maintenance-cost-of-playwright-tests/" rel="noopener noreferrer"&gt;hidden maintenance cost of Playwright tests&lt;/a&gt; is rarely the initial setup. It is the ongoing engineering work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updating fixtures&lt;/li&gt;
&lt;li&gt;Diagnosing timing problems&lt;/li&gt;
&lt;li&gt;Managing test data&lt;/li&gt;
&lt;li&gt;Reviewing generated code&lt;/li&gt;
&lt;li&gt;Maintaining CI infrastructure&lt;/li&gt;
&lt;li&gt;Teaching new team members how the framework works&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are arguments against Playwright. They are arguments against calling the software “free” simply because the license costs nothing.&lt;/p&gt;

&lt;p&gt;The same principle applies to AI-generated tests. Generating code quickly is valuable, but speed at creation can hide fragility.&lt;/p&gt;

&lt;p&gt;Small wording changes are a common example. This analysis of &lt;a href="https://aitestingcompare.com/why-ai-generated-tests-fail-after-small-ui-copy-changes/" rel="noopener noreferrer"&gt;why AI-generated tests fail after minor UI copy changes&lt;/a&gt; explains what happens when an agent uses visible text as both the intent and the locator.&lt;/p&gt;

&lt;p&gt;A human understands that “Continue,” “Next,” and “Proceed” may represent the same action. A brittle test sees three unrelated strings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-healing can create silent failures
&lt;/h2&gt;

&lt;p&gt;Self-healing sounds like the perfect solution to locator maintenance.&lt;/p&gt;

&lt;p&gt;A button moves, the old selector fails, and the system finds the new button automatically.&lt;/p&gt;

&lt;p&gt;But there is a dangerous edge case: the test can heal itself by selecting the wrong element.&lt;/p&gt;

&lt;p&gt;That is worse than a normal failure.&lt;/p&gt;

&lt;p&gt;A normal failure stops the run and asks someone to investigate. An incorrect repair can allow the test to pass while validating the wrong behavior.&lt;/p&gt;

&lt;p&gt;This article on &lt;a href="https://ai-test-agents.com/how-to-evaluate-ai-test-agents-for-self-healing-updates-without-letting-them-rewrite-the-wrong-locators/" rel="noopener noreferrer"&gt;preventing self-healing agents from rewriting the wrong locator&lt;/a&gt; outlines the controls I would expect from any serious implementation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A visible explanation of what changed&lt;/li&gt;
&lt;li&gt;The old and new locator&lt;/li&gt;
&lt;li&gt;Confidence information&lt;/li&gt;
&lt;li&gt;Screenshots or DOM evidence&lt;/li&gt;
&lt;li&gt;Human approval for ambiguous replacements&lt;/li&gt;
&lt;li&gt;A way to roll back the change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Self-healing should reduce repetitive work. It should not remove accountability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The owner matters more than the framework
&lt;/h2&gt;

&lt;p&gt;The most reliable test suites I have seen have one thing in common: ownership is obvious.&lt;/p&gt;

&lt;p&gt;Someone knows why each important test exists. Someone decides whether a failure should block a release. Someone removes redundant tests instead of letting the suite grow forever.&lt;/p&gt;

&lt;p&gt;When ownership is vague, automation slowly turns into an archaeological project.&lt;/p&gt;

&lt;p&gt;This guide on &lt;a href="https://test-automation-experts.com/how-to-audit-test-suite-ownership-before-your-automation-program-stalls/" rel="noopener noreferrer"&gt;auditing test suite ownership before an automation program stalls&lt;/a&gt; provides a useful exercise. For each major area, identify:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Who owns the product behavior?&lt;/li&gt;
&lt;li&gt;Who owns the automated coverage?&lt;/li&gt;
&lt;li&gt;Who investigates failures?&lt;/li&gt;
&lt;li&gt;Who approves major test changes?&lt;/li&gt;
&lt;li&gt;Who decides when a test should be deleted?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the answer to all five questions is “the QA team,” you probably do not have ownership. You have a queue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Optimize for understandable automation
&lt;/h2&gt;

&lt;p&gt;This is one reason I prefer automation systems that keep tests readable after AI has helped create them.&lt;/p&gt;

&lt;p&gt;For example, the &lt;a href="https://endtest.io/" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt; AI Test Creation Agent can help translate a natural-language instruction into test steps, while the resulting test remains visible and editable. AI Assertions can evaluate behavior that is difficult to capture with a rigid text comparison, but the broader workflow still needs to be understandable by the team.&lt;/p&gt;

&lt;p&gt;The AI is an accelerator, not the owner.&lt;/p&gt;

&lt;p&gt;That is the standard I would use for any automation platform or framework:&lt;/p&gt;

&lt;p&gt;Can another person understand the test, diagnose its failure, and safely change it without asking the original author?&lt;/p&gt;

&lt;p&gt;If the answer is no, the team has not eliminated maintenance.&lt;/p&gt;

&lt;p&gt;It has merely postponed it.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>qa</category>
      <category>automation</category>
      <category>devops</category>
    </item>
    <item>
      <title>Your Test Suite Is Not Reliable If Nobody Trusts Its Failures</title>
      <dc:creator>Markus Gasser</dc:creator>
      <pubDate>Mon, 03 Aug 2026 21:14:49 +0000</pubDate>
      <link>https://dev.to/mellowthunder735/your-test-suite-is-not-reliable-if-nobody-trusts-its-failures-1979</link>
      <guid>https://dev.to/mellowthunder735/your-test-suite-is-not-reliable-if-nobody-trusts-its-failures-1979</guid>
      <description>&lt;p&gt;Most teams do not have a test automation problem.&lt;/p&gt;

&lt;p&gt;They have a trust problem.&lt;/p&gt;

&lt;p&gt;The distinction matters because you can add more tests, increase browser coverage, buy another dashboard, and parallelize the entire suite without fixing the underlying issue.&lt;/p&gt;

&lt;p&gt;When a test fails, does the team believe it?&lt;/p&gt;

&lt;p&gt;Or does someone rerun the pipeline and hope the red box disappears?&lt;/p&gt;

&lt;p&gt;Once developers stop treating failures as useful information, the test suite becomes expensive background noise. It still consumes infrastructure, engineering time, and attention. It just no longer changes decisions.&lt;/p&gt;

&lt;p&gt;That is a dangerous place to end up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pass rate is a comforting but incomplete metric
&lt;/h2&gt;

&lt;p&gt;A dashboard showing a 96% pass rate looks reassuring.&lt;/p&gt;

&lt;p&gt;But what does it actually tell you?&lt;/p&gt;

&lt;p&gt;It does not tell you whether the failing 4% caught meaningful product defects. It does not tell you whether the passing tests covered the risky parts of the release. It does not tell you how many tests passed only after being retried three times.&lt;/p&gt;

&lt;p&gt;Pass rate is easy to calculate, which is why teams overvalue it.&lt;/p&gt;

&lt;p&gt;More useful measurements connect test behavior to actual release risk. That may include failure recurrence, defect-detection rate, time to diagnosis, retry dependence, escaped regressions, and the percentage of failures that require human investigation.&lt;/p&gt;

&lt;p&gt;This breakdown of &lt;a href="https://aitestingreport.com/ai-testing-metrics-that-actually-predict-production-risk-what-to-measure-beyond-pass-rate/" rel="noopener noreferrer"&gt;AI testing metrics that predict production risk&lt;/a&gt; offers a useful starting point. The core lesson is that testing metrics should help you make release decisions, not merely decorate a dashboard.&lt;/p&gt;

&lt;p&gt;A test suite that passes 99% of the time but misses checkout failures is worse than one that passes 92% of the time and reliably catches revenue-impacting regressions.&lt;/p&gt;

&lt;p&gt;The number is not the goal. Better judgment is the goal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maintenance cost is part of reliability
&lt;/h2&gt;

&lt;p&gt;Teams often evaluate an automated test by asking whether it works today.&lt;/p&gt;

&lt;p&gt;That is the easiest point in the test’s life.&lt;/p&gt;

&lt;p&gt;The expensive part begins later:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The interface changes.&lt;/li&gt;
&lt;li&gt;The test data becomes invalid.&lt;/li&gt;
&lt;li&gt;An API response changes shape.&lt;/li&gt;
&lt;li&gt;The application introduces a loading state.&lt;/li&gt;
&lt;li&gt;The original test author leaves.&lt;/li&gt;
&lt;li&gt;Nobody remembers why a particular assertion exists.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A test that takes ten minutes to create and three hours per month to maintain is not a ten-minute test.&lt;/p&gt;

&lt;p&gt;This is especially important when evaluating AI-assisted testing. Generating a test quickly is useful, but generation speed tells you almost nothing about the long-term economics of the suite.&lt;/p&gt;

&lt;p&gt;A better evaluation looks at how often generated tests require editing, how clearly failures are explained, how much context a person needs to repair them, and how sensitive they are to ordinary product changes.&lt;/p&gt;

&lt;p&gt;The article on &lt;a href="https://ai-testing-tools.com/ai-test-evaluation-metrics-that-actually-predict-maintenance-cost/" rel="noopener noreferrer"&gt;AI test evaluation metrics that predict maintenance cost&lt;/a&gt; explores exactly this issue. Maintenance burden is not an unfortunate side effect. It is one of the primary outputs of your testing architecture.&lt;/p&gt;

&lt;p&gt;Ignore it, and the suite will eventually become too expensive to trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Observability is not the same as having more logs
&lt;/h2&gt;

&lt;p&gt;When a test fails, most tools can produce information.&lt;/p&gt;

&lt;p&gt;The problem is that information is not automatically useful.&lt;/p&gt;

&lt;p&gt;A screenshot, browser console dump, network archive, DOM snapshot, video, and 4,000-line execution log may technically contain the answer. But if someone needs forty minutes to reconstruct what happened, the system has poor observability.&lt;/p&gt;

&lt;p&gt;Good observability reduces the distance between a failure and a plausible explanation.&lt;/p&gt;

&lt;p&gt;It should help answer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What did the test expect?&lt;/li&gt;
&lt;li&gt;What actually happened?&lt;/li&gt;
&lt;li&gt;What changed immediately before the failure?&lt;/li&gt;
&lt;li&gt;Is this likely a product problem, test problem, data problem, or infrastructure problem?&lt;/li&gt;
&lt;li&gt;Has the same failure pattern appeared before?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is why teams should be careful when comparing tools based on dashboard screenshots. More widgets do not necessarily mean faster diagnosis.&lt;/p&gt;

&lt;p&gt;A practical guide to &lt;a href="https://aitestingreviews.com/how-to-evaluate-ai-test-observability-features-without-getting-lost-in-dashboard-noise/" rel="noopener noreferrer"&gt;evaluating AI test observability without getting lost in dashboard noise&lt;/a&gt; makes this distinction well. The best system is not the one that records the most data. It is the one that helps a person reach the correct conclusion with less effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI agents need recovery tests, not just happy-path tests
&lt;/h2&gt;

&lt;p&gt;Testing an AI agent introduces another layer of uncertainty.&lt;/p&gt;

&lt;p&gt;A conventional test follows a known sequence. An agent may choose a tool, interpret the result, update its working state, and decide what to do next.&lt;/p&gt;

&lt;p&gt;That means a successful final answer can hide a fragile process.&lt;/p&gt;

&lt;p&gt;Suppose an agent is asked to update a customer record. It selects the wrong tool, receives an error, retries with a second tool, partially changes the record, and then reports success.&lt;/p&gt;

&lt;p&gt;A test that checks only the final response may miss the entire problem.&lt;/p&gt;

&lt;p&gt;Agent testing needs to examine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool selection&lt;/li&gt;
&lt;li&gt;Argument construction&lt;/li&gt;
&lt;li&gt;Memory updates&lt;/li&gt;
&lt;li&gt;Recovery behavior&lt;/li&gt;
&lt;li&gt;Retry limits&lt;/li&gt;
&lt;li&gt;Partial side effects&lt;/li&gt;
&lt;li&gt;Escalation when confidence is low&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The guide on &lt;a href="https://ai-test-agents.com/how-to-test-ai-agents-for-tool-use-memory-and-recovery-paths/" rel="noopener noreferrer"&gt;testing AI agents for tool use, memory, and recovery paths&lt;/a&gt; is worth reading because it treats the agent’s decision process as part of the product.&lt;/p&gt;

&lt;p&gt;That is the right mental model.&lt;/p&gt;

&lt;p&gt;An AI agent is not reliable merely because it reaches the correct answer during a demo. It is reliable when it behaves safely and predictably after something goes wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maintenance needs an operating routine
&lt;/h2&gt;

&lt;p&gt;Even a well-designed test suite degrades without ownership.&lt;/p&gt;

&lt;p&gt;Tests accumulate. Product behavior changes. Old assumptions survive in assertions long after the corresponding feature has been redesigned.&lt;/p&gt;

&lt;p&gt;You need a recurring maintenance routine.&lt;/p&gt;

&lt;p&gt;That does not have to become a giant quarterly initiative. A lightweight process is usually better:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove tests that no longer influence decisions.&lt;/li&gt;
&lt;li&gt;Review tests with frequent retries.&lt;/li&gt;
&lt;li&gt;Identify the most expensive failures to diagnose.&lt;/li&gt;
&lt;li&gt;Consolidate duplicated setup logic.&lt;/li&gt;
&lt;li&gt;Update test data before it causes widespread failures.&lt;/li&gt;
&lt;li&gt;Assign ownership for unstable areas.&lt;/li&gt;
&lt;li&gt;Track whether maintenance work reduces future interruptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This &lt;a href="https://test-automation-experts.com/test-automation-maintenance-checklist-for-scaling-qa-teams/" rel="noopener noreferrer"&gt;test automation maintenance checklist for scaling QA teams&lt;/a&gt; provides a practical structure.&lt;/p&gt;

&lt;p&gt;The key is to treat maintenance as normal product work rather than evidence that the automation project failed.&lt;/p&gt;

&lt;p&gt;Software changes. Tests must change with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real objective
&lt;/h2&gt;

&lt;p&gt;The goal of test automation is not to produce the largest possible collection of green checkmarks.&lt;/p&gt;

&lt;p&gt;It is to help a team ship changes with more confidence and less wasted effort.&lt;/p&gt;

&lt;p&gt;That requires more than execution.&lt;/p&gt;

&lt;p&gt;It requires meaningful metrics, diagnosable failures, sensible recovery behavior, and a maintenance model the team can sustain.&lt;/p&gt;

&lt;p&gt;The test suite earns trust one useful failure at a time.&lt;/p&gt;

&lt;p&gt;Once it loses that trust, adding more tests usually makes the problem worse.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>testing</category>
      <category>qa</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
