<?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: AutomationDataCamp</title>
    <description>The latest articles on DEV Community by AutomationDataCamp (@automationdatacamp).</description>
    <link>https://dev.to/automationdatacamp</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%2F4155938%2F564f7d4e-3c30-4bb4-87b9-6a9f897a52cb.png</url>
      <title>DEV Community: AutomationDataCamp</title>
      <link>https://dev.to/automationdatacamp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/automationdatacamp"/>
    <language>en</language>
    <item>
      <title>ISTQB CT-AI vs CT-GenAI: which AI certification should a tester take?</title>
      <dc:creator>AutomationDataCamp</dc:creator>
      <pubDate>Fri, 02 Oct 2026 00:57:24 +0000</pubDate>
      <link>https://dev.to/automationdatacamp/istqb-ct-ai-vs-ct-genai-which-ai-certification-should-a-tester-take-4npc</link>
      <guid>https://dev.to/automationdatacamp/istqb-ct-ai-vs-ct-genai-which-ai-certification-should-a-tester-take-4npc</guid>
      <description>&lt;p&gt;ISTQB offers two certifications around artificial intelligence, and their names are easy to mix up. &lt;strong&gt;CT-AI&lt;/strong&gt; ("AI Testing") certifies the ability to &lt;strong&gt;test AI-based systems&lt;/strong&gt;: data, machine learning models, generative AI systems. &lt;strong&gt;CT-GenAI&lt;/strong&gt; ("Testing with Generative AI") certifies the ability to &lt;strong&gt;use generative AI to test&lt;/strong&gt;: prompting, risk management, LLM-powered tools. CT-AI version 2.0, released on 17 April 2026, made that boundary clear. This guide compares both with official figures and helps you choose.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CT-AI = testing AI&lt;/strong&gt;; &lt;strong&gt;CT-GenAI = testing with AI&lt;/strong&gt;. Since CT-AI v2.0, "using AI for testing" belongs to CT-GenAI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same prerequisite&lt;/strong&gt;: the CTFL (Foundation Level) certification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same exam format&lt;/strong&gt;: 40 questions in 60 minutes; CT-AI v2.0 pass mark is 29 out of 44 points, CT-GenAI 30 out of 46.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CT-AI v1.0 is retiring&lt;/strong&gt;: English exam until 21 April 2027, other languages until 21 October 2027; v1.0 certificates remain valid.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  CT-AI vs CT-GenAI in one sentence
&lt;/h2&gt;

&lt;p&gt;CT-AI is for testers whose &lt;strong&gt;product contains AI&lt;/strong&gt;: a recommendation engine, a fraud detection model, an LLM-based chatbot. The question is "is this AI system reliable, fair, robust?". CT-GenAI is for testers who want to &lt;strong&gt;use generative AI in their own work&lt;/strong&gt;: writing test cases, generating data, analysing results, building internal tools on top of an LLM. The question becomes "how do I use these assistants without lowering the quality of my tests?".&lt;/p&gt;

