<?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: mohammed amine bousmaha</title>
    <description>The latest articles on DEV Community by mohammed amine bousmaha (@mohammed_aminebousmaha_b).</description>
    <link>https://dev.to/mohammed_aminebousmaha_b</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%2F3381227%2Fc55559c6-db14-4dda-9e29-51cafde94979.png</url>
      <title>DEV Community: mohammed amine bousmaha</title>
      <link>https://dev.to/mohammed_aminebousmaha_b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mohammed_aminebousmaha_b"/>
    <language>en</language>
    <item>
      <title>How to Stop Filling the Same Form Over and Over (Across Dev, Staging &amp; Prod)</title>
      <dc:creator>mohammed amine bousmaha</dc:creator>
      <pubDate>Mon, 29 Jun 2026 12:10:58 +0000</pubDate>
      <link>https://dev.to/mohammed_aminebousmaha_b/how-to-stop-filling-the-same-form-over-and-over-across-dev-staging-prod-2g8d</link>
      <guid>https://dev.to/mohammed_aminebousmaha_b/how-to-stop-filling-the-same-form-over-and-over-across-dev-staging-prod-2g8d</guid>
      <description>&lt;p&gt;If your job involves a web form, you've done this: fill the signup form on &lt;code&gt;localhost&lt;/code&gt;, fix a bug, fill it again on staging, retype every field, ship it, fill it one more time on production to confirm. Same form, same fields, three environments, twenty times a day.&lt;/p&gt;

&lt;p&gt;The typing isn't the real cost. The real cost is that you do it &lt;em&gt;inconsistently&lt;/em&gt; — slightly different data each time, a field skipped here, a typo there — so when something breaks you can't tell whether it was the code or the way you filled the form.&lt;/p&gt;

&lt;p&gt;This guide is about killing that loop: filling the same form the same way, every time, across every environment, in one click.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is harder than it should be
&lt;/h2&gt;

&lt;p&gt;Browsers and password managers are built for one job: drop &lt;em&gt;your&lt;/em&gt; personal details into &lt;em&gt;one&lt;/em&gt; checkout. That's a single identity, filled occasionally.&lt;/p&gt;

&lt;p&gt;Testing is the opposite shape:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Many fills, not one.&lt;/strong&gt; You run the same form hundreds of times across a release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Many environments.&lt;/strong&gt; &lt;code&gt;localhost:3000&lt;/code&gt;, &lt;code&gt;staging.app.com&lt;/code&gt;, &lt;code&gt;app.com&lt;/code&gt; — same form, different URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency matters more than realism.&lt;/strong&gt; You need the &lt;em&gt;same&lt;/em&gt; setup every run, or your results aren't comparable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built-in autofill solves none of these. So testers reach for a form filler — and most of them only solve the first half.&lt;/p&gt;

