Since web3 applications usually need to operate wallets (such as metamask), this tool can automate the operation of the metamask part to facilitate developers to test the application.
auto-metamask can be installed using pip:
$ pip install auto-metamask
import os
import sys
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from auto_metamask import *
if __name__ == '__main__':
metamask_path = downloadMetamask(
'https://github.com/MetaMask/metamask-extension/releases/download/v10.11.2/metamask-chrome-10.11.2.zip')
driver = setupWebdriver(metamask_path)
# Test account, please do not use for production environment
setupMetamask(
'whip squirrel shine cabin access spell arrow review spread code fire marine', 'testtest')
addNetwork('BSC', 'https://bsc-dataseed1.binance.org', '56', 'BNB')
changeNetwork('BSC')
# Test account, please do not use for production environment
importPK("bb334564f93fc3a40a3b6a89e0560101bb86e5b75c773381f1e6d2f37fc5c5ba")
driver.switch_to.new_window()
driver.get('https://metamask.github.io/test-dapp/')
wait = WebDriverWait(driver, 20, 1)
wait.until(EC.element_to_be_clickable(
(By.XPATH, '//button[text()="Connect"]'))).click()
connectWallet()
time.sleep(6)
driver.quit()
def downloadMetamask(url)
Download the metamask extension
Arguments:
url
(String
): Metamask extension download address (.zip)
Returns:
String
: Extension file path
def setupWebdriver(metamask_path)
Initialize chrome browser and install metamask extension
Arguments:
metamask_path
(String
): Extension file path
Returns:
WebDriver
: Selenium Chrome WebDriver
@switchPage
def setupMetamask(recovery_phrase, password)
Autocomplete metamask welcome page
Arguments:
recovery_phrase
(String
): Recovery phrasepassword
(String
): Wallet password (minimum 8 characters)
@switchPage
def addNetwork(network_name, rpc_url, chain_id, currency_symbol)
Add new network
Arguments:
network_name
(String
): Network namerpc_url
(String
): RPC URLchain_id
(String
): Chain IDcurrency_symbol
(String
): Currency symbol
@switchPage
def changeNetwork(network_name)
Change network
Arguments:
network_name
(String
): Network name
@switchPage
def importPK(priv_key)
Import private key
Arguments:
priv_key
(String
): private key
@switchPage
def connectWallet()
Connect wallet
@switchPage
def signWallet()
Sign wallet
@switchPage
def confirmTransaction()
Confirm transaction