Часто задаваемые вопросы

Каков статус кроссбраузерной поддержки?

Официальная поддержка Firefox является экспериментальной. Постоянное сотрудничество с Mozilla направлено на поддержку распространенных сценариев использования сквозного тестирования, для которых разработчики ожидают кросс-браузерного покрытия. Команде Puppeteer нужны отзывы пользователей, чтобы стабилизировать поддержку Firefox и привлечь наше внимание к недостающим API.

Начиная с Puppeteer версии 2.1.0, вы можете указать puppeteer.launch({product: 'firefox'}) для запуска ваших сценариев Puppeteer в Firefox Nightly без каких-либо дополнительных настроек.
патчи. Хотя старый эксперимент требовал исправленной версии Firefox, текущий подход работает со «стандартным» Firefox.

Мы продолжаем сотрудничать с другими поставщиками браузеров, чтобы обеспечить поддержку Puppeteer в таких браузерах, как Safari. Эти усилия включают в себя исследование стандарта выполнения кроссбраузерных команд (вместо использования нестандартного протокола DevTools, используемого Chrome).

Каковы цели и принципы Puppeteer?

Цели проекта:

  • Предоставьте тонкую каноническую библиотеку, подчеркивающую возможности протокола DevTools .
  • Предоставьте эталонную реализацию для аналогичных библиотек тестирования. В конце концов, эти другие фреймворки могут принять Puppeteer в качестве своего фундаментального слоя.
  • Расширить внедрение безгласного/автоматического тестирования браузера.
  • Помогите протестировать новые функции протокола DevTools... и выявить ошибки!
  • Узнайте больше о болевых точках автоматического тестирования браузеров и помогите заполнить эти пробелы.

Мы адаптируем принципы Chromium , чтобы помочь нам принимать решения о продукте:

  • Скорость : Puppeteer имеет почти нулевую производительность по сравнению с автоматизированной страницей.
  • Безопасность : Puppeteer работает вне процесса по отношению к Chromium, что позволяет безопасно автоматизировать потенциально вредоносные страницы.
  • Стабильность : Puppeteer не должен работать нестабильно и не должен вызывать утечки памяти.
  • Простота : Puppeteer предоставляет высокоуровневый API, который легко использовать, понимать и отлаживать.

Puppeteer заменяет Selenium/WebDriver?

Нет . Оба проекта ценны по разным причинам:

  • Selenium/WebDriver ориентирован на кроссбраузерную автоматизацию; его ценным предложением является единый стандартный API, который работает во всех основных браузерах.
  • Puppeteer фокусируется на Chromium; его ценностное предложение — более широкие возможности и более высокая надежность.

Тем не менее, вы можете использовать Puppeteer для запуска тестов на Chromium, например, используя управляемый сообществом jest-puppeteer . Хотя это, вероятно, не должно быть вашим единственным решением для тестирования, у него есть несколько преимуществ по сравнению с WebDriver:

  • Puppeteer не требует установки и поставляется в комплекте с версией Chromium, с которой он работает лучше всего. Лучше провести несколько тестов только на Chromium, чем вообще не тестировать.
  • Puppeteer имеет событийно-ориентированную архитектуру, которая устраняет множество потенциальных проблем. Нет необходимости в злых вызовах «sleep(1000)» в скриптах кукловодов.
  • По умолчанию Puppeteer работает без головы, что ускоряет его работу. Puppeteer v1.5.0 также предоставляет контексты браузера, что позволяет эффективно распараллеливать выполнение тестов.
  • Puppeteer великолепен, когда дело доходит до отладки: установите бит «headless» в значение false, добавьте «slowMo», и вы увидите, что делает браузер. Вы даже можете открыть Chrome DevTools, чтобы проверить тестовую среду.

Почему Puppeteer v.XXX не работает с Chromium v.YYY?

Мы рассматриваем Puppeteer как неделимую сущность с Chromium. Каждая версия Puppeteer включает в себя определенную версию Chromium — единственную версию, с которой она гарантированно работает.

Это не искусственное ограничение. Большая часть работы над Puppeteer ведется в репозитории Chromium. Вот типичная история:

  1. Сообщается об ошибке в Puppeteer
  2. Это проблема протокола DevTools, поэтому мы исправляем ее в Chromium.
  3. Как только будет выпущено исправление основной ветки разработки, мы включим обновленный Chromium в Puppeteer.

Однако зачастую желательно использовать Puppeteer с официальным Google Chrome, а не с Chromium. Чтобы это работало, вам следует установить версию puppeteer-core , соответствующую версии Chrome.

Например, чтобы запустить Chrome 101 с помощью puppeteer-core, используйте тег npm chrome-101 :

