🏌🏼‍E2E testing for dApps using Puppeteer + MetaMask
Alternatives To Dappeteer
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Test Dapp51727 days ago18September 26, 202230mitJavaScript
The sample dapp used for e2e testing and metamask-extension QA
Dappeteer43662 days ago13November 29, 202235otherTypeScript
🏌🏼‍E2E testing for dApps using Puppeteer + MetaMask
Dappeteer175512 years ago8February 19, 202020otherCSS
🏌🏼‍E2E testing for dApps using Puppeteer + MetaMask
Torus Website74
2 days ago29otherJavaScript
Torus Wallet that provides dapps logins that feel like Web2.0
a month ago2apache-2.0TypeScript
Web3 E2E Testing Framework
5 years ago1gpl-3.0Objective-C
iOS & Android app with dApp integrations, e2e chat, notifications, discovery, etc
Poa Test Setup8
3 years ago5gpl-3.0JavaScript
Deployment of POA network in one click and e2e tests of Ceremony/Governance DApps
Parity Dapp Tutorial Screenshot Generator2
6 years agoapache-2.0JavaScript
Screenshot generator for https://github.com/paritytech/parity/wiki/Dapp-Tutorial
Alternatives To Dappeteer
Select To Compare

Alternative Project Comparisons


E2E testing for dApps using Puppeteer + MetaMask


$ npm install -s @chainsafe/dappeteer


$ yarn add @chainsafe/dappeteer


import dappeteer from '@chainsafe/dappeteer';

async function main() {
  const { metaMask, browser } = await dappeteer.bootstrap();

  // create a new page and visit your dapp
  const dappPage = await browser.newPage();
  await dappPage.goto('http://my-dapp.com');

  // you can change the network if you want
  await metaMask.switchNetwork('goerli');

  // do something in your dapp that prompts MetaMask to add a Token
  const addTokenButton = await dappPage.$('#add-token');
  await addTokenButton.click();
  // instruct MetaMask to accept this request
  await metaMask.acceptAddToken();

  // do something that prompts MetaMask to confirm a transaction
  const payButton = await dappPage.$('#pay-with-eth');
  await payButton.click();

  // 🏌
  await metaMask.confirmTransaction();


Usage with Snaps

import dappeteer from '@chainsafe/dappeteer';
import { exec } from "child_process";

async function buildSnap(): Promise<string> {
  console.log(`Building my-snap...`);
  await new Promise((resolve, reject) => {
    exec(`cd ./my-snap && npx mm-snap build`, (error, stdout) => {
      if (error) {

  return "./my-snap";

async function main() {
  // build your local snap
  const builtSnapDir = await buildSnap()

  // setup dappateer and install your snap
  const { metaMask, snapId, browser } = await dappeteer.initSnapEnv({
    snapIdOrLocation: builtSnapDir,

  // you need to have a webpage open to interact with MetaMask, you can also visit a dApp page
  const dappPage = await browser.newPage();
  await dappPage.goto('http://example.org/');

  // invoke a method from your snap that prompts users with approve/reject dialog
  await metaMask.snaps.invokeSnap(dappPage, snapId, "my-method")

  // instruct MetaMask to accept this request
  await metaMask.snaps.dialog.positive();

  // get the notification emitter and the promise that will receive the notifications
  const emitter = await metaMask.snaps.getNotificationEmitter();
  const notificationPromise = emitter.waitForNotification();

  // do something that prompts your snap to emit notifications
  await metaMask.snaps.invokeSnap(dappPage, snapId, "notify");

  // Make sure the notification promise has resolved
  await notificationPromise;

  // You can now read the snap notifications and run tests against them
  const notifications = await metaMask.snaps.getAllNotifications();

Popular End To End Testing Projects
Popular Dapp Projects
Popular Software Quality Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.