&lt;h2&gt;
  
  
  The usual tools — and where they stop
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Random / fake-data fillers&lt;/strong&gt; (Fake Filler popularized this; MockFill and FakerFill are newer takes) fill every field with one click. Great for a quick smoke test where &lt;em&gt;any&lt;/em&gt; value will do. But the value is different every time and you can't save a per-form setup — so you can't reproduce a run, and you re-decide field-by-field behavior on every page. (Worth noting: the original Fake Filler hasn't been updated since August 2024.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Save-and-restore extensions&lt;/strong&gt; (Web Developer Form Filler and similar) remember what you typed and re-inject it on refresh. Closer — but the saved data is tied loosely to the page, breaks across environment URLs, and gives you no rules: every field is just a frozen string.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Macro recorders&lt;/strong&gt; (iMacros and friends) replay a recorded sequence. Powerful, but brittle — the recording snaps the moment the form's markup shifts, and maintaining macros is its own job.&lt;/p&gt;

&lt;p&gt;Each is fine for the slice it covers. None of them nails &lt;em&gt;"the same controlled setup, auto-loaded on the right environment, every time."&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: capture the form once as a preset
&lt;/h2&gt;

&lt;p&gt;This is how &lt;a href="https://fillr.app" rel="noopener noreferrer"&gt;Fillr&lt;/a&gt; approaches it. Instead of filling fresh every time, you capture the form &lt;strong&gt;once&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Point Fillr at the form. It captures every field — inputs, selects, radios, the lot.&lt;/li&gt;
&lt;li&gt;For each field you set a rule, once: &lt;strong&gt;Generate&lt;/strong&gt; (realistic value), &lt;strong&gt;Fixed value&lt;/strong&gt; (always this exact string), &lt;strong&gt;Blank&lt;/strong&gt;, or &lt;strong&gt;Skip&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Save it as a &lt;strong&gt;preset&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now that form has a saved identity. Email is always the same fixed test address. Signup date is always freshly generated. The internal-notes field is always skipped. Every fill is identical because the &lt;em&gt;rules&lt;/em&gt; are identical — that's the consistency that makes a broken run mean something.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that matters across environments: URL matching
&lt;/h2&gt;

&lt;p&gt;Here's the wedge no random filler has. Each preset stores &lt;strong&gt;URL match patterns&lt;/strong&gt; — glob patterns like &lt;code&gt;*.app.com/signup&lt;/code&gt; or &lt;code&gt;localhost:*/signup&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So when you land on the signup form — whether it's &lt;code&gt;localhost:3000/signup&lt;/code&gt;, &lt;code&gt;staging.app.com/signup&lt;/code&gt;, or &lt;code&gt;app.com/signup&lt;/code&gt; — Fillr recognizes the page and the right preset is already there. No picking it from a list. No re-uploading. One click fills it the same way it filled on the last environment.&lt;/p&gt;

&lt;p&gt;That's the whole loop collapsed: &lt;strong&gt;same form across dev, staging, and prod = one preset, auto-matched, filled identically every time.&lt;/strong&gt; You stop deciding &lt;em&gt;how&lt;/em&gt; to fill and just fill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side-by-side: filling the same form repeatedly
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Browser autofill&lt;/th&gt;
&lt;th&gt;Random fillers&lt;/th&gt;
&lt;th&gt;Save-and-restore&lt;/th&gt;
&lt;th&gt;Fillr (presets)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;One-click fill&lt;/td&gt;
&lt;td&gt;⚠️ per field&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same setup every run&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌ random&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-field rules (fixed / generate / skip)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️ limited&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto-loads on the right URL&lt;/td&gt;
&lt;td&gt;⚠️ basic&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️ fragile&lt;/td&gt;
&lt;td&gt;✅ glob patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works across dev / staging / prod&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️ manual&lt;/td&gt;
&lt;td&gt;⚠️ breaks on URL change&lt;/td&gt;
&lt;td&gt;✅ one preset, many envs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reproducible runs&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Realistic generated data when you want it&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ 120+ types, 60+ languages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data stays local / private&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ usually&lt;/td&gt;
&lt;td&gt;✅ usually&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The gap every other column shares: nothing carries &lt;em&gt;one controlled setup&lt;/em&gt; across multiple environment URLs. That's exactly the repetitive-testing case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Walkthrough: set it up once, fill it forever
&lt;/h2&gt;

&lt;p&gt;Using Fillr, end to end:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install the extension&lt;/strong&gt; and open the form you fill most — your signup, checkout, or admin form.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capture it as a preset.&lt;/strong&gt; Fillr grabs every field.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set your rules.&lt;/strong&gt; Fixed values for the things that must stay constant (test email, plan tier), Generate for the things that should vary realistically (names, dates), Skip for fields you never touch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the URL pattern.&lt;/strong&gt; Fillr suggests one automatically; widen it so it matches all your environments (e.g. &lt;code&gt;*app.com/signup&lt;/code&gt; and &lt;code&gt;localhost:*/signup&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Go fill.&lt;/strong&gt; On any matching environment the preset loads itself. One click, identical fill, every time.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Set up once at the start of a feature. Spend the rest of the release clicking.&lt;/p&gt;

&lt;h2&gt;
  
  
  When the data itself needs to change each fill
&lt;/h2&gt;

&lt;p&gt;Sometimes you don't want the &lt;em&gt;same&lt;/em&gt; data — you want to march through a list of test cases (20 accounts, a batch of edge-case phone numbers). That's a dataset, not a single preset, and it's a related-but-separate workflow: see &lt;a href="https://dev.to/blog/how-to-autofill-forms-with-your-own-data"&gt;how to autofill forms with your own data&lt;/a&gt;. And if you're testing across markets, &lt;a href="https://dev.to/blog/how-to-fill-forms-with-localized-test-data"&gt;localized test data in 60+ languages&lt;/a&gt; covers filling with locale-correct names and addresses.&lt;/p&gt;

&lt;p&gt;For the plain "same form, same setup, over and over" loop, a preset is all you need.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;How do I fill the same form repeatedly without retyping?&lt;/strong&gt;&lt;br&gt;
Capture it once as a preset with per-field rules, then fill in one click. Tools like Fillr save the setup so every fill is identical — unlike random fillers, which produce different values each time and save no configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I test the same form across dev, staging, and production?&lt;/strong&gt;&lt;br&gt;
Use a form filler that matches forms by URL pattern. In Fillr, one preset stores glob patterns (e.g. &lt;code&gt;*.app.com/signup&lt;/code&gt;, &lt;code&gt;localhost:*/signup&lt;/code&gt;) so the same setup auto-loads on every environment and fills identically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between this and a random form filler?&lt;/strong&gt;&lt;br&gt;
A random filler drops &lt;em&gt;any&lt;/em&gt; value in every field — good for a quick smoke test, useless when you need the same input twice. A preset saves a rule per field (fixed, generate, skip), so runs are reproducible and comparable across environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I still generate realistic data for some fields?&lt;/strong&gt;&lt;br&gt;
Yes. Set those fields to &lt;em&gt;Generate&lt;/em&gt; — Fillr produces realistic values across 120+ data types and 60+ languages — while keeping others fixed or skipped. Mix per field.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it work on internal tools, admin panels, and localhost?&lt;/strong&gt;&lt;br&gt;
Yes — any web form, including staging and &lt;code&gt;localhost&lt;/code&gt;. URL patterns match your environments and nothing is installed on the site itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is my data private?&lt;/strong&gt;&lt;br&gt;
Your presets live in your own account, visible only to you. The extension stores no passwords or tokens, filling happens locally in your browser, and a form is only captured when you explicitly save it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;The waste in repetitive form testing isn't the typing — it's doing it &lt;em&gt;differently&lt;/em&gt; every time across every environment. Fix that and the loop disappears: capture the form once, set a rule per field, let it match your dev, staging, and prod URLs, and fill the same way in one click forever.&lt;/p&gt;

&lt;p&gt;That's what &lt;a href="https://fillr.app" rel="noopener noreferrer"&gt;Fillr&lt;/a&gt; is built for. &lt;a href="https://chromewebstore.google.com/detail/fillr-form-filler-test-da/peppngdnnhjpchacodkdadojgnafepdd" rel="noopener noreferrer"&gt;Add it to Chrome&lt;/a&gt; and turn your most-filled form into a one-click preset.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Fill Forms With Localized Test Data in 60+ Languages (Names, Addresses, Phones)</title>
      <dc:creator>mohammed amine bousmaha</dc:creator>
      <pubDate>Fri, 26 Jun 2026 11:03:44 +0000</pubDate>
      <link>https://dev.to/mohammed_aminebousmaha_b/how-to-fill-forms-with-localized-test-data-in-60-languages-names-addresses-phones-4h5h</link>
      <guid>https://dev.to/mohammed_aminebousmaha_b/how-to-fill-forms-with-localized-test-data-in-60-languages-names-addresses-phones-4h5h</guid>
      <description>&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%2Fyfco2feosm2nz2heu8cu.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%2Fyfco2feosm2nz2heu8cu.png" alt="A lone tester at a desk surrounded by floating forms and speech bubbles in many world scripts and flags, overwhelmed by testing one product across dozens of languages." width="800" height="447"&gt;&lt;/a&gt;&amp;gt; Testing a multilingual app means filling forms with locale-correct names, addresses, and phone numbers — not English data with accents bolted on. Here's how to generate localized test data for any web form, in 60+ languages, without building a spreadsheet per market.&lt;/p&gt;

&lt;p&gt;If you test a product that ships in more than one language, you already know the chore: every signup, checkout, and address form has to be filled with data that &lt;em&gt;looks right&lt;/em&gt; for each market. A Japanese name in kanji. A German street address with the house number after the street. A French phone number that starts &lt;code&gt;+33&lt;/code&gt;. A Brazilian name with a tilde in it.&lt;/p&gt;

&lt;p&gt;English test data with a couple of accents pasted in doesn't catch the bugs. The bugs live in the real shapes — the field that truncates kanji, the validator that rejects a 9-digit local number, the address line that assumes a US ZIP. To find those, you need &lt;strong&gt;localized test data&lt;/strong&gt;: values generated to each locale's actual conventions.&lt;/p&gt;

&lt;p&gt;This guide is about getting that data into your forms quickly — without hand-building a spreadsheet for every language you support.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "localized test data" actually means
&lt;/h2&gt;

&lt;p&gt;It's not translation. It's data shaped to a region's real conventions. For a typical form, that's:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Names&lt;/strong&gt; with the right script and characters — &lt;code&gt;ü&lt;/code&gt;, &lt;code&gt;ñ&lt;/code&gt;, &lt;code&gt;é&lt;/code&gt;, kanji, Cyrillic, Arabic — not Latin names with a diacritic sprinkled on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Addresses&lt;/strong&gt; in the local format — street/number order, postal-code shape, and the fields a country actually uses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phone numbers&lt;/strong&gt; with the correct country code and local grouping, not a US 10-digit pattern everywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dates, currency, and numbers&lt;/strong&gt; that exercise each locale's separators and formats — the things that quietly break parsing and sorting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reason this matters: most internationalization (i18n) defects come from the &lt;em&gt;shape&lt;/em&gt; of the input, not the translated label above it. A form that works fine with &lt;code&gt;John Smith&lt;/code&gt; falls over on &lt;code&gt;José Müller&lt;/code&gt; or &lt;code&gt;田中 太郎&lt;/code&gt;. You only see it if you fill it with data that looks like that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the usual ways are slow
&lt;/h2&gt;

&lt;p&gt;Most teams reach for one of these, and each has a catch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A spreadsheet per locale.&lt;/strong&gt; Accurate, but you build and maintain one by hand for every market. It's the single biggest time sink in localization testing, and it goes stale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Translate the English data.&lt;/strong&gt; Translates words, not formats. You get translated text in a US address shape — which is exactly the case that hides the bug.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A random / fake-data filler.&lt;/strong&gt; One click fills the form, but the data is English-only. Most random fillers (Fake Filler and similar) have no concept of locale, so they can't produce a kanji name or a &lt;code&gt;+49&lt;/code&gt; number at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A faker script in code.&lt;/strong&gt; Libraries like Faker.js do generate locale-aware data — but you're writing and running code, exporting files, and pasting values into the browser by hand. It's not a fill-the-form-in-front-of-you workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The gap is the same one every time: there's no quick way to drop &lt;strong&gt;locale-correct, realistic data&lt;/strong&gt; straight into the form you're looking at, switch the language, and go again.&lt;/p&gt;

&lt;h2&gt;
  
  
  The faster way: pick a language and fill — no setup
&lt;/h2&gt;

&lt;p&gt;This is what &lt;a href="https://fillr.app" rel="noopener noreferrer"&gt;Fillr&lt;/a&gt; is built for, and the core of it takes no configuration at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open the side panel, pick a language, click fill.&lt;/strong&gt; On any form, open the Fillr side panel, choose your locale from the list — English, Japanese, German, French, Portuguese, Arabic, and 60+ in total — and hit fill. Every field gets realistic data generated for &lt;em&gt;that&lt;/em&gt; locale: the name in the right script, the address in the local format, the phone with the right country code. No preset, no spreadsheet, no code. Switch the locale, fill again, and the same form is populated for the next market. That's the whole loop.&lt;/p&gt;

&lt;p&gt;The generated values draw from 120+ data types — names, emails, street addresses, phone numbers, IBANs, company names, and more — each one locale-aware. So a full multilingual pass on a form is: pick a language, fill, switch, fill — a few clicks per market.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want it the same way every time? Save a preset (optional).&lt;/strong&gt; If you test a form often and want control over individual fields, capture it once as a preset. Then each field gets a rule — &lt;em&gt;Generate&lt;/em&gt; a realistic value, use a &lt;em&gt;Fixed value&lt;/em&gt;, leave it &lt;em&gt;Blank&lt;/em&gt;, &lt;em&gt;Skip&lt;/em&gt; it, or pull it from your own data — and the preset surfaces automatically next time you land on that page. This is for repeatability and per-field control; you don't need it just to fill in another language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Need exact records? Drive it from your own rows (optional).&lt;/strong&gt; Generated data covers "give me a realistic German address." When you need &lt;em&gt;specific&lt;/em&gt; localized records — a known list of edge-case names, the exact Turkish phone format that broke production — import them as a dataset (CSV, Excel, or JSON), link it to a preset, and fill row by row. Sequential mode shows "row 3 of 20," so when a locale-specific bug appears you know precisely which record caused it. That's reproducibility, the thing a random filler can't give you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Walkthrough: fill a form in another language, step by step
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install the extension&lt;/strong&gt; and open the form you want to test — a signup, checkout, or address form.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open the Fillr side panel and pick a locale&lt;/strong&gt; — say, Japanese.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Click fill.&lt;/strong&gt; The name fills in kanji, the address in Japanese format, the phone with &lt;code&gt;+81&lt;/code&gt;. No preset needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch the locale&lt;/strong&gt; to German and fill again. Same form, now populated for the German market.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repeat for every language you ship.&lt;/strong&gt; Each fill is one click with locale-correct data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's the whole flow. Two optional add-ons when you want more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Save it as a preset&lt;/strong&gt; if you test the form often and want a saved rule per field.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Import a dataset&lt;/strong&gt; of your own localized rows and fill sequentially — with a "row N of M" readout so every submission is a known case.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Side-by-side: ways to get localized test data into a form
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Spreadsheet per locale&lt;/th&gt;
&lt;th&gt;Google Translate&lt;/th&gt;
&lt;th&gt;Random / fake fillers&lt;/th&gt;
&lt;th&gt;Faker script&lt;/th&gt;
&lt;th&gt;Fillr&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Locale-correct names (scripts, diacritics)&lt;/td&gt;
&lt;td&gt;✅ manual&lt;/td&gt;
&lt;td&gt;⚠️ translated, wrong shape&lt;/td&gt;
&lt;td&gt;❌ English only&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local address &amp;amp; phone formats&lt;/td&gt;
&lt;td&gt;✅ manual&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fills the form in front of you&lt;/td&gt;
&lt;td&gt;❌ copy-paste&lt;/td&gt;
&lt;td&gt;❌ copy-paste&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌ export first&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Switch language without rebuilding data&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️ re-run code&lt;/td&gt;
&lt;td&gt;✅ one click&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Number of languages&lt;/td&gt;
&lt;td&gt;however many you build&lt;/td&gt;
&lt;td&gt;any (text only)&lt;/td&gt;
&lt;td&gt;usually English&lt;/td&gt;
&lt;td&gt;60+&lt;/td&gt;
&lt;td&gt;60+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fill from your own exact records&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️ via code&lt;/td&gt;
&lt;td&gt;✅ row by row&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reproducible ("which row was that?")&lt;/td&gt;
&lt;td&gt;⚠️ manual&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;✅ "row 3 of 20"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No code required&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No single built-in tool spans "locale-correct data," "drop it into this form," and "switch language in one click." That combination is the gap localization testers keep hitting.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;How do I generate test data in different languages?&lt;/strong&gt;&lt;br&gt;
Use a form filler with locale-aware generators. In Fillr, open the side panel, pick a locale, and click fill — every value (names, addresses, phones) comes out in that language's real format. No preset, spreadsheet, or code; switch the locale to change the whole fill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between localized test data and translated test data?&lt;/strong&gt;&lt;br&gt;
Translation changes the words. Localized test data changes the &lt;em&gt;shape&lt;/em&gt; — the script a name uses, the order of an address, the country code on a phone, the separators in a number. Most i18n bugs come from shape, so translated English data in a US format usually misses them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I test a form with non-Latin characters like kanji or Arabic?&lt;/strong&gt;&lt;br&gt;
Yes. Pick the matching locale (Japanese, Arabic, and 60+ others) and generated names and text come out in the correct script — the input you need to check that fields, validation, storage, and export all round-trip Unicode correctly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use my own localized records instead of generated data?&lt;/strong&gt;&lt;br&gt;
Yes. Import a CSV, Excel, or JSON file of your own rows as a dataset, link it to the form's preset, and fill row by row. Sequential mode shows "row N of M" so every locale-specific case is reproducible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do random form fillers support other languages?&lt;/strong&gt;&lt;br&gt;
Most don't — they fill with English data and have no locale setting, so they can't produce a kanji name or a non-US phone format. That's the main reason testers outgrow them for localization work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it work on internal tools and staging sites?&lt;/strong&gt;&lt;br&gt;
Yes — any web form, including admin panels, internal apps, and localhost/staging. URL patterns match your environments, and nothing is installed on the site itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;Localization testing breaks on the shape of the data, not the translation. To catch those bugs you need locale-correct names, addresses, and phone numbers in the actual form — and you need to switch languages without rebuilding a spreadsheet each time.&lt;/p&gt;

&lt;p&gt;That's what &lt;a href="https://fillr.app" rel="noopener noreferrer"&gt;Fillr&lt;/a&gt; gives you with no setup: open the side panel, pick one of 60+ languages, and click fill — realistic, locale-correct data dropped straight into the form. Save a preset or bring your own rows when you want per-field control and reproducibility. &lt;a href="https://chromewebstore.google.com/detail/fillr-form-filler-test-da/peppngdnnhjpchacodkdadojgnafepdd" rel="noopener noreferrer"&gt;Add it to Chrome&lt;/a&gt; and fill your next form in any language in one click.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>data</category>
      <category>i18</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Autofill Forms With Your Own Data (CSV, Spreadsheets &amp; Repeat Fills)</title>
      <dc:creator>mohammed amine bousmaha</dc:creator>
      <pubDate>Wed, 24 Jun 2026 11:07:33 +0000</pubDate>
      <link>https://dev.to/mohammed_aminebousmaha_b/how-to-autofill-forms-with-your-own-data-csv-spreadsheets-repeat-fills-a4c</link>
      <guid>https://dev.to/mohammed_aminebousmaha_b/how-to-autofill-forms-with-your-own-data-csv-spreadsheets-repeat-fills-a4c</guid>
      <description>&lt;p&gt;There are two completely different things people mean by "autofill forms with your own data."&lt;/p&gt;

&lt;p&gt;The first is the everyday one: you want your name, address, and email to drop into a checkout without retyping them. Chrome already does this, and it does it well.&lt;/p&gt;

&lt;p&gt;The second is the one almost no tool handles cleanly: you have a &lt;strong&gt;spreadsheet of data&lt;/strong&gt; — 20 test accounts, 50 customer records, a list of edge-case phone numbers — and you need to push &lt;em&gt;that&lt;/em&gt; data into a web form. Often the same form, over and over, one row at a time.&lt;/p&gt;

&lt;p&gt;This guide covers both, but it spends most of its time on the second — because that's where the built-in tools fall apart and where people waste the most time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "your own data" actually means
&lt;/h2&gt;

&lt;p&gt;Quick gut check, because it decides which method you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"My personal details"&lt;/strong&gt; — one identity, reused everywhere. → Chrome's built-in autofill is the answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"A set of records I keep in a file"&lt;/strong&gt; — many rows, many fields, used repeatedly. → You need a form filler that reads from your data, not a built-in profile.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're in the second group, skip ahead — but here's the fast version of the first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method 1: Chrome's built-in autofill (for personal info)
&lt;/h2&gt;

&lt;p&gt;For your own contact and payment details, you don't need anything extra:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Chrome → &lt;strong&gt;Settings → Autofill and passwords&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Add or edit your address and payment info.&lt;/li&gt;
&lt;li&gt;On any form, click a field and pick your saved profile.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is great for &lt;em&gt;you&lt;/em&gt; filling out &lt;em&gt;your&lt;/em&gt; forms. Its limits show the moment your data lives outside that one profile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One identity only. No second persona, no test accounts, no "fill with row 7."&lt;/li&gt;
&lt;li&gt;It guesses fields by type — you can't say &lt;em&gt;exactly&lt;/em&gt; what goes where.&lt;/li&gt;
&lt;li&gt;It's built for real personal data, not the test data a developer or QA tester works with.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same applies to password managers: one real identity, the wrong job for everything below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method 2: Random / fake-data fillers (when you don't care what the values are)
&lt;/h2&gt;

&lt;p&gt;If you just need &lt;em&gt;something&lt;/em&gt; in every field to test a form — any name, any email — a random filler does it in one click. Tools like Fake Filler popularized this, and it's genuinely useful for a quick smoke test.&lt;/p&gt;

&lt;p&gt;But "random" is the catch. The whole point of &lt;em&gt;your own data&lt;/em&gt; is that &lt;strong&gt;this specific value&lt;/strong&gt; goes into the form — a real customer name, a known-bad IBAN, the exact phone format that broke production last week. A random filler can't give you that, and it can't reproduce the same input twice. (Worth noting: Fake Filler itself hasn't been updated since August 2024.)&lt;/p&gt;

&lt;p&gt;Newer fillers like MockFill generate more realistic-looking data and detect field types well — but it's still &lt;em&gt;generated&lt;/em&gt; data. There's no saved configuration per form, and no way to fill from a file you control.&lt;/p&gt;

&lt;p&gt;So if the values matter, keep reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method 3: Autofill a form from a CSV or spreadsheet
&lt;/h2&gt;

&lt;p&gt;This is the request that sends people in circles: &lt;em&gt;"I have a CSV — how do I get it into this web form?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A handful of small extensions read a CSV and map columns to fields (search "CSV to form autofill" and you'll find several). They work, but most share the same rough edges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You re-upload or re-map the file every session.&lt;/li&gt;
&lt;li&gt;Mapping is fragile — rename a column and it breaks.&lt;/li&gt;
&lt;li&gt;No saved per-field rules (some fields you want fixed, some generated, some left blank).&lt;/li&gt;
&lt;li&gt;No clean way to walk through rows one at a time and &lt;em&gt;know which row you're on&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a one-off import that's fine. For a form you fill every day, the setup cost comes back every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method 4: Presets + datasets — autofill with data you control
&lt;/h2&gt;

&lt;p&gt;This is the approach built for the second meaning of "your own data," and it's how &lt;a href="https://fillr.app" rel="noopener noreferrer"&gt;Fillr&lt;/a&gt; works. The idea is two pieces that click together:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Capture the form once as a preset.&lt;/strong&gt; Point Fillr at any web form and it captures every field. For each field you set a rule once: &lt;em&gt;Generate · Fixed value · Blank · Skip · Dataset column&lt;/em&gt;. Next time you land on that page, the right preset finds you automatically (it matches the URL) and one click fills the whole form exactly the way you set it up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drive it with your own dataset.&lt;/strong&gt; Import a CSV, Excel, or JSON file — or build the rows by hand — and link it to the preset. Fillr maps your columns to the form's fields. Now each fill pulls a real row from &lt;em&gt;your&lt;/em&gt; data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sequential mode&lt;/strong&gt; walks row 1, row 2, row 3… with a visible "row 3 of 20" readout, so you always know exactly which record you just submitted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Random mode&lt;/strong&gt; picks a row at random when you want variety.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That row readout is the part that matters for anyone testing: when something breaks, you can say &lt;em&gt;which row&lt;/em&gt; did it. That's reproducibility — the thing random fillers and built-in autofill can't give you.&lt;/p&gt;

&lt;p&gt;Everything stays yours: presets and datasets live in your account, visible only to you. The extension stores no passwords or tokens, filling happens locally in your browser, and nothing is captured unless you explicitly save it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side-by-side: which method fits your data
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Chrome autofill&lt;/th&gt;
&lt;th&gt;Random / fake fillers&lt;/th&gt;
&lt;th&gt;CSV-only extensions&lt;/th&gt;
&lt;th&gt;Fillr (presets + datasets)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fills personal info&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️ random only&lt;/td&gt;
&lt;td&gt;⚠️ manual&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fills from your own file (CSV/Excel/JSON)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Saves per-form setup (presets)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-field rules (fixed / generate / skip)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️ limited&lt;/td&gt;
&lt;td&gt;⚠️ limited&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fill same form repeatedly, row by row&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️ clunky&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tells you which row was used&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ "row 3 of 20"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Realistic generated data when you want it&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ 120+ types, 60+ languages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data stays local / private&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ usually&lt;/td&gt;
&lt;td&gt;✅ usually&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No single built-in tool spans "fill from my file" &lt;em&gt;and&lt;/em&gt; "save the setup" &lt;em&gt;and&lt;/em&gt; "tell me which row." That combination is the gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Walkthrough: fill a form from your spreadsheet, step by step
&lt;/h2&gt;

&lt;p&gt;Using Fillr as the example, start to finish:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install the extension&lt;/strong&gt; and open the form you fill often.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capture it as a preset&lt;/strong&gt; — Fillr grabs every field. Set a rule per field if you want (e.g. email = &lt;em&gt;Fixed value&lt;/em&gt;, signup date = &lt;em&gt;Generate&lt;/em&gt;, internal-notes = &lt;em&gt;Skip&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Import your data&lt;/strong&gt; as a dataset — drop in a CSV, Excel, or JSON file. Fillr reads your columns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link the dataset to the preset.&lt;/strong&gt; Fillr auto-maps columns to fields by their names; fix any it couldn't match.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick a fill mode&lt;/strong&gt; — sequential to march through every row, random to sample.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Click fill.&lt;/strong&gt; The form populates from the next row, and you see "row N of M" so you know exactly where you are. Submit, click again, next row.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Set up once. After that, every fill is one click with the data &lt;em&gt;you&lt;/em&gt; chose.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;How do I autofill a form from a CSV file?&lt;/strong&gt;&lt;br&gt;
Use a form filler that imports CSV and maps columns to fields. In Fillr: import the CSV as a dataset, link it to the form's preset, and each fill pulls one row. Your column headers auto-map to the matching fields.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I fill the same form repeatedly with different data each time?&lt;/strong&gt;&lt;br&gt;
You need a tool with a dataset and a row cursor, not a random filler. Fillr's sequential mode advances through your rows — row 1, row 2, row 3 — showing "row N of M" each time, so every submission uses a different, known record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I autofill a form with realistic fake data instead of my own?&lt;/strong&gt;&lt;br&gt;
Yes. Set fields to &lt;em&gt;Generate&lt;/em&gt; and Fillr produces realistic values — 120+ data types across 60+ languages — for any field you don't want to pull from your file. Mix and match: some fields from your data, some generated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it safe to put my own data into a form filler?&lt;/strong&gt;&lt;br&gt;
With Fillr, your presets and datasets are stored in your own account and visible only to you. The extension keeps no passwords or tokens, filling runs locally in your browser, and a form is only captured when you explicitly save it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Chrome's built-in autofill work for this?&lt;/strong&gt;&lt;br&gt;
Only for one set of personal details. It can't hold multiple records, fill from a file, or fill the same form with a different row each time. For test data or any multi-record workflow, you need a dedicated form filler.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it work on internal tools and staging sites?&lt;/strong&gt;&lt;br&gt;
Yes — any web form, including admin panels, internal apps, and localhost/staging. URL patterns match your environments, and nothing is installed on the site itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;Browser autofill is for your one personal identity. Random fillers are for "any value will do." But when the values matter — when you're filling the same form again and again with data you keep in a spreadsheet — you want control: a saved setup, a rule per field, and your own rows driving the fill, one knowable row at a time.&lt;/p&gt;

&lt;p&gt;That's exactly what &lt;a href="https://fillr.app" rel="noopener noreferrer"&gt;Fillr&lt;/a&gt; is built for. &lt;a href="https://fillr.app" rel="noopener noreferrer"&gt;Add it to Chrome&lt;/a&gt; and fill your next form from your own data in one click.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>testdev</category>
      <category>automaton</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Run data-driven manual tests on web forms without writing a single selector</title>
      <dc:creator>mohammed amine bousmaha</dc:creator>
      <pubDate>Mon, 22 Jun 2026 10:30:19 +0000</pubDate>
      <link>https://dev.to/mohammed_aminebousmaha_b/run-data-driven-manual-tests-on-web-forms-without-writing-a-single-selector-4n6e</link>
      <guid>https://dev.to/mohammed_aminebousmaha_b/run-data-driven-manual-tests-on-web-forms-without-writing-a-single-selector-4n6e</guid>
      <description>&lt;p&gt;There's a specific kind of wasted hour that QA practitioners know well. You're on your third regression pass of the day. You enter the same test user — name, email, IBAN, account status — by hand, again. By run 6 or 7 you've fat-fingered a field. The form behaves unexpectedly. You spend 40 minutes tracing a "bug" that turns out to be a typo in the test data.&lt;/p&gt;

&lt;p&gt;The textbook answer is: automate it. Write a Playwright script. Setup fixtures. Wire up a CI job.&lt;/p&gt;

&lt;p&gt;That's the right answer for stable, repeatable E2E tests. But for exploratory passes, quick smoke checks on a form that reshapes every sprint, or manual testing on a staging environment that doesn't have a CI pipeline — a script that ties you to CSS selectors you'll be updating for the rest of the quarter is overkill.&lt;/p&gt;

&lt;p&gt;There's a middle path, and it uses a concept from E2E testing that rarely gets applied to &lt;em&gt;manual&lt;/em&gt; work: &lt;strong&gt;data-driven testing&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What data-driven testing actually means
&lt;/h2&gt;

&lt;p&gt;In automated test frameworks, "data-driven" means: run the same test scenario with multiple rows of input, and let the data — not the code — vary what the form receives.&lt;/p&gt;

&lt;p&gt;The principle works just as well for humans filling forms by hand. Instead of re-typing values from a spreadsheet, you build a dataset of test cases once, then replay each row through the form on demand. If a bug appears on row 7, you know exactly which values caused it. You can reproduce it in 10 seconds.&lt;/p&gt;

&lt;p&gt;This is the pattern I want to walk through — no code, no selectors, no test runner required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1 — Build your dataset once
&lt;/h2&gt;

&lt;p&gt;Start by writing your test cases as rows in a spreadsheet. Columns match the form's fields. One row = one test scenario.&lt;/p&gt;

&lt;p&gt;For a typical signup form you might have:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;first_name&lt;/th&gt;
&lt;th&gt;last_name&lt;/th&gt;
&lt;th&gt;email&lt;/th&gt;
&lt;th&gt;phone&lt;/th&gt;
&lt;th&gt;account_type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Maria&lt;/td&gt;
&lt;td&gt;García&lt;/td&gt;
&lt;td&gt;&lt;a href="mailto:maria.garcia@example.com"&gt;maria.garcia@example.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;+34 600 000 001&lt;/td&gt;
&lt;td&gt;premium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;张&lt;/td&gt;
&lt;td&gt;伟&lt;/td&gt;
&lt;td&gt;&lt;a href="mailto:zhang.wei@example.com"&gt;zhang.wei@example.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;+86 138 0000 0001&lt;/td&gt;
&lt;td&gt;free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edge&lt;/td&gt;
&lt;td&gt;Case&lt;/td&gt;
&lt;td&gt;&lt;a href="mailto:edge+tag@example.com"&gt;edge+tag@example.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;+1 (555) 000-0000&lt;/td&gt;
&lt;td&gt;free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;(blank)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;(blank)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="mailto:no-reply@example.com"&gt;no-reply@example.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;(blank)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;guest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;+&lt;/code&gt; tag in the email is the kind of thing that breaks parsers. The blank-name row tests "required field" validation. These are cases you'd type by hand today — the goal is to type them &lt;strong&gt;once&lt;/strong&gt; and replay them forever.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2 — Capture the form
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;(Full disclosure: I built Fillr, the extension I use for this workflow — honest maker note. The concept works with any tool that supports form presets + CSV fill; this is just the one I know best.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Install &lt;a href="https://fillr.app?utm_source=devto&amp;amp;utm_medium=content&amp;amp;utm_campaign=founder-posts" rel="noopener noreferrer"&gt;Fillr&lt;/a&gt;&lt;br&gt;
(Chrome extension — free plan covers the full workflow below). Click &lt;strong&gt;Capture&lt;/strong&gt; on your test form. Fillr detects every input and saves them as a &lt;strong&gt;preset&lt;/strong&gt;: a named set of fields, each with a configurable rule.&lt;/p&gt;

&lt;p&gt;You set a rule per field:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generate&lt;/strong&gt; — produce a realistic random value each fill (good for fields you don't need to control)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixed value&lt;/strong&gt; — always use this exact string&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blank&lt;/strong&gt; — leave the field empty&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skip&lt;/strong&gt; — don't touch the field at all&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dataset column&lt;/strong&gt; — pull from a column of a linked dataset, row by row&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a controlled test run, the important fields get the &lt;strong&gt;Dataset column&lt;/strong&gt; rule. Fields irrelevant to the test case (e.g., an optional "company" you don't care about for this suite) can just Generate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3 — Link the dataset
&lt;/h2&gt;

&lt;p&gt;Import your CSV (or Excel / JSON) into Fillr's dataset editor. Map each column to the matching form field. That's the full configuration.&lt;/p&gt;

&lt;p&gt;When you fill, Fillr shows a &lt;strong&gt;"row N of M" readout&lt;/strong&gt; in the floating bar. Click fill → observe the result → advance to the next row → fill again. Sequential mode for reproducible regression passes; random mode for exploratory variety.&lt;/p&gt;

&lt;p&gt;If row 7 triggers an unexpected validation message, your bug report includes the exact inputs: first name &lt;code&gt;Edge&lt;/code&gt;, email &lt;code&gt;edge+tag@example.com&lt;/code&gt;, row 7 of dataset "signup-smoke". No guesswork, no "I think I typed…".&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this is different from random-fill extensions
&lt;/h2&gt;

&lt;p&gt;Most form filler extensions give you realistic-looking generated data on demand. That's useful for "does this form submit at all?" checks. But generated data doesn't help when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your form validates against a seeded backend (the test account must exist and match)&lt;/li&gt;
&lt;li&gt;You need to prove which input triggered a bug&lt;/li&gt;
&lt;li&gt;You're covering specific edge cases: unicode names, E.164 phone formats, email tags,over-length inputs, deliberate blank fields&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Random data can't reproduce a test case. A dataset row can.&lt;br&gt;
The distinction matters: a 1★ review of one popular filler puts it plainly — &lt;em&gt;"cannot use custom set of test data."&lt;/em&gt; That's the whole gap this workflow fills.&lt;/p&gt;




&lt;h2&gt;
  
  
  The practical payoff
&lt;/h2&gt;

&lt;p&gt;Once the preset + dataset is configured (~5 minutes for a typical form):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each regression pass is one click per row, advancing through a predefined list of cases&lt;/li&gt;
&lt;li&gt;The whole team can run the same dataset — not just the person who memorized which edge cases to type&lt;/li&gt;
&lt;li&gt;Any new bug you find becomes a permanent regression case: add a row to the dataset, no scripting required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The workflow scales naturally. When the form adds a new field, update that field's rule. When you find a new edge case, add a row. No selector maintenance, no fixture files, no&lt;br&gt;
pipeline to wire up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feedback question
&lt;/h2&gt;

&lt;p&gt;I built this because I kept chasing false bugs caused by mistyped test data during manual regression passes. Playwright was the right answer for the CI suite — wrong tool for a form that changes every week and needs a 10-minute smoke check.&lt;/p&gt;

&lt;p&gt;Does this workflow match something you've run into? I'm especially curious: &lt;strong&gt;is a ~5-minute per-form setup reasonable, or does even that barrier keep people from leaving the spreadsheet-and-copy-paste habit?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Any other patterns you use for managing test data in manual / exploratory passes — I'd genuinely like to hear them.&lt;/p&gt;

&lt;p&gt;The extension is free to try (unlimited presets, 120+ data types, 3 datasets):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://chromewebstore.google.com/detail/peppngdnnhjpchacodkdadojgnafepdd?utm_source=devto&amp;amp;utm_medium=content&amp;amp;utm_campaign=founder-posts" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fillr.app?utm_source=devto&amp;amp;utm_medium=content&amp;amp;utm_campaign=founder-posts" rel="noopener noreferrer"&gt;Homepage + docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Stop Using "John Doe": A Better Way to Generate Test Data</title>
      <dc:creator>mohammed amine bousmaha</dc:creator>
      <pubDate>Wed, 23 Jul 2025 08:56:30 +0000</pubDate>
      <link>https://dev.to/mohammed_aminebousmaha_b/stop-using-john-doe-a-better-way-to-generate-test-data-57ga</link>
      <guid>https://dev.to/mohammed_aminebousmaha_b/stop-using-john-doe-a-better-way-to-generate-test-data-57ga</guid>
      <description>&lt;p&gt;Hey everyone,&lt;/p&gt;

&lt;p&gt;Picture this: you've just pushed a small change to a user settings page. It's a simple fix, maybe a single line of CSS. Now, you need to test it.&lt;/p&gt;

&lt;p&gt;You open the browser, navigate to the page, and are greeted by a form with ten fields: First Name, Last Name, Email, Password, Confirm Password, Address, City... you get the picture. You sigh, and begin the monotonous task of tabbing and typing.&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.amazonaws.com%2Fuploads%2Farticles%2Fsfqcon9zi5iady9hq4zs.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.amazonaws.com%2Fuploads%2Farticles%2Fsfqcon9zi5iady9hq4zs.png" alt="facepalm" width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We've all been there. This isn't the exciting part of development; it's the boring, repetitive grind that kills our momentum and drains our focus.&lt;/p&gt;

&lt;p&gt;The Real Cost of Manual Form Filling&lt;br&gt;
It's easy to dismiss this as "just part of the job," but the cost is higher than we think:&lt;/p&gt;

&lt;p&gt;It's Incredibly Slow: The 60 seconds it takes to fill out that form, 20 times a day, adds up to hours of wasted time by the end of the week.&lt;/p&gt;

&lt;p&gt;It's Error-Prone: Did you meet the password requirements? Is that a valid email format? Making a typo means starting all over again.&lt;/p&gt;

&lt;p&gt;It Breaks Your Flow: The biggest cost is context switching. You go from a deep "code focus" state to a mindless "data entry" state, and getting back into the zone is hard.&lt;/p&gt;

&lt;p&gt;It Makes for Poor Testing: When it's painful to fill out a form, we unconsciously avoid testing edge cases. We use the same simple data every time, leaving bugs undiscovered.&lt;/p&gt;

&lt;p&gt;The Common "Solutions" (That Don't Really Work)&lt;br&gt;
We try to fight back, of course. Maybe you use:&lt;/p&gt;

&lt;p&gt;Browser Autofill: Great for your home address, but terrible for test data. It can't handle multiple test users (Admin, New User, User with long name, etc.) and offers zero randomization.&lt;/p&gt;

&lt;p&gt;A notes.txt file: You keep a file with test user credentials. It's better than nothing, but it's messy, you have to copy/paste every field, and it's impossible to share with your team.&lt;/p&gt;

&lt;p&gt;LastPass/1Password: These are password managers, not test data managers. They aren't built for generating varied, realistic data on the fly.&lt;/p&gt;

&lt;p&gt;I was so frustrated with this cycle that I decided to build a proper solution for it.&lt;/p&gt;

&lt;p&gt;Introducing a Better Workflow with Fillr&lt;br&gt;
I created Fillr, a Chrome extension built specifically to solve this problem for developers and QA engineers.&lt;/p&gt;

&lt;p&gt;It's a smart form filler that not only saves your form configurations but also generates high-quality, realistic test data for you.&lt;/p&gt;

&lt;p&gt;Here’s how it transforms the workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Stop Typing, Start Clicking&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of manually typing, you can save any form's configuration as a "Fillr". The next time you visit that page, you can populate the entire form with perfectly valid data in a single click.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate Realistic Test Data Instantly&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the real game-changer. The power comes from the sheer variety of data available. We're not just talking about basic names and emails. Fillr supports over 100 different data types, giving you the ability to handle any testing scenario.&lt;/p&gt;

&lt;p&gt;You can instantly generate everything from the essentials (company names, addresses, user bios) to highly specific and creative data sets like vehicle makes, airport codes, RGB colors, zodiac signs, and even Pokémon. This allows for truly robust testing of edge cases and complex validation rules without ever leaving the browser.&lt;/p&gt;

&lt;p&gt;[Insert a GIF here showing the user scrolling through the impressive list of data types in the Fillr menu, perhaps highlighting a few unique ones like "Airport Code" or "Vehicle". This is your "wow" moment.]&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make Localization (i18n) Testing Trivial&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you've ever had to test an app for different countries, you know how painful it is to find valid addresses and phone numbers. Fillr has a built-in generator for country-specific data. Need a valid German address and phone number? It's two clicks away.&lt;/p&gt;

&lt;p&gt;This workflow has personally saved me countless hours and, more importantly, saved my sanity. It keeps me in a state of flow and allows me to focus on what I actually enjoy: building and shipping features.&lt;/p&gt;

&lt;p&gt;If you feel this pain too, I'd love for you to give Fillr a try. It's a new project, and I'm actively looking for feedback from the community on how to make it even better.&lt;/p&gt;

&lt;p&gt;You can grab it from the Chrome Web Store and check out the landing page for more info.&lt;/p&gt;

&lt;p&gt;➡️ Get Fillr on the Chrome Web Store&lt;br&gt;
&lt;a href="https://chromewebstore.google.com/detail/fillr-smart-form-filler-t/peppngdnnhjpchacodkdadojgnafepdd" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/fillr-smart-form-filler-t/peppngdnnhjpchacodkdadojgnafepdd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;➡️ Landing Page:&lt;br&gt;
&lt;a href="https://fillr.app/" rel="noopener noreferrer"&gt;https://fillr.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading, and I hope this helps you reclaim some of your productivity!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>testing</category>
      <category>productivity</category>
      <category>database</category>
    </item>
  </channel>
</rss>
