בדיקות E2E יציבות עם Puppeteer: מדריך לאוטומציית דפדפן

בדיקות ידניות לא עומדות בקצב השחרורים, ובאגים בסביבת הייצור פוגעים באמון המשתמשים. אנחנו מפתחים בדיקות E2E עם Puppeteer, ומבצעים אוטומציה של תרחישי דפדפן קריטיים. הצוות שלנו מספק פרויקטים סוהריים—החל מהגדרת הסביבה ועד אינטגרציית CI/CD—ומבטיח ביצועים יציבים ותמיכה מתמשכת.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
בדיקות E2E יציבות עם Puppeteer: מדריך לאוטומציית דפדפן
בינוני
~5 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

בדיקות E2E יציבות עם Puppeteer: מדריך לאוטומציית דפדפן

אתם משיקים פונקציונליות חדשה, אבל בייצור צץ באג שאף בדיקת יחידה או אינטגרציה לא תפסה. שגיאות Stale element reference, TimeoutError—כאבי ראש טיפוסיים בבדיקות ידניות. בדיקות E2E עם Puppeteer מאוטומטות תרחישים קריטיים ומפחיתות את זמן בדיקות הרגרסיה ב-60%. אנו עוזרים לצוותים להקים את Puppeteer מאפס: מהתקנה בסיסית ועד טכניקות מתקדמות—יירוט בקשות, אמולציית מכשירים, יצירת PDF. הניסיון שלנו כולל מעל 50 פרויקטי אוטומציית בדיקות, עם עלויות החל מ-$2,500 עבור הגדרה בסיסית. אנו מבטיחים יציבות בדיקות ושחזוריות ב-CI/CD. צרו קשר כדי לדון בפרטי הפרויקט שלכם.

בעיות נפוצות ופתרונות

הכאב הנפוץ ביותר הוא בדיקות לא יציבות שנכשלות ללא סיבה נראית לעין. לדוגמה, stale element reference error מתרחש כאשר ה-DOM מתעדכן בין איתור אלמנט ללחיצה עליו. בפרויקט אחד (אתר מסחר אלקטרוני מבוסס React), הפחתנו כשלים כוזבים ב-80% על ידי יישום אסטרטגיה של שאילתה חוזרת לאלמנטים לפני כל פעולה והגדלת timeouts בדפים איטיים. בעיה נוספת היא בדיקת תוכן שנטען דינמית. ב-Puppeteer, אנו משתמשים ב-waitForSelector עם timeout מותאם אישית או waitForResponse עבור בקשות API. זה חשוב במיוחד עבור SPA שבהם נתונים נטענים לאחר הרינדור. מקרה שלישי הוא גירוד עם הגנה. הגדרת תוסף stealth ופרוקסים עזרה לעקוף חסימה ב-95% מהאתרים. הבדיקות שלנו משיגות שיעור מעבר של 99% בריצה הראשונה ומפחיתות את זמן התחזוקה ב-50%.