&lt;p&gt;The two can complement each other. A tester can use an AI assistant (CT-GenAI) to test a product that itself embeds a model (CT-AI). But the skills assessed are different.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does ISTQB CT-AI v2.0 cover?
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Certified Tester AI Testing v2.0&lt;/strong&gt; syllabus was released by the ISTQB General Assembly on 17 April 2026. It is a rewrite of the 2021 version 1.0: it goes from 11 to 7 chapters, and recommended training goes from four to three days. Content on using AI for testing was removed, with ISTQB pointing to CT-GenAI for that topic. The seven chapters, with the training time given in the syllabus:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Introduction to Artificial Intelligence (120 min)&lt;/li&gt;
&lt;li&gt;Quality Characteristics for AI-Based Systems (45 min)&lt;/li&gt;
&lt;li&gt;Machine Learning (375 min)&lt;/li&gt;
&lt;li&gt;Testing AI-Based Systems (195 min), including a section on testing generative AI and large language models, with red teaming&lt;/li&gt;
&lt;li&gt;Input Data Testing for Machine Learning Systems (180 min)&lt;/li&gt;
&lt;li&gt;Model Testing for Machine Learning Systems (225 min)&lt;/li&gt;
&lt;li&gt;Machine Learning Development Testing (30 min)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is 1,170 minutes in total, about 19.5 hours. ISTQB's stated outcomes include understanding how neural networks work, knowing the ISO/IEC 25059 quality characteristics, calculating machine learning performance metrics, and designing and executing test cases for machine learning systems. Target audience: testers, test analysts, test engineers, test managers, consultants, data analysts, developers and UAT roles.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does ISTQB CT-GenAI cover?
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Certified Tester – Testing with Generative AI&lt;/strong&gt; syllabus was approved by the ISTQB General Assembly on 25 July 2025. The current version is 1.1, a minor update announced in April 2026 that, according to ISTQB, does not change the structure, learning objectives or scope. Its five chapters:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Introduction to Generative AI for Software Testing&lt;/li&gt;
&lt;li&gt;Prompt Engineering for Effective Software Testing&lt;/li&gt;
&lt;li&gt;Managing Risks of Generative AI in Software Testing (hallucinations, reasoning errors, bias, data privacy, energy consumption, regulation)&lt;/li&gt;
&lt;li&gt;LLM-Powered Solutions for Software Testing&lt;/li&gt;
&lt;li&gt;Deploying and Integrating Generative AI in Test Organizations&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The v1.0 syllabus plans 815 minutes of training, about 13.5 hours, of which 365 minutes for prompt engineering alone: it is the practical core of the certification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side-by-side comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;CT-AI v2.0&lt;/th&gt;
&lt;th&gt;CT-GenAI v1.1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Focus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Testing AI-based systems&lt;/td&gt;
&lt;td&gt;Using generative AI to test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prerequisite&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CTFL&lt;/td&gt;
&lt;td&gt;CTFL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chapters&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Training time in syllabus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1,170 min (about 3 days)&lt;/td&gt;
&lt;td&gt;815 min (v1.0 syllabus)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exam&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;40 questions, 60 min&lt;/td&gt;
&lt;td&gt;40 questions, 60 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pass mark&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;29 out of 44 points&lt;/td&gt;
&lt;td&gt;30 out of 46 points&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Extra time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;+25% for non-native speakers&lt;/td&gt;
&lt;td&gt;+25% for non-native speakers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Typical profile&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tester of a product embedding ML or an LLM&lt;/td&gt;
&lt;td&gt;Tester who wants to work with AI assistants&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sources: official ISTQB pages and syllabi, accessed on 2 October 2026 (list at the end).&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one fits your profile?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You test a product that includes AI&lt;/strong&gt; (scoring, recommendation, vision, chatbot, agent): CT-AI. You will learn to test data, models and generative AI systems, topics that classic test techniques do not cover.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want to be more productive with ChatGPT, Claude or Copilot&lt;/strong&gt;: CT-GenAI. It gives a method to write test prompts, check what the AI produces and manage its risks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You are aiming for a test automation role&lt;/strong&gt;: CT-GenAI is the most useful day to day, as coding assistants are now everyday tools (see our &lt;a href="https://www.automationdatacamp.com/en/blog-post-playwright-mcp" rel="noopener noreferrer"&gt;Playwright MCP&lt;/a&gt; guide). To go deeper into automation itself, ISTQB offers the advanced &lt;strong&gt;CTAL-TAE&lt;/strong&gt; (Test Automation Engineering v2.0): it requires CTFL and sufficient practical experience, and its exam has 40 questions in 90 minutes, passed at 43 out of 66 points.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You are a test manager or consultant&lt;/strong&gt;: both make sense. CT-GenAI covers the strategy for adopting generative AI in a test team, CT-AI the test strategy for an AI-based product.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  CTFL first, in every case
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.automationdatacamp.com/en/certification-istqb-ctfl" rel="noopener noreferrer"&gt;CTFL v4.0&lt;/a&gt; is the shared prerequisite. Its exam has 40 questions in 60 minutes and is passed at 26 out of 40 points. If you do not have it yet, start there. See all the certifications we prepare on our &lt;a href="https://www.automationdatacamp.com/en/certifications" rel="noopener noreferrer"&gt;certifications page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to prepare with ADC
&lt;/h2&gt;