npm install puppeteer-core@chrome-101

Какую версию Chromium использует Puppeteer?

Найдите версию одним из следующих способов:

  • Найдите запись chromium в файле review.ts . Чтобы найти соответствующий коммит и номер версии Chromium, найдите ревизию с префиксом r в разделе «Найти релизы» OmahaProxy .
  • Найдите versionsPerRelease , которая содержит сопоставление между версиями Chromium и Puppeteer. Примечание. Файл содержит только версии Puppeteer, в которых обновлен Chromium. В списке указаны не все версии Puppeteer.

Какую версию Firefox использует Puppeteer?

Поскольку поддержка Firefox является экспериментальной, Puppeteer загружает последнюю версию Firefox Nightly , когда для переменной среды PUPPETEER_PRODUCT установлено значение firefox . Именно поэтому ценность firefox в файле Revisions.ts является latest — Puppeteer не привязан к конкретной версии Firefox.

Чтобы загрузить Firefox Nightly как часть установки Puppeteer:

PUPPETEER_PRODUCT=firefox npm i puppeteer
# or "yarn add puppeteer"

Что считается навигацией?

С точки зрения Puppeteer, «навигация» — это все, что меняет URL-адрес страницы. Помимо обычной навигации, когда браузер подключается к сети для получения нового документа с веб-сервера, это включает в себя навигацию по привязке и использование History API .

С таким определением «навигации» Puppeteer легко работает с одностраничными приложениями.

В чем разница между «доверенным» и «недоверенным» событием ввода?

В браузерах события ввода можно разделить на две большие группы: доверенные и недоверенные.

  • Доверенные события : события, генерируемые пользователями, взаимодействующими со страницей, например с помощью мыши или клавиатуры.
  • Недоверенное событие : события, генерируемые веб-API, например методами document.createEvent или element.click() .

Веб-сайты могут различать эти две группы:

  • использование флага события Event.isTrusted
  • обнюхивание сопутствующих событий. Например, каждому доверенному событию 'click' предшествуют события 'mousedown' и 'mouseup' .

В целях автоматизации важно генерировать доверенные события. Все входные события, генерируемые с помощью Puppeteer, являются доверенными и вызывают соответствующие сопутствующие события.

Если по какой-то причине вам нужно ненадежное событие, всегда можно войти в контекст страницы с помощью page.evaluate и сгенерировать поддельное событие:

await page.evaluate(() => {
  document.querySelector('button[type=submit]').click();
});

Какие функции Puppeteer не поддерживает?

Вы можете обнаружить, что Puppeteer не ведет себя должным образом при управлении страницами, содержащими аудио и видео. Например, скорее всего, не удастся воспроизвести видео и сделать скриншоты .) Причин этому две:

  • Puppeteer поставляется в комплекте с Chromium (не Chrome). Поэтому по умолчанию он наследует все ограничения Chromium, связанные с мультимедиа . Это означает, что Puppeteer не поддерживает лицензионные форматы, такие как AAC или H.264.
    • Можно заставить Puppeteer использовать отдельно установленную версию Chrome вместо Chromium с помощью параметра executablePath для puppeteer.launch . Эту конфигурацию следует использовать только в том случае, если вам нужна официальная версия Chrome, поддерживающая эти форматы мультимедиа.
  • Поскольку Puppeteer (во всех конфигурациях) управляет настольной версией Chromium или Chrome, функции, которые поддерживаются только мобильной версией Chrome, не поддерживаются. Это означает, что Puppeteer не поддерживает потоковую передачу HTTP Live (HLS) .

У меня возникли проблемы с установкой/запуском Puppeteer в моей тестовой среде. Где мне искать помощи?

У нас есть руководство по устранению неполадок для различных операционных систем, в котором перечислены необходимые зависимости.

Chromium загружается при каждом запуске npm ci . Как я могу кэшировать загрузку?

Путь загрузки по умолчанию — node_modules/puppeteer/.local-chromium . Однако вы можете изменить этот путь с помощью переменной среды PUPPETEER_DOWNLOAD_PATH .

Puppeteer использует эту переменную для определения местоположения исполняемого файла Chromium во время запуска, поэтому вам также не нужно указывать PUPPETEER_EXECUTABLE_PATH .

Например, чтобы сохранить загрузку Chromium в ~/.npm/chromium :

export PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium
npm ci

# by default the Chromium executable path is inferred
# from the download path
npm test

# a new run of npm ci will check for the existence of
# Chromium in ~/.npm/chromium
npm ci

У меня есть еще вопросы! Где мне спросить?

Есть много способов получить помощь по Puppeteer:

Обязательно выполните поиск по этим каналам, прежде чем публиковать свой вопрос.