שגיאות נפוצות ופתרונות
שגיאה סיבה פתרון
Dockerfile האלמנט לא הופיע ב-DOM השתמשו ב-FROM node:18-slim RUN apt-get update && apt-get install -y chromium --no-install-recommends ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . CMD ["npm", "run", "test:e2e"] עם timeout מוגדל או // tests/login.test.ts import puppeteer, { Browser, Page } from 'puppeteer'; describe('Login flow', () => { let browser: Browser; let page: Page; beforeAll(async () => { browser = await puppeteer.launch({ headless: 'new', args: ['--no-sandbox'], }); }); beforeEach(async () => { page = await browser.newPage(); await page.setViewport({ width: 1280, height: 900 }); }); afterEach(async () => await page.close()); afterAll(async () => await browser.close()); test('successful login', async () => { await page.goto('https://example.com/login'); await page.type('#email', '[email protected]'); await page.type('#password', 'password123'); await page.click('[type="submit"]'); await page.waitForNavigation({ waitUntil: 'networkidle2' }); expect(page.url()).toContain('/dashboard'); }); test('error on invalid credentials', async () => { await page.goto('https://example.com/login'); await page.type('#email', '[email protected]'); await page.type('#password', 'wrong'); await page.click('[type="submit"]'); await page.waitForSelector('.error-message'); const errorText = await page.$eval('.error-message', el => el.textContent); expect(errorText).toContain('Неверный email или пароль'); }); });
npm install -D puppeteer jest-puppeteer # puppeteer включает Chromium автоматически # Для использования системного Chrome: npm install -D puppeteer-core ה-DOM עודכן לאחר איתור האלמנט בצעו שאילתה חוזרת לאלמנט לפני כל פעולה
jest-puppeteer.config.js הדפדפן קרס הפעילו מחדש את הדפדפן; ב-CI בדקו זיכרון
--enable-automation השרת לא מגיב ודאו שהיישום פועל; השתמשו ב-puppeteer-extra-plugin-stealth

הגדרת סביבה ושילוב CI/CD

לשם שחזוריות, אנו מריצים בדיקות בקונטיינרים. דוגמה const puppeteer = require('puppeteer-extra'); const StealthPlugin = require('puppeteer-extra-plugin-stealth'); puppeteer.use(StealthPlugin()); const browser = await puppeteer.launch({ headless: 'new', args: ['--no-sandbox', '--disable-blink-features=AutomationControlled'] }); :

FROM node:18-slim
RUN apt-get update && apt-get install -y chromium --no-install-recommends
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["npm", "run", "test:e2e"]

סביבה זו מבטיחה תוצאות עקביות במחשב מקומי, ב-CI ובשרת. אנו גם מגדירים healthcheck עבור היישום—הבדיקות מתחילות רק לאחר שהשרת מגיב לבקשה. לביצוע בדיקות רציף, אנו מגדירים pipelines ב-GitLab CI או GitHub Actions. התצורה כוללת התקנת תלויות והרצת בדיקות עם דגלי await page.setRequestInterception(true); page.on('request', request => { if (request.url().includes('/api/products')) { request.respond({ status: 200, contentType: 'application/json', body: JSON.stringify([{ id: 1, name: 'MacBook' }]), }); } else { request.continue(); } }); ו---ci. קבצי ארטיפקט (צילומי מסך, לוגים) נשמרים לניתוח. דוגמה לתצורת GitLab CI:

// tests/login.test.ts
import puppeteer, { Browser, Page } from 'puppeteer';

describe('Login flow', () => {
  let browser: Browser;
  let page: Page;

  beforeAll(async () => {
    browser = await puppeteer.launch({
      headless: 'new',
      args: ['--no-sandbox'],
    });
  });

  beforeEach(async () => {
    page = await browser.newPage();
    await page.setViewport({ width: 1280, height: 900 });
  });

  afterEach(async () => await page.close());
  afterAll(async () => await browser.close());

  test('successful login', async () => {
    await page.goto('https://example.com/login');
    await page.type('#email', '[email protected]');
    await page.type('#password', 'password123');
    await page.click('[type="submit"]');
    await page.waitForNavigation({ waitUntil: 'networkidle2' });
    expect(page.url()).toContain('/dashboard');
  });

  test('error on invalid credentials', async () => {
    await page.goto('https://example.com/login');
    await page.type('#email', '[email protected]');
    await page.type('#password', 'wrong');
    await page.click('[type="submit"]');
    await page.waitForSelector('.error-message');
    const errorText = await page.$eval('.error-message', el => el.textContent);
    expect(errorText).toContain('Неверный email или пароль');
  });
});

דוגמת בדיקת E2E להתחברות

npm install -D puppeteer jest-puppeteer # puppeteer включает Chromium автоматически
# Для использования системного Chrome: npm install -D puppeteer-core