&lt;p&gt;Our QA Automation &amp;amp; AI Tester programme, taught in French, includes &lt;strong&gt;preparation for the ISTQB CTFL and CT-GenAI exams, exams included&lt;/strong&gt;. We do not prepare for CT-AI at this time. AutomationDataCamp is not an ISTQB-accredited training provider: we prepare candidates for the exams, which are delivered by official exam providers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between ISTQB CT-AI and CT-GenAI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CT-AI (AI Testing) teaches how to test AI-based systems: data, machine learning models and generative AI systems. CT-GenAI (Testing with Generative AI) teaches how to use generative AI to test: prompting, risks such as hallucinations, and LLM-powered tooling. Since CT-AI version 2.0, the 'using AI for testing' content was removed from CT-AI and points to CT-GenAI instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need CTFL for CT-AI or CT-GenAI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. ISTQB requires the Certified Tester Foundation Level (CTFL) certification for both CT-AI v2.0 and CT-GenAI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is my CT-AI v1.0 certificate still valid?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. According to ISTQB, certifications obtained under version 1.0 remain valid, with no requirement to retake the exam. The v1.0 exam stays available in English until 21 April 2027 and in other languages until 21 October 2027.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the CT-AI and CT-GenAI exams like?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both have 40 questions in 60 minutes, with 25% extra time for candidates not taking the exam in their native language. CT-AI v2.0 is scored out of 44 points with a pass mark of 29; CT-GenAI out of 46 points with a pass mark of 30.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which one should a beginner choose?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start with CTFL, which is required for both. Then choose CT-GenAI if your goal is to be more productive with AI assistants day to day, and CT-AI if you test, or will test, a product that embeds machine learning or a language model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sources and references
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://istqb.org/certifications/certified-tester-ai-testing-ct-ai/" rel="noopener noreferrer"&gt;ISTQB — Certified Tester AI Testing (CT-AI) v2.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://istqb.org/wp-content/uploads/2026/05/ISTQB-_CTAI_Syllabus_v2.0_Release.pdf" rel="noopener noreferrer"&gt;ISTQB — CT-AI Syllabus v2.0 (PDF, 17/04/2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://istqb.org/help/ct-ai-v2/" rel="noopener noreferrer"&gt;ISTQB — CT-AI Version 2.0, FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://istqb.org/istqb-releases-certified-tester-ai-testing-ct-ai-syllabus-version-2-0/" rel="noopener noreferrer"&gt;ISTQB — CT-AI v2.0 announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://istqb.org/certifications/gen-ai/" rel="noopener noreferrer"&gt;ISTQB — Certified Tester Testing with Generative AI (CT-GenAI)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://istqb.org/wp-content/uploads/sdm-uploads/CT-GenAI-Syllabus-v1.0.pdf" rel="noopener noreferrer"&gt;ISTQB — CT-GenAI Syllabus v1.0 (PDF, 25/07/2025)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://istqb.org/istqb-announces-minor-update-to-certified-tester-testing-with-generative-ai-ct-genai/" rel="noopener noreferrer"&gt;ISTQB — CT-GenAI v1.1 update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://istqb.org/certifications/certified-tester-foundation-level-ctfl-v4-0/" rel="noopener noreferrer"&gt;ISTQB — Certified Tester Foundation Level (CTFL) v4.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://istqb.org/certifications/certified-tester-advanced-level-test-automation-engineering-ctal-tae-v2-0/" rel="noopener noreferrer"&gt;ISTQB — CTAL Test Automation Engineering (CTAL-TAE) v2.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Written with AI assistance; every figure was checked against the official ISTQB sources listed above, accessed on 2 October 2026. A French version is available: &lt;a href="https://www.automationdatacamp.com/blog-post-istqb-ai-testing" rel="noopener noreferrer"&gt;ISTQB CT-AI ou CT-GenAI&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Prepare for CTFL and CT-GenAI
&lt;/h3&gt;

&lt;p&gt;Our programme prepares you for the ISTQB CTFL and CT-GenAI exams, exams included, with mock exams in the official format. Courses are taught in French. Programme details: &lt;a href="https://www.automationdatacamp.com/en/formations" rel="noopener noreferrer"&gt;automationdatacamp.com/en/formations&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>ai</category>
      <category>career</category>
      <category>certification</category>
    </item>
    <item>
      <title>Playwright MCP: let an AI assistant explore your app, then write the test (Claude Code, Copilot, Cursor)</title>
      <dc:creator>AutomationDataCamp</dc:creator>
      <pubDate>Thu, 01 Oct 2026 23:36:52 +0000</pubDate>
      <link>https://dev.to/automationdatacamp/playwright-mcp-let-an-ai-assistant-explore-your-app-then-write-the-test-claude-code-copilot-44p5</link>
      <guid>https://dev.to/automationdatacamp/playwright-mcp-let-an-ai-assistant-explore-your-app-then-write-the-test-claude-code-copilot-44p5</guid>
      <description>&lt;p&gt;Playwright MCP is Microsoft's official Model Context Protocol server for Playwright. It gives an AI assistant such as Claude Code, GitHub Copilot or Cursor the tools to drive a real browser: navigate, click, fill forms and read the page. The interesting part for testers: the assistant reads the page through &lt;strong&gt;structured accessibility snapshots&lt;/strong&gt;, not screenshots, so no vision model is needed and it naturally "sees" the roles and accessible names that good Playwright locators are built on.&lt;/p&gt;

