diff --git a/tests/Bifrost.Web.Tests/Bifrost.Web.Tests.csproj b/tests/Bifrost.Web.Tests/Bifrost.Web.Tests.csproj
index 77670c1..1e94198 100644
--- a/tests/Bifrost.Web.Tests/Bifrost.Web.Tests.csproj
+++ b/tests/Bifrost.Web.Tests/Bifrost.Web.Tests.csproj
@@ -22,6 +22,7 @@
+
diff --git a/tests/Bifrost.Web.Tests/Fixtures/complete-page-harness.cjs b/tests/Bifrost.Web.Tests/Fixtures/complete-page-harness.cjs
new file mode 100644
index 0000000..aeaf092
--- /dev/null
+++ b/tests/Bifrost.Web.Tests/Fixtures/complete-page-harness.cjs
@@ -0,0 +1,64 @@
+// Runs the complete page's real inline script against a simulated browser, once per scenario, and prints
+// what it did as JSON: the ordered events, and the address and form values at the moment of the submit.
+// Usage: node complete-page-harness.cjs
+const fs = require("fs");
+const vm = require("vm");
+
+const html = fs.readFileSync(process.argv[2], "utf8");
+const scripts = [...html.matchAll(/