I built a Chrome extension that tests web forms with AI Software engineer Denyse has built QA Helper, a Chrome extension that uses AI to generate test cases from requirements documents and automatically fills web forms to produce pass/fail reports. The tool currently works on simple one-section forms built with Angular, requiring framework-aware event dispatch to properly trigger Angular's reactive form validators instead of simply setting DOM values. Dev log 1 Hi, I'm Denyse. I'm a software engineer, and for the past two months I've been building a tool I'm genuinely excited about. It's a Chrome extension that takes a requirements document, uses AI to generate test cases, and then drives a real web form the same way a human QA tester would filling fields, clicking dropdowns, reading validation messages, and producing a pass/fail report. I'm calling it QA Helper , and I'm going to start writing about it every week. Some weeks will be deep technical posts. Some will be short "here's what I shipped" updates. This is the first one, and the most important one, because it's the one where I actually start. Up front: the tool is early . It currently works on simple, one-section forms. I'm in the middle of expanding it to handle multi-section forms with all the complexity that brings. The interesting part of this post isn't a finished product it's the engineering problem I had to solve to even get to "working on simple forms," because Angular makes it harder than you'd expect. Let's go. The QA team I work with tests forms manually. Every required field, every format validation, every conditional dropdown, clicked through by hand. For a long form with many fields, this is hours of work. And every time a developer changes something, the whole cycle starts over. This isn't a problem unique to any one team. Anywhere you have complex web forms government services, banking, insurance , you have QA people doing this. It's necessary work. It's also exactly the kind of work software should help with. So I set out to build something that could starting small and growing the scope as I go. In plain English: Today this works on one-section forms . The field types currently handled: ng-select dropdownsMulti-section forms are what I'm coding right now. That's the next big unlock. Nothing fancy, on purpose: The architecture is intentionally boring. The interesting part isn't the stack. It's what happens when the extension tries to fill a form. Here's the thing nobody warned me about when I started. The forms I'm testing are built with Angular. And in Angular, you cannot just set input.value = "something" and expect the form to notice. Angular's reactive forms have their own internal model of what's in each field, and that model only updates when the right DOM events fire, specifically the events that Angular's DefaultValueAccessor is listening for: input , change , blur . If you just set the value, the field looks filled in the browser. The pixels are there. But Angular doesn't know. So when the tool clicks Continue, Angular's validator says "this field is empty" and the form refuses to submit. This took me longer to figure out than I want to admit. The fix, and the core of how QA Helper actually works, is what I'd call DOM manipulation with framework-aware event dispatch. Instead of just setting values, the tool simulates the actions of a real user, in the order a real user would do them, with the events Angular cares about firing at the right moments. Three examples of how this plays out: For a regular text input, the tool doesn't just slam a value in. It: input event after each character input + change , then blur It's literally pretending to be a person typing. Slower than it needs to be? Maybe. But it works, and it works reliably, which is more valuable than fast. ng-select dropdowns: open the panel, find the option, click it This is the part I'm most proud of figuring out. Angular's ng-select component doesn't have a settable value. There is no