&lt;p&gt;This post walks through installation, a first explore-then-generate scenario, how MCP compares with Playwright CLI and the Playwright Test Agents, and the rules we teach to keep AI-generated tests trustworthy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install it in one command
&lt;/h2&gt;

&lt;p&gt;Node.js is the only prerequisite (the server runs with &lt;code&gt;npx&lt;/code&gt;). The browser is headed by default, which is handy to watch what the assistant does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add playwright npx @playwright/mcp@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VS Code (GitHub Copilot agent mode)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;code &lt;span class="nt"&gt;--add-mcp&lt;/span&gt; &lt;span class="s1"&gt;'{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cursor and other MCP clients&lt;/strong&gt; accept the standard JSON configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"playwright"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"@playwright/mcp@latest"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Options worth knowing (append them after &lt;code&gt;@playwright/mcp@latest&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--headless&lt;/code&gt;: no visible browser (CI machines, containers)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--isolated&lt;/code&gt;: keep the profile in memory, start from a clean session every time&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--storage-state &amp;lt;path&amp;gt;&lt;/code&gt;: start already logged in&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--secrets &amp;lt;path&amp;gt;&lt;/code&gt;: a dotenv file, so credentials never appear in your prompt&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--test-id-attribute&lt;/code&gt;: defaults to &lt;code&gt;data-testid&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--caps&lt;/code&gt;: optional capabilities such as &lt;code&gt;testing&lt;/code&gt; (assertion and locator-generation tools), &lt;code&gt;network&lt;/code&gt; (route mocking), &lt;code&gt;storage&lt;/code&gt;, &lt;code&gt;pdf&lt;/code&gt;, &lt;code&gt;vision&lt;/code&gt;, &lt;code&gt;devtools&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A first scenario: explore, then generate
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1, exploration.&lt;/strong&gt; Be precise in the prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Using Playwright MCP, open http://localhost:3000/login.
Describe the fields, buttons and messages on the page.
Then try to log in with a wrong password and report the exact error message.
Do not submit any other form.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The assistant calls &lt;code&gt;browser_navigate&lt;/code&gt;, &lt;code&gt;browser_snapshot&lt;/code&gt;, &lt;code&gt;browser_fill_form&lt;/code&gt; / &lt;code&gt;browser_type&lt;/code&gt; and &lt;code&gt;browser_click&lt;/code&gt;, then reads the page again. You get a report of the elements (with roles and accessible labels) and of the observed behaviour: a small, documented exploratory session.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2, generation.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;From what you observed, write tests/login.spec.ts with Playwright Test in TypeScript:
one successful login and one wrong-password case. Use getByRole and getByLabel only,
no CSS selectors, read credentials from environment variables.
Then run the tests and fix them if they fail.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A typical result (labels come from the demo app; yours will come from the real exploration):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;expect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@playwright/test&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Login&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;beforeEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/login&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a valid user reaches the dashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getByLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TEST_USER_EMAIL&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getByLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TEST_USER_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getByRole&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sign in&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toHaveURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sr"&gt;dashboard/&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getByRole&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;heading&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Dashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})).&lt;/span&gt;&lt;span class="nf"&gt;toBeVisible&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a wrong password shows an error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getByLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TEST_USER_EMAIL&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getByLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wrong-password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getByRole&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sign in&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getByRole&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;alert&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;toContainText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Invalid credentials&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toHaveURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sr"&gt;login/&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3, human review.&lt;/strong&gt; Read it like a colleague's pull request. Do the assertions check a business outcome or just that a click happened? Does the error case also check the user is &lt;em&gt;not&lt;/em&gt; logged in? Is an edge case missing (empty field, locked account)? Run it yourself and make it fail once on purpose to prove it catches a regression.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP, CLI or Test Agents?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;How it works&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Playwright MCP&lt;/td&gt;
&lt;td&gt;The AI calls &lt;code&gt;browser_*&lt;/code&gt; tools and reads accessibility snapshots&lt;/td&gt;
&lt;td&gt;Exploration, self-healing tests, long autonomous loops with a persistent browser context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Playwright CLI + Skills&lt;/td&gt;
&lt;td&gt;The coding agent runs short commands described by Skills&lt;/td&gt;
&lt;td&gt;Coding agents juggling a large codebase: more token-efficient&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Playwright Test Agents (1.56+)&lt;/td&gt;
&lt;td&gt;Three agents: planner, generator, healer&lt;/td&gt;
&lt;td&gt;Building or maintaining a Playwright Test suite with an assistant&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Playwright MCP README is explicit: for coding agents, CLI + Skills is often the better choice because it avoids loading large tool schemas and verbose accessibility trees into the context. MCP stays relevant when the agent needs to reason over page structure with persistent state.&lt;/p&gt;

