PageSourceSearch

https://testinai.com/

html testinai.com collected 2026-10-02 01:45:29 UTC 21,778 bytes, 428 lines download raw bytes

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 &amp; 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 &amp; 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>&copy; 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.