Questions fréquentes

Quel est l'état de la compatibilité multinavigateur ?

La prise en charge officielle de Firefox est expérimentale. La collaboration continue avec Mozilla vise à prendre en charge les cas d'utilisation courants de test de bout en bout, pour lesquels les développeurs attendent une couverture multinavigateur. L'équipe Puppeteer a besoin de la contribution des utilisateurs pour stabiliser la prise en charge de Firefox et nous signaler les API manquantes.

À partir de la version 2.1.0 de Puppeteer, vous pouvez spécifier puppeteer.launch({product: 'firefox'}) pour exécuter vos scripts Puppeteer dans Firefox Nightly, sans aucun correctif
personnalisé. Alors qu'un test plus ancien nécessitait une version corrigée de Firefox, l'approche actuelle fonctionne avec le Firefox "stocké".

Nous continuons de collaborer avec d'autres fournisseurs de navigateurs pour que Puppeteer soit compatible avec des navigateurs tels que Safari. Cela inclut l'exploration d'une norme pour l'exécution de commandes entre navigateurs (au lieu de s'appuyer sur le protocole DevTools non standard utilisé par Chrome).

Quels sont les objectifs et les principes de Puppeteer ?

Les objectifs du projet sont:

  • Fournissez une bibliothèque canonique et fine qui met en évidence les fonctionnalités du protocole DevTools.
  • Fournissez une implémentation de référence pour des bibliothèques de test similaires. À terme, ces autres frameworks pourraient adopter Puppeteer comme couche fondamentale.
  • Favorisez l'adoption des tests des navigateurs sans interface graphique et/ou automatisés.
  • Aidez-nous à tester la version dogfood des nouvelles fonctionnalités du protocole DevTools et à détecter les bugs !
  • Découvrez les difficultés liées aux tests automatisés des navigateurs et aidez-les à y remédier.

Nous adaptons les principes Chromium pour nous aider à prendre des décisions concernant les produits:

  • Vitesse: Puppeteer n'a presque aucun impact sur les performances par rapport à une page automatique.
  • Sécurité: Puppeteer fonctionne hors processus par rapport à Chromium, ce qui permet d'automatiser l'automatisation des pages potentiellement malveillantes.
  • Stabilité: Puppeteer ne doit pas être irrégulier ni fuir de mémoire.
  • Simplicité: Puppeteer fournit une API de haut niveau qui est facile à utiliser, à comprendre et à déboguer.

Est-ce que Puppeteer remplace Selenium/WebDriver ?

Non. Les deux projets sont utiles pour des raisons très différentes:

  • Selenium/WebDriver se concentre sur l'automatisation multinavigateur. Sa proposition de valeur est une API standard unique qui fonctionne sur tous les principaux navigateurs.
  • Puppeteer se concentre sur Chromium, et sa proposition de valeur offre des fonctionnalités plus riches et une plus grande fiabilité.

Cela dit, vous pouvez utiliser Puppeteer pour exécuter des tests sur Chromium, par exemple avec jest-puppeteer, géré par la communauté. Cette solution ne devrait probablement pas être votre seule solution de test, mais elle présente quelques points forts par rapport à WebDriver:

  • Puppeteer ne nécessite aucune configuration et est fourni avec la version de Chromium avec laquelle il fonctionne le mieux. Il est préférable d'effectuer quelques tests uniquement dans Chromium, plutôt que de n'effectuer aucun test.
  • Puppeteer dispose d'une architecture basée sur des événements, ce qui élimine de nombreuses erreurs potentielles. Dans les scripts de marionnettes, plus besoin de passer des appels diaboliques "sleep(1000)".
  • Par défaut, Puppeteer fonctionne sans interface graphique, ce qui accélère son exécution. Puppeteer v1.5.0 expose également les contextes de navigateur, ce qui permet de paralléliser efficacement l'exécution des tests.
  • Puppeteer brille en termes de débogage: basculez le bit "headless" (sans interface graphique) sur "false" (faux), ajoutez "slowMo" et vous verrez ce que fait le navigateur. Vous pouvez même ouvrir les outils pour les développeurs Chrome afin d'inspecter l'environnement de test.

Pourquoi Puppeteer v.XXX ne fonctionne-t-elle pas avec Chromium v.YYY ?

Nous voyons Puppeteer comme une entité indivisible avec Chromium. Chaque version de Puppeteer inclut une version spécifique de Chromium, la seule version avec laquelle il est garanti de fonctionner.

Il ne s'agit pas d'une contrainte artificielle. De nombreuses opérations sont effectuées dans le dépôt Chromium. Voici un scénario typique:

  1. Un bug de Puppeteer a été signalé.
  2. Il s'agit d'un problème lié au protocole DevTools. Nous le résolvons donc dans Chromium.
  3. Une fois la correction en amont effectuée, nous proposons la mise à jour de Chromium à Puppeteer.

Cependant, il est souvent préférable d'utiliser Puppeteer avec la version officielle de Google Chrome plutôt qu'avec Chromium. Pour que cela fonctionne, vous devez installer une version puppeteer-core correspondant à la version de Chrome.

Par exemple, pour piloter Chrome 101 avec puppeteer-core, utilisez le tag npm chrome-101:

npm install puppeteer-core@chrome-101

Quelle version de Chromium est utilisée par Puppeteer ?

Pour identifier la version, procédez de l'une des façons suivantes:

  • Recherchez l'entrée chromium dans le fichier revisions.ts. Pour trouver le commit Chromium et le numéro de version correspondants, recherchez la révision précédée du préfixe r dans la section "Rechercher des versions " d'OmahaProxy.
  • Recherchez la carte versionsPerRelease dans le fichier versions.js, qui contient le mappage entre les versions de Chromium et de Puppeteer. Remarque: Le fichier ne contient que des versions de Puppeteer pour lesquelles Chromium est mis à jour. Toutes les versions de Puppeteer ne sont pas répertoriées.

Quelle version de Firefox utilise Puppeteer ?

La prise en charge de Firefox étant expérimentale, Puppeteer télécharge la dernière version de Firefox Nightly lorsque la variable d'environnement PUPPETEER_PRODUCT est définie sur firefox. C'est également la raison pour laquelle la valeur de firefox dans revisions.ts est latest. Puppeteer n'est pas lié à une version de Firefox en particulier.

Pour récupérer Firefox Nightly dans le cadre de l'installation de Puppeteer:

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

Qu'est-ce qu'une navigation ?

Du point de vue de Puppeteer, la « navigation » est tout ce qui modifie l'URL d'une page. Outre la navigation standard, où le navigateur appelle le réseau pour récupérer un nouveau document sur le serveur Web, cela inclut les navigations d'ancrage et l'utilisation de l'API History.

Avec cette définition de "navigation", Puppeteer fonctionne parfaitement avec les applications monopages.

Quelle est la différence entre un événement d'entrée "Approuvée" et "Approuvée" ?

Dans les navigateurs, les événements d'entrée peuvent être divisés en deux grands groupes: les événements fiables et non approuvés.

  • Événements de confiance: événements générés par les utilisateurs qui interagissent avec la page, par exemple à l'aide de la souris ou du clavier.
  • Événement non approuvé: événements générés par les API Web, tels que les méthodes document.createEvent ou element.click().

Les sites Web peuvent faire la distinction entre ces deux groupes:

  • à l'aide d'un indicateur d'événement Event.isTrusted ;
  • renifler pour les événements d'accompagnement. Par exemple, chaque événement 'click' de confiance est précédé des événements 'mousedown' et 'mouseup'.

À des fins d'automatisation, il est important de générer des événements de confiance. Tous les événements d'entrée générés avec Puppeteer sont approuvés et se déclenchent correctement.

Si, pour une raison quelconque, vous avez besoin d'un événement non approuvé, il est toujours possible d'accéder à un contexte de page avec page.evaluate et de générer un événement factice:

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

Quelles sont les fonctionnalités non prises en charge par Puppeteer ?

Vous constaterez peut-être que Puppeteer ne se comporte pas comme prévu lors du contrôle des pages qui intègrent du contenu audio et vidéo. Par exemple, la lecture de vidéos et les captures d'écran risquent d'échouer.) Il y a deux raisons à cela:

  • Puppeteer est fourni avec Chromium (et non avec Chrome). Ainsi, toutes les limites de Chromium liées aux contenus multimédias s'appliquent par défaut. Cela signifie que Puppeteer n'est pas compatible avec les formats sous licence tels que AAC ou H.264.
    • Il est possible de forcer Puppeteer à utiliser une version de Chrome installée séparément au lieu de Chromium avec l'option executablePath sur puppeteer.launch. N'utilisez cette configuration que si vous avez besoin d'une version officielle de Chrome compatible avec ces formats multimédias.
  • Étant donné que Puppeteer (dans toutes les configurations) contrôle une version de bureau de Chromium ou de Chrome, les fonctionnalités qui ne sont compatibles qu'avec la version mobile de Chrome ne sont pas prises en charge. Cela signifie que Puppeteer n'est pas compatible avec le protocole HTTP Live Streaming (HLS).

Je rencontre des difficultés pour installer / exécuter Puppeteer dans mon environnement de test. Où puis-je obtenir de l'aide ?

Un guide de dépannage pour différents systèmes d'exploitation répertorie les dépendances requises.

Chromium est téléchargé à chaque npm ci exécution. Comment puis-je mettre le téléchargement en cache ?

Le chemin de téléchargement par défaut est node_modules/puppeteer/.local-chromium. Toutefois, vous pouvez modifier ce chemin à l'aide de la variable d'environnement PUPPETEER_DOWNLOAD_PATH.

Puppeteer utilise cette variable pour résoudre l'emplacement du fichier exécutable Chromium lors du lancement. Vous n'avez donc pas besoin de spécifier PUPPETEER_EXECUTABLE_PATH également.

Par exemple, pour conserver le téléchargement de Chromium dans ~/.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

J'ai d'autres questions ! Où puis-je demander ?

Il existe de nombreuses façons d'obtenir de l'aide sur Puppeteer:

Assurez-vous d'effectuer des recherches sur ces chaînes avant de publier votre question.