&lt;p&gt;Test Agents are set up in an existing project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx playwright init-agents &lt;span class="nt"&gt;--loop&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;claude   &lt;span class="c"&gt;# or --loop=vscode, --loop=opencode&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Claude Code this writes agent definitions in &lt;code&gt;.claude/agents/&lt;/code&gt; and a &lt;code&gt;.mcp.json&lt;/code&gt; that starts &lt;code&gt;npx playwright run-test-mcp-server&lt;/code&gt;. The planner explores the app and writes a Markdown test plan, the generator turns it into test files, the healer runs the suite and repairs failing tests (as a last resort it marks a test &lt;code&gt;test.fixme()&lt;/code&gt; with a comment). Re-run the command after each Playwright upgrade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rules we teach for AI-generated tests
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Review every generated line.&lt;/strong&gt; A passing test is not necessarily a good test. The AI checks what it sees; the tester defines what the business expects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demand accessible locators&lt;/strong&gt; (&lt;code&gt;getByRole&lt;/code&gt;, &lt;code&gt;getByLabel&lt;/code&gt;, &lt;code&gt;getByTestId&lt;/code&gt;) and say so in the prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Own your test data.&lt;/strong&gt; Dedicated accounts and datasets, recreated before each run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep secrets out of prompts and code&lt;/strong&gt;: &lt;code&gt;--secrets&lt;/code&gt; for exploration, environment variables for tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never point the agent at production.&lt;/strong&gt; An assistant that clicks on its own can submit, delete or pay. Use a test environment and &lt;code&gt;--isolated&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch token cost.&lt;/strong&gt; Every snapshot and tool description fills the context. Scope the exploration to one flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep CI deterministic.&lt;/strong&gt; AI writes and repairs tests; plain Playwright Test runs them in the pipeline.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What it changes for testers
&lt;/h2&gt;

&lt;p&gt;Less time writing selectors and boilerplate, more time on test design (equivalence partitions, boundary values, decision tables), test data and code review. You still need to read and fix TypeScript: you can't review what you don't understand.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is adapted from our French guide &lt;a href="https://www.automationdatacamp.com/blog-post-playwright-mcp" rel="noopener noreferrer"&gt;Playwright MCP : tester avec l'IA&lt;/a&gt;. It was written with AI assistance; commands and options were checked against the official Playwright MCP and Playwright documentation.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AutomationDataCamp is an online software testing academy (Playwright, API testing, CI, AI-assisted testing, ISTQB prep). A ready-to-run Playwright + TypeScript starter with CI is on &lt;a href="https://github.com/automationdatacamp/playwright-starter" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;; more on &lt;a href="https://www.automationdatacamp.com/en/" rel="noopener noreferrer"&gt;our site&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; &lt;a href="https://github.com/microsoft/playwright-mcp" rel="noopener noreferrer"&gt;microsoft/playwright-mcp&lt;/a&gt; · &lt;a href="https://github.com/microsoft/playwright-cli" rel="noopener noreferrer"&gt;microsoft/playwright-cli&lt;/a&gt; · &lt;a href="https://playwright.dev/docs/test-agents" rel="noopener noreferrer"&gt;Playwright Test Agents&lt;/a&gt; · &lt;a href="https://playwright.dev/docs/locators" rel="noopener noreferrer"&gt;Playwright locators&lt;/a&gt;&lt;/p&gt;

</description>
      <category>playwright</category>
      <category>testing</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
