<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>TestWatch blog</title>
    <link>https://testwatch.dev/blog</link>
    <description>AI end-to-end testing, measured: posts from the team that builds TestWatch.</description>
    <language>en</language>
    <atom:link href="https://testwatch.dev/blog.xml" rel="self" type="application/rss+xml" />
    <lastBuildDate>Wed, 28 Oct 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>Playwright anti-patterns: 5 flaky code shapes we reject</title>
      <link>https://testwatch.dev/blog/playwright-anti-patterns</link>
      <guid isPermaLink="true">https://testwatch.dev/blog/playwright-anti-patterns</guid>
      <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
      <description>Most flaky Playwright tests wait on time instead of on the app. These are the code shapes TestWatch rejects in every generated test, with the exact message the check returns and the rewrite it accepts.</description>
    </item>
    <item>
      <title>Why Playwright tests pass locally but fail in CI</title>
      <link>https://testwatch.dev/blog/playwright-pass-locally-fail-in-ci</link>
      <guid isPermaLink="true">https://testwatch.dev/blog/playwright-pass-locally-fail-in-ci</guid>
      <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
      <description>The test is the same on both machines; the machine isn’t. Each difference between your laptop and a CI runner, how it breaks a test, and the playwright.config.ts line that pins it.</description>
    </item>
    <item>
      <title>How to evaluate AI testing tools: count the false greens</title>
      <link>https://testwatch.dev/blog/how-to-evaluate-ai-testing-tools</link>
      <guid isPermaLink="true">https://testwatch.dev/blog/how-to-evaluate-ai-testing-tools</guid>
      <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
      <description>A green check from the tool that wrote the test is the tool grading itself. Here is how to score a trial so a test that passes on a broken app gets counted, with our own eval as the worked example.</description>
    </item>
  </channel>
</rss>
