1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <link rel="icon" type="image/x-icon" href="favicon.ico" /> 7 <title>TestIn AI â No-Code Browser Test Automation</title> 8 <meta name="description" content="Record browser interactions and instantly convert them into automated end-to-end tests â no-code browser test automation powered by AI self-healing." /> 9 <link rel="preconnect" href="https://fonts.googleapis.com" /> 10 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 11 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet" /> 12 <link rel="stylesheet" href="styles.css" /> 13 <!-- Calendly widget --> 14 <link href="https://assets.calendly.com/assets/external/widget.css" rel="stylesheet" /> 15
15<script src="https://assets.calendly.com/assets/external/widget.js" type="text/javascript" async></script>
15 16 17 <!-- Google Analytics â replace G-ESN2XFJW3X with your Measurement ID -->
vendor: 66 bytes, lines 17-18
17 18 <script async src="https://www.googletagmanager.com/gtag/js?id=
18G-ESN2XFJW3X
vendor: 14 bytes, lines 18-19
18"></script> 19
19<script> 20
vendor: 139 bytes, lines 20-23
20window.dataLayer = window.dataLayer || []; 21 function gtag(){dataLayer.push(arguments);} 22 gtag('js', new Date()); 23 gtag('config', '
23G-ESN2XFJW3X
vendor: 6 bytes, lines 23-24
23'); 24
24</script>
24 25</head> 26<body> 27 28 <!-- âââ Beta announcement bar âââââââââââââââââââââââââââââââââââââââââ --> 29 <div class="beta-bar"> 30 <span class="beta-pill">Beta</span> 31 We're in public beta â <strong>completely free</strong> while we grow. No credit card needed. 32 <a href="https://dashboard.testinai.com/login">Join now â</a> 33 </div> 34 35 <!-- âââ Navbar âââââââââââââââââââââââââââââââââââââââââââââââââââââââ --> 36 <nav class="navbar"> 37 <div class="container nav-inner"> 38 <a href="/" class="logo"> 39 <img src="logo.png" alt="TestIn AI" class="logo-icon" /> 40 <span>TestIn AI</span> 41 </a> 42 <ul class="nav-links"> 43 <li><a href="#features">Features</a></li> 44 <li><a href="#how-it-works">How it works</a></li> 45 <li><a href="#pricing">Pricing</a></li> 46 <li><a href="#faq">FAQ</a></li> 47 <li><a href="https://docs.testinai.com">Docs</a></li> 48 <li><a href="#contact">Contact</a></li> 49 </ul> 50 <a href="https://dashboard.testinai.com/login" class="btn btn-sm">Sign in</a> 51 </div> 52 </nav> 53 54 <!-- âââ Hero âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ --> 55 <section class="hero"> 56 <div class="container hero-inner"> 57 <div class="badge">ð Now in public beta · Free for everyone</div> 58 <h1>Record. Replay.<br />Ship with confidence.</h1> 59 <p class="hero-sub"> 60 Record browser interactions with our Chrome extension and instantly 61 convert them into automated end-to-end tests â powered by AI 62 self-healing so your tests never break. 63 </p> 64 <div class="hero-actions"> 65 <a href="https://dashboard.testinai.com/login" class="btn btn-primary btn-lg"> 66 Try for free 67 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14"/><path d="m12 5 7 7-7 7"/></svg> 68 </a> 69 <button class="btn btn-lg" onclick="openCalendly()"> 70 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg> 71 Book a demo 72 </button> 73 </div> 74 </div> 75 </section> 76 77 <!-- âââ Features âââââââââââââââââââââââââââââââââââââââââââââââââââââ --> 78 <section class="features" id="features"> 79 <div class="container"> 80 <h2 class="section-title">Everything you need to test confidently</h2> 81 <div class="features-grid"> 82 83 <div class="feature-card"> 84 <div class="feature-icon"> 85 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polygon points="10 8 16 12 10 16 10 8"/></svg> 86 </div> 87 <h3>Record & replay</h3> 88 <p>Install the Chrome extension, hit record, and interact with your app. We capture every click, input, and navigation automatically.</p> 89 </div> 90 91 <div class="feature-card"> 92 <div class="feature-icon"> 93 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2a10 10 0 1 0 10 10H12V2z"/><path d="M20 12a8 8 0 0 0-8-8v8h8z"/></svg> 94 </div> 95 <h3>AI self-healing</h3> 96 <p>When selectors change, our AI finds the right element automatically. No more broken tests after every deploy.</p> 97 </div> 98 99 <div class="feature-card"> 100 <div class="feature-icon"> 101 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3h18v18H3z"/><path d="M9 3v18"/><path d="M15 3v18"/><path d="M3 9h18"/><path d="M3 15h18"/></svg> 102 </div> 103 <h3>Data-driven testing</h3> 104 <p>Run the same test with multiple data sets using Google Sheets. Validate flows across different inputs without duplicating tests.</p> 105 </div> 106 107 <div class="feature-card"> 108 <div class="feature-icon"> 109 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 1 1 3 3L7 19l-4 1 1-4L16.5 3.5z"/></svg> 110 </div> 111 <h3>No code required</h3> 112 <p>
112Build comprehensive browser test suites without writing a single line of code. Perfect for QA teams, PMs, and developers alike.</p> 113 </div> 114 115 <div class="feature-card"> 116 <div class="feature-icon"> 117 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"/><line x1="4" y1="22" x2="4" y2="15"/></svg> 118 </div> 119 <h3>CI/CD integration</h3> 120 <p>Trigger test runs from GitHub Actions, GitLab CI, or any pipeline with a single API call. Get results as detailed HTML reports.</p> 121 </div> 122 123 <div class="feature-card"> 124 <div class="feature-icon"> 125 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg> 126 </div> 127 <h3>Smart assertions</h3> 128 <p>Add text, visibility, accessibility, and attribute assertions while recording. Validate your app's behaviour without writing a single check manually.</p> 129 </div> 130 131 </div> 132 </div> 133 </section> 134 135 <!-- âââ How it works âââââââââââââââââââââââââââââââââââââââââââââââââ --> 136 <section class="how-it-works" id="how-it-works"> 137 <div class="container"> 138 <h2 class="section-title">How it works</h2> 139 <div class="steps-grid"> 140 <div class="step"> 141 <div class="step-number">1</div> 142 <h3>Install the extension</h3> 143 <p>Add the TestIn AI Recorder to Chrome. It takes 10 seconds.</p> 144 </div> 145 <div class="step"> 146 <div class="step-number">2</div> 147 <h3>Record your test</h3> 148 <p>Navigate your app as a user would. Every action is captured automatically.</p> 149 </div> 150 <div class="step"> 151 <div class="step-number">3</div> 152 <h3>Run & monitor</h3> 153 <p>Execute tests across Chromium, Firefox, and WebKit. Get live results with screenshots.</p> 154 </div> 155 </div> 156 </div> 157 </section> 158 159 <!-- âââ Pricing ââââââââââââââââââââââââââââââââââââââââââââââââââââââ --> 160 <section class="pricing" id="pricing"> 161 <div class="container"> 162 <h2 class="section-title">Simple, transparent pricing</h2> 163 <p class="section-sub">Free during beta. No credit card required.</p> 164 <div class="pricing-single"> 165 166 <div class="pricing-card pricing-card-featured"> 167 <div class="pricing-badge-top">Beta â Free for everyone</div> 168 <div class="pricing-label">Free</div> 169 <div class="pricing-price">$0<span>/mo</span></div> 170 <p class="pricing-desc">Everything you need to start automating tests â completely free while we're in beta.</p> 171 <ul class="pricing-features"> 172 <li>â 3 projects</li> 173 <li>â 50 test runs / month</li> 174 <li>â Chrome extension recorder</li> 175 <li>â Basic assertions</li> 176 <li>â HTML reports</li> 177 </ul> 178 <a href="https://dashboard.testinai.com/login" class="btn btn-primary btn-block">Get started free</a> 179 </div> 180 181 </div> 182 </div> 183 </section> 184 185 <!-- âââ FAQ âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ --> 186 <section class="faq" id="faq"> 187 <div class="container faq-inner"> 188 <h2 class="section-title">Frequently asked questions</h2> 189 190 <div class="accordion"> 191 192 <div class="accordion-item"> 193 <button class="accordion-trigger" aria-expanded="false"> 194 Do I need to know how to code? 195 <span class="accordion-icon">+</span> 196 </button> 197 <div class="accordion-body"> 198 <p>Not at all. TestIn AI is designed for everyone â QA engineers, product managers, and developers alike. You record by clicking through your app and we handle the rest.</p> 199 </div> 200 </div> 201 202 <div class="accordion-item"> 203 <button class="accordion-trigger" aria-expanded="false"> 204 What browsers are supported for running tests?
205 <span class="accordion-icon">+</span> 206 </button> 207 <div class="accordion-body"> 208 <p>Tests run headlessly on Chromium, Firefox, and WebKit (Safari engine) via Playwright. Recording requires the Chrome extension, but playback works cross-browser.</p> 209 </div> 210 </div> 211 212 <div class="accordion-item"> 213 <button class="accordion-trigger" aria-expanded="false"> 214 How does AI self-healing work? 215 <span class="accordion-icon">+</span> 216 </button> 217 <div class="accordion-body"> 218 <p>When a selector fails during a test run, our AI uses the recorded element context (text, ARIA role, nearby elements) to find the correct element automatically, then updates the selector so future runs succeed without intervention.</p> 219 </div> 220 </div> 221 222 <div class="accordion-item"> 223 <button class="accordion-trigger" aria-expanded="false"> 224 Can I integrate TestIn AI with GitHub Actions or Jenkins? 225 <span class="accordion-icon">+</span> 226 </button> 227 <div class="accordion-body"> 228 <p>Yes. Every test suite exposes a webhook URL and API key. Add a single <code>curl</code> call to your pipeline and get pass/fail results directly in your CI output, with HTML reports as artifacts.</p> 229 </div> 230 </div> 231 232 <div class="accordion-item"> 233 <button class="accordion-trigger" aria-expanded="false"> 234 Is my data secure? 235 <span class="accordion-icon">+</span> 236 </button> 237 <div class="accordion-body"> 238 <p>All data is encrypted in transit and at rest. Screenshots and test recordings are stored securely and never shared. Enterprise plans support SSO and dedicated infrastructure.</p> 239 </div> 240 </div> 241 242 <div class="accordion-item"> 243 <button class="accordion-trigger" aria-expanded="false"> 244 Can I cancel at any time? 245 <span class="accordion-icon">+</span> 246 </button> 247 <div class="accordion-body"> 248 <p>Yes, you can cancel your subscription at any time from your account settings. You'll retain access until the end of your billing period with no penalties.</p> 249 </div> 250 </div> 251 252 </div> 253 </div> 254 </section> 255 256 <!-- âââ CTA ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ --> 257 <section class="cta"> 258 <div class="container cta-inner"> 259 <h2>We're in beta â join for free</h2> 260 <p>Free access for everyone during the beta. No credit card, no commitment.</p> 261 <a href="https://dashboard.testinai.com/login" class="btn btn-primary btn-lg"> 262 Get started free 263 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14"/><path d="m12 5 7 7-7 7"/></svg> 264 </a> 265 </div> 266 </section> 267 268 <!-- âââ Contact âââââââââââââââââââââââââââââââââââââââââââââââââââââââ --> 269 <section class="contact" id="contact"> 270 <div class="container contact-inner"> 271 <h2 class="section-title">Get in touch</h2> 272 <p class="section-sub">Have a question or want to talk to sales? We'd love to hear from you.</p> 273 <form class="contact-form" onsubmit="handleContact(event)"> 274 <div class="form-row"> 275 <div class="form-group"> 276 <label for="contact-name">Name</label> 277 <input id="contact-name" name="name" type="text" placeholder="Jane Smith" required /> 278 </div> 279 <div class="form-group"> 280 <label for="contact-email">Email</label> 281 <input id="contact-email" name="email" type="email" placeholder="[email protected]" required /> 282 </div> 283 </div> 284 <div class="form-group"> 285 <label for="contact-subject">Subject</label> 286 <select id="contact-subject" name="subject" required> 287 <option value="" disabled selected>Select a topicâ¦</option> 288 <option value="General Inquiry">General Inquiry</option> 289 <option value="Feedback">Feedback</option> 290 <option value="Bug Report">Bug Report</option> 291 <option value="Feature Request">Feature Request</option> 292 <option value="Demo Request">Demo Request</option> 293 <option value="Sales / Pricing">Sales / Pricing</option> 294 </select> 295 </div> 296 <div class="form-group"> 297 <label for="contact-message">Message</label> 298 <textarea id="contact-message" name="message" rows="4" placeholder="Tell us about your testing needsâ¦" required></textarea> 299 </div> 300 <button type="submit" class="btn btn-primary">Send message</button> 301 <p id="contact-success" class="contact-success hidden">â Message sent! We'll get back to you within 24 hours.</p> 302 </form> 303 </div> 304 </section> 305 306 <!-- âââ Footer âââââââââââââââââââââââââââââââââââââââââââââââââââââââ --> 307 <footer class="footer"> 308 <div class="container footer-top"> 309 <div class="footer-brand"> 310 <a href="/" class="logo"> 311 <img src="logo.png" alt="TestIn AI" class="logo-icon logo-icon-sm" />
312 <span>TestIn AI</span> 313 </a> 314 <p class="footer-tagline">No-code browser test automation powered by AI.<br/>Ship faster. Break less.</p> 315 </div> 316 <div class="footer-links-group"> 317 <div class="footer-col"> 318 <div class="footer-col-title">Product</div> 319 <a href="#features">Features</a> 320 <a href="#how-it-works">How it works</a> 321 <a href="#pricing">Pricing</a> 322 </div> 323 <div class="footer-col"> 324 <div class="footer-col-title">Support</div> 325 <a href="https://docs.testinai.com">Documentation</a> 326 <a href="#faq">FAQ</a> 327 <a href="#contact">Contact us</a> 328 <a href="https://dashboard.testinai.com/login">Sign in</a> 329 </div> 330 </div> 331 </div> 332 <div class="container footer-bottom"> 333 <span>© 2026 TestIn AI. All rights reserved.</span> 334 <div class="footer-legal"> 335 <a href="privacy.html">Privacy Policy</a> 336 <a href="terms.html">Terms of Service</a> 337 </div> 338 </div> 339 </footer> 340 341
341<script> 342 // ââ Accordion ââââââââââââââââââââââââââââââââââââââââââââââââââââââ 343 document.querySelectorAll('.accordion-trigger').forEach(btn => { 344 btn.addEventListener('click', () => { 345 const item = btn.parentElement; 346 const isOpen = item.classList.contains('open'); 347 document.querySelectorAll('.accordion-item').forEach(i => i.classList.remove('open')); 348 document.querySelectorAll('.accordion-trigger').forEach(b => b.setAttribute('aria-expanded', 'false')); 349 if (!isOpen) { 350 item.classList.add('open'); 351 btn.setAttribute('aria-expanded', 'true'); 352 } 353 }); 354 }); 355 356 // ââ Contact form â submits to backend /api/contact ââââââââââââââââ 357 const API_BASE = 'https://dashboard.testinai.com'; 358 async function handleContact(e) { 359 e.preventDefault(); 360 const form = e.target; 361 const btn = form.querySelector('button[type="submit"]'); 362 const successMsg = document.getElementById('contact-success'); 363 btn.disabled = true; 364 btn.textContent = 'Sendingâ¦'; 365 try { 366 const res = await fetch(API_BASE + '/api/contact', { 367 method: 'POST', 368 headers: { 'Content-Type': 'application/json' }, 369 body: JSON.stringify({ 370 name: form.name.value, 371 email: form.email.value, 372 subject: form.subject.value, 373 message: form.message.value, 374 }), 375 }); 376 if (res.ok) { 377 gtag('event', 'contact_form_submitted', { subject: form.subject.value || 'unknown' }); 378 successMsg.classList.remove('hidden'); 379 form.reset(); 380 btn.textContent = 'Send message'; 381 btn.disabled = false; 382 } else { 383 btn.textContent = 'Failed â try again'; 384 btn.disabled = false; 385 } 386 } catch { 387 btn.textContent = 'Failed â try again'; 388 btn.disabled = false; 389 } 390 } 391 392 // ââ Book a Demo â Calendly popup ââââââââââââââââââââââââââââââââââ 393 // TODO: Replace this URL with your actual Calendly event link 394 const CALENDLY_URL = 'https://calendly.com/testin-ai/30min'; 395 function openCalendly() { 396 Calendly.initPopupWidget({ url: CALENDLY_URL }); 397 gtag('event', 'cta_clicked', { location: 'hero_book_demo' }); 398 } 399 400 // ââ CTA & link click tracking ââââââââââââââââââââââââââââââââââââââ 401 const CTA_SELECTORS = [ 402 { sel: '.beta-bar a', label: 'beta_bar' }, 403 { sel: '.hero-actions .btn-primary', label: 'hero' }, 404 { sel: '.pricing-card .btn-primary', label: 'pricing' }, 405 { sel: '.cta .btn-primary', label: 'cta_section' }, 406 { sel: '.navbar .btn-sm', label: 'navbar_signin'}, 407 { sel: '.footer a[href*="/login"]', label: 'footer_signin'}, 408 ]; 409 CTA_SELECTORS.forEach(({ sel, label }) => { 410 document.querySelectorAll(sel).forEach(el => { 411 el.addEventListener('click', () => { 412 gtag('event', 'cta_clicked', { location: label }); 413 }); 414 }); 415 }); 416 417 // Docs link clicks (nav + footer) 418 document.querySelectorAll('a[href="https://docs.testinai.com"]').forEach(el => { 419 const isFooter = el.closest('footer') !== null; 420 el.addEventListener('click', () => { 421 gtag('event', 'docs_link_clicked', { source: isFooter ? 'landing_footer' : 'landing_nav' }); 422 }); 423 }); 424 </script>
424 425
426<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"1392f972183c4853a47c89c3cab6716f","r":1,"spa":2}' crossorigin="anonymous"></script>
426 427</body> 428</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.