Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Test Dapp | 517 | 2 | 7 days ago | 18 | September 26, 2022 | 30 | mit | JavaScript | ||
The sample dapp used for e2e testing and metamask-extension QA | ||||||||||
Dappeteer | 436 | 6 | 2 days ago | 13 | November 29, 2022 | 35 | other | TypeScript | ||
🏌🏼E2E testing for dApps using Puppeteer + MetaMask | ||||||||||
Dappeteer | 175 | 5 | 1 | 2 years ago | 8 | February 19, 2020 | 20 | other | CSS | |
🏌🏼E2E testing for dApps using Puppeteer + MetaMask | ||||||||||
Torus Website | 74 | 2 days ago | 29 | other | JavaScript | |||||
Torus Wallet that provides dapps logins that feel like Web2.0 | ||||||||||
Guardiantest | 23 | a month ago | 2 | apache-2.0 | TypeScript | |||||
Web3 E2E Testing Framework | ||||||||||
Messenger | 19 | 5 years ago | 1 | gpl-3.0 | Objective-C | |||||
iOS & Android app with dApp integrations, e2e chat, notifications, discovery, etc | ||||||||||
Poa Test Setup | 8 | 3 years ago | 5 | gpl-3.0 | JavaScript | |||||
Deployment of POA network in one click and e2e tests of Ceremony/Governance DApps | ||||||||||
Parity Dapp Tutorial Screenshot Generator | 2 | 6 years ago | apache-2.0 | JavaScript | ||||||
Screenshot generator for https://github.com/paritytech/parity/wiki/Dapp-Tutorial |
E2E testing for dApps using Puppeteer + MetaMask
$ npm install -s @chainsafe/dappeteer
or
$ 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();
}
main();
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) {
reject(error);
return;
}
resolve(stdout);
});
});
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();
}
main();