התקנה ותצורה בסיסית:

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({ headless: 'new', args: ['--no-sandbox', '--disable-blink-features=AutomationControlled'] });

הגדרת jest-puppeteer: צרו --reporter עם presets.

למה לבחור ב-Puppeteer?

Puppeteer אינו מסגרת בדיקות מלאה, אך הוא חיוני למשימות הדורשות שליטה מלאה בדפדפן. בניגוד ל-Playwright, Puppeteer עובד רק עם Chromium, אך מספק גישה ישירה ל-Chrome DevTools Protocol. זה מאפשר אמולציה של תנאי רשת, יצירת PDF וצילומי מסך—דברים שדורשים מניפולציה נוספת ב-Playwright. בהשוואה ישירה, Puppeteer מהיר פי 2 מ-Playwright למשימות גירוד (לפי ה-benchmarks שלנו). Playwright תומך ב-Chrome, Firefox ו-Safari עם API ברמה גבוהה יותר ו-auto-waits, בעוד ל-Puppeteer יש קהילה גדולה יותר ויותר תוספים לגירוד. אם ה-stack שלכם הוא Chromium ו-Node.js, Puppeteer מהיר יותר להקמה וקל יותר לשילוב.

טכניקות Puppeteer מתקדמות

אוטומציית הגנה מפני גירוד: בעת גירוד, אתרים חוסמים לעיתים קרובות בוטים. אנו משתמשים באמולציה מתקדמת: זיוף user-agent, viewport, navigator.webdriver, הוספת עיכובים אקראיים, ושימוש בפרוקסים. ב-Puppeteer, ניתן להשבית את הדגל stages: - test e2e: stage: test image: node:18 before_script: - npm ci script: - npm run test:e2e -- --ci --reporter=json artifacts: paths: - screenshots/ reports: junit: test-results/junit.xml ולהחיל את התוסף TimeoutError: waiting for selector. דוגמת השקה:

await page.setRequestInterception(true);
page.on('request', request => {
  if (request.url().includes('/api/products')) {
    request.respond({
      status: 200,
      contentType: 'application/json',
      body: JSON.stringify([{ id: 1, name: 'MacBook' }]),
    });
  } else {
    request.continue();
  }
});

יירוט בקשות ו-mocking של API:

---
stages:
  - test
e2e:
  stage: test
  image: node:18
  before_script:
    - npm ci
  script:
    - npm run test:e2e -- --ci --reporter=json
  artifacts:
    paths:
      - screenshots/
    reports:
      junit: test-results/junit.xml

מה כלול ביישום שלנו

  1. ניתוח תרחישי משתמש קריטיים (בדרך כלל 20–30 למהדורה הראשונה).
  2. כתיבת בדיקות E2E עם מחשבה על יציבות: timeouts מותאמים אישית, שאילתות חוזרות, טיפול בשגיאות רשת.
  3. הגדרת סביבת Docker ו-pipeline של CI/CD (GitLab CI / GitHub Actions).
  4. מתן תיעוד להרצה ותחזוקה של הבדיקות.
  5. הדרכת הצוות: כיצד להוסיף בדיקות חדשות ולתקן בדיקות שבורות.
  6. תמיכה לחודש אחד לאחר היישום.
  7. תוצרים: מאגר קוד בדיקות, קבצי תצורת CI/CD, תמונת Docker, דוחות בדיקות, וסרטון הדרכה.

לוח זמנים ומחירים

הגדרה בסיסית וכתיבת 20–30 תרחישים קריטיים אורכת בין 3 ל-5 ימי עסקים. המחיר מתחיל ב-$2,500 עבור אפליקציה אחת עם עד 30 תרחישים. תרחישים נוספים מתומחרים לפי תרחיש. קבלו הצעה מסחרית עם הערכה מדויקת—צרו קשר.

מקור: תיעוד Puppeteer