aboutsummaryrefslogtreecommitdiffstats
path: root/test/e2e
diff options
context:
space:
mode:
Diffstat (limited to 'test/e2e')
-rw-r--r--test/e2e/beta/from-import-beta-ui.spec.js154
-rw-r--r--test/e2e/beta/helpers.js2
-rw-r--r--test/e2e/beta/metamask-beta-ui.spec.js47
-rw-r--r--test/e2e/func.js48
-rw-r--r--test/e2e/metamask.spec.js72
5 files changed, 191 insertions, 132 deletions
diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js
index 32f57b157..11d28264c 100644
--- a/test/e2e/beta/from-import-beta-ui.spec.js
+++ b/test/e2e/beta/from-import-beta-ui.spec.js
@@ -4,58 +4,45 @@ const webdriver = require('selenium-webdriver')
const { By, Key, until } = webdriver
const {
delay,
- buildChromeWebDriver,
- buildFirefoxWebdriver,
- installWebExt,
- getExtensionIdChrome,
- getExtensionIdFirefox,
+ createModifiedTestBuild,
+ setupBrowserAndExtension,
+ verboseReportOnFailure,
} = require('../func')
const {
- checkBrowserForConsoleErrors,
- verboseReportOnFailure,
findElement,
findElements,
+ checkBrowserForConsoleErrors,
} = require('./helpers')
describe('Using MetaMask with an existing account', function () {
- let extensionId
+ const browser = process.env.SELENIUM_BROWSER
let driver
+ let extensionUri
const testSeedPhrase = 'phrase upgrade clock rough situate wedding elder clever doctor stamp excess tent'
const testAddress = '0xE18035BF8712672935FDB4e5e431b1a0183d2DFC'
const testPrivateKey2 = '14abe6f4aab7f9f626fe981c864d0adeb5685f289ac9270c27b8fd790b4235d6'
const regularDelayMs = 1000
const largeDelayMs = regularDelayMs * 2
+ const waitingNewPageDelayMs = regularDelayMs * 10
this.timeout(0)
this.bail(true)
before(async function () {
- switch (process.env.SELENIUM_BROWSER) {
- case 'chrome': {
- const extensionPath = path.resolve('dist/chrome')
- driver = buildChromeWebDriver(extensionPath)
- extensionId = await getExtensionIdChrome(driver)
- await driver.get(`chrome-extension://${extensionId}/popup.html`)
- await delay(regularDelayMs)
- break
- }
- case 'firefox': {
- const extensionPath = path.resolve('dist/firefox')
- driver = buildFirefoxWebdriver()
- await installWebExt(driver, extensionPath)
- await delay(regularDelayMs)
- extensionId = await getExtensionIdFirefox(driver)
- await driver.get(`moz-extension://${extensionId}/popup.html`)
- await delay(regularDelayMs)
- break
- }
- }
+ const srcPath = path.resolve(`dist/${browser}`)
+ const { extPath } = await createModifiedTestBuild({ browser, srcPath })
+ const installResult = await setupBrowserAndExtension({ browser, extPath })
+ driver = installResult.driver
+ extensionUri = installResult.extensionUri
+
+ await driver.get(extensionUri)
+ await delay(300)
})
afterEach(async function () {
- if (process.env.SELENIUM_BROWSER === 'chrome') {
+ if (browser === 'chrome') {
const errors = await checkBrowserForConsoleErrors(driver)
if (errors.length) {
const errorReports = errors.map(err => err.message)
@@ -64,7 +51,7 @@ describe('Using MetaMask with an existing account', function () {
}
}
if (this.currentTest.state === 'failed') {
- await verboseReportOnFailure(driver, this.currentTest)
+ await verboseReportOnFailure({ browser, driver, title: this.currentTest.title })
}
})
@@ -79,16 +66,6 @@ describe('Using MetaMask with an existing account', function () {
await delay(regularDelayMs)
})
- it('use the local network', async function () {
- const networkSelector = await findElement(driver, By.css('#network_component'))
- await networkSelector.click()
- await delay(regularDelayMs)
-
- const [localhost] = await findElements(driver, By.xpath(`//li[contains(text(), 'Localhost')]`))
- await localhost.click()
- await delay(regularDelayMs)
- })
-
it('selects the new UI option', async () => {
const button = await findElement(driver, By.xpath("//p[contains(text(), 'Try Beta Version')]"))
await button.click()
@@ -289,22 +266,109 @@ describe('Using MetaMask with an existing account', function () {
})
})
- describe('Imports an account with private key', () => {
- it('choose Create Account from the account menu', async () => {
- await driver.findElement(By.css('.account-menu__icon')).click()
+ describe('Send ETH from Faucet', () => {
+ it('starts a send transaction inside Faucet', async () => {
+ await driver.executeScript('window.open("https://faucet.metamask.io")')
+ await delay(waitingNewPageDelayMs)
+
+ const [extension, faucet] = await driver.getAllWindowHandles()
+ await driver.switchTo().window(faucet)
+ await delay(regularDelayMs)
+
+ const send1eth = await findElement(driver, By.xpath(`//button[contains(text(), '10 ether')]`), 14000)
+ await send1eth.click()
+ await delay(regularDelayMs)
+
+ await driver.switchTo().window(extension)
+ await driver.get(extensionUri)
+ await delay(regularDelayMs)
+
+ const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`), 14000)
+ await confirmButton.click()
+ await delay(regularDelayMs)
+
+ await driver.switchTo().window(faucet)
+ await delay(regularDelayMs)
+ await driver.close()
+ await delay(regularDelayMs)
+ await driver.switchTo().window(extension)
+ await delay(regularDelayMs)
+ await driver.get(extensionUri)
+ await delay(regularDelayMs)
+ })
+ })
+
+ describe('Add existing token using search', () => {
+ it('clicks on the Add Token button', async () => {
+ const addToken = await findElement(driver, By.xpath(`//button[contains(text(), 'Add Token')]`))
+ await addToken.click()
+ await delay(regularDelayMs)
+ })
+
+ it('picks an existing token', async () => {
+ const tokenSearch = await findElement(driver, By.css('#search-tokens'))
+ await tokenSearch.sendKeys('BAT')
+ await delay(regularDelayMs)
+
+ const token = await findElement(driver, By.xpath("//span[contains(text(), 'BAT')]"))
+ await token.click()
+ await delay(regularDelayMs)
+
+ const nextScreen = await findElement(driver, By.xpath(`//button[contains(text(), 'Next')]`))
+ await nextScreen.click()
await delay(regularDelayMs)
const [importAccount] = await findElements(driver, By.xpath(`//div[contains(text(), 'Import Account')]`))
await importAccount.click()
await delay(regularDelayMs)
})
+ })
+
+ describe('Add a custom token from TokenFactory', () => {
+ let extension, tokenFactory
+
+ it('creates a new token', async () => {
+ await driver.executeScript('window.open("https://tokenfactory.surge.sh/#/factory")')
+ await delay(waitingNewPageDelayMs)
+
+ const windowHandles = await driver.getAllWindowHandles()
+ extension = windowHandles[0]
+ tokenFactory = windowHandles[1]
+
+ await driver.switchTo().window(tokenFactory)
+ const [
+ totalSupply,
+ tokenName,
+ tokenDecimal,
+ tokenSymbol,
+ ] = await findElements(driver, By.css('.form-control'))
+
+ await totalSupply.sendKeys('100')
+ await tokenName.sendKeys('Test')
+ await tokenDecimal.sendKeys('0')
+ await tokenSymbol.sendKeys('TST')
+
+ const createToken = await findElement(driver, By.xpath(`//button[contains(text(), 'Create Token')]`))
+ await createToken.click()
+ await delay(regularDelayMs)
+
+ await driver.switchTo().window(extension)
+ await driver.get(extensionUri)
+ await delay(regularDelayMs)
+ })
it('enter private key', async () => {
const privateKeyInput = await findElement(driver, By.css('#private-key-box'))
await privateKeyInput.sendKeys(testPrivateKey2)
await delay(regularDelayMs)
- const importButtons = await findElements(driver, By.xpath(`//button[contains(text(), 'Import')]`))
- await importButtons[0].click()
+
+ await driver.switchTo().window(tokenFactory)
+ await delay(regularDelayMs)
+ const tokenContactAddress = await driver.findElement(By.css('div > div > div:nth-child(2) > span:nth-child(3)'))
+ await tokenContactAddress.getText()
+ await driver.close()
+ await driver.switchTo().window(extension)
+ await driver.get(extensionUri)
await delay(regularDelayMs)
})
diff --git a/test/e2e/beta/helpers.js b/test/e2e/beta/helpers.js
index 828f87db7..84e578d3e 100644
--- a/test/e2e/beta/helpers.js
+++ b/test/e2e/beta/helpers.js
@@ -2,8 +2,8 @@ const fs = require('fs')
const mkdirp = require('mkdirp')
const pify = require('pify')
const assert = require('assert')
-const {until} = require('selenium-webdriver')
const { delay } = require('../func')
+const { until } = require('selenium-webdriver')
module.exports = {
assertElementNotPresent,
diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js
index ca1977c5a..37e556b55 100644
--- a/test/e2e/beta/metamask-beta-ui.spec.js
+++ b/test/e2e/beta/metamask-beta-ui.spec.js
@@ -4,11 +4,9 @@ const webdriver = require('selenium-webdriver')
const { By, Key, until } = webdriver
const {
delay,
- buildChromeWebDriver,
- buildFirefoxWebdriver,
- installWebExt,
- getExtensionIdChrome,
- getExtensionIdFirefox,
+ createModifiedTestBuild,
+ setupBrowserAndExtension,
+ verboseReportOnFailure,
} = require('../func')
const {
assertElementNotPresent,
@@ -19,13 +17,13 @@ const {
loadExtension,
openNewPage,
switchToWindowWithTitle,
- verboseReportOnFailure,
waitUntilXWindowHandles,
} = require('./helpers')
describe('MetaMask', function () {
- let extensionId
+ const browser = process.env.SELENIUM_BROWSER
let driver
+ let extensionUri
let tokenAddress
const testSeedPhrase = 'phrase upgrade clock rough situate wedding elder clever doctor stamp excess tent'
@@ -37,27 +35,18 @@ describe('MetaMask', function () {
this.bail(true)
before(async function () {
- switch (process.env.SELENIUM_BROWSER) {
- case 'chrome': {
- const extPath = path.resolve('dist/chrome')
- driver = buildChromeWebDriver(extPath)
- extensionId = await getExtensionIdChrome(driver)
- await driver.get(`chrome-extension://${extensionId}/popup.html`)
- break
- }
- case 'firefox': {
- const extPath = path.resolve('dist/firefox')
- driver = buildFirefoxWebdriver()
- await installWebExt(driver, extPath)
- await delay(700)
- extensionId = await getExtensionIdFirefox(driver)
- await driver.get(`moz-extension://${extensionId}/popup.html`)
- }
- }
+ const srcPath = path.resolve(`dist/${browser}`)
+ const { extPath } = await createModifiedTestBuild({ browser, srcPath })
+ const installResult = await setupBrowserAndExtension({ browser, extPath })
+ driver = installResult.driver
+ extensionUri = installResult.extensionUri
+
+ await driver.get(extensionUri)
+ await delay(tinyDelayMs)
})
afterEach(async function () {
- if (process.env.SELENIUM_BROWSER === 'chrome') {
+ if (browser === 'chrome') {
const errors = await checkBrowserForConsoleErrors(driver)
if (errors.length) {
const errorReports = errors.map(err => err.message)
@@ -66,7 +55,7 @@ describe('MetaMask', function () {
}
}
if (this.currentTest.state === 'failed') {
- await verboseReportOnFailure(driver, this.currentTest)
+ await verboseReportOnFailure({ browser, driver, title: this.currentTest.title })
}
})
@@ -83,7 +72,7 @@ describe('MetaMask', function () {
try {
networkSelector = await findElement(driver, By.css('#network_component'))
} catch (e) {
- await loadExtension(driver, extensionId)
+ await loadExtension(driver, extensionUri)
await delay(largeDelayMs * 2)
networkSelector = await findElement(driver, By.css('#network_component'))
}
@@ -274,7 +263,7 @@ describe('MetaMask', function () {
await word11.click()
await delay(tinyDelayMs)
} catch (e) {
- await loadExtension(driver, extensionId)
+ await loadExtension(driver, extensionUri)
await retypeSeedPhrase(words, true)
}
}
@@ -647,7 +636,7 @@ describe('MetaMask', function () {
await delay(regularDelayMs)
await driver.switchTo().window(extension)
- await loadExtension(driver, extensionId)
+ await driver.get(extensionUri)
await delay(regularDelayMs)
const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`))
diff --git a/test/e2e/func.js b/test/e2e/func.js
index 7b1730959..13dfb82f9 100644
--- a/test/e2e/func.js
+++ b/test/e2e/func.js
@@ -1,14 +1,19 @@
require('chromedriver')
require('geckodriver')
-const fs = require('fs')
+const fs = require('fs-extra')
const os = require('os')
const path = require('path')
+const pify = require('pify')
+const prependFile = pify(require('prepend-file'))
const webdriver = require('selenium-webdriver')
const Command = require('selenium-webdriver/lib/command').Command
const By = webdriver.By
module.exports = {
delay,
+ createModifiedTestBuild,
+ setupBrowserAndExtension,
+ verboseReportOnFailure,
buildChromeWebDriver,
buildFirefoxWebdriver,
installWebExt,
@@ -20,6 +25,37 @@ function delay (time) {
return new Promise(resolve => setTimeout(resolve, time))
}
+async function createModifiedTestBuild ({ browser, srcPath }) {
+ // copy build to test-builds directory
+ const extPath = path.resolve(`test-builds/${browser}`)
+ await fs.ensureDir(extPath)
+ await fs.copy(srcPath, extPath)
+ // inject METAMASK_TEST_CONFIG setting default test network
+ const config = { NetworkController: { provider: { type: 'localhost' } } }
+ await prependFile(`${extPath}/background.js`, `window.METAMASK_TEST_CONFIG=${JSON.stringify(config)};\n`)
+ return { extPath }
+}
+
+async function setupBrowserAndExtension ({ browser, extPath }) {
+ let driver, extensionId, extensionUri
+
+ if (browser === 'chrome') {
+ driver = buildChromeWebDriver(extPath)
+ extensionId = await getExtensionIdChrome(driver)
+ extensionUri = `chrome-extension://${extensionId}/home.html`
+ } else if (browser === 'firefox') {
+ driver = buildFirefoxWebdriver()
+ await installWebExt(driver, extPath)
+ await delay(700)
+ extensionId = await getExtensionIdFirefox(driver)
+ extensionUri = `moz-extension://${extensionId}/home.html`
+ } else {
+ throw new Error(`Unknown Browser "${browser}"`)
+ }
+
+ return { driver, extensionId, extensionUri }
+}
+
function buildChromeWebDriver (extPath) {
const tmpProfile = fs.mkdtempSync(path.join(os.tmpdir(), 'mm-chrome-profile'))
return new webdriver.Builder()
@@ -61,3 +97,13 @@ async function installWebExt (driver, extension) {
return await driver.schedule(cmd, 'installWebExt(' + extension + ')')
}
+
+async function verboseReportOnFailure ({ browser, driver, title }) {
+ const artifactDir = `./test-artifacts/${browser}/${title}`
+ const filepathBase = `${artifactDir}/test-failure`
+ await fs.ensureDir(artifactDir)
+ const screenshot = await driver.takeScreenshot()
+ await fs.writeFile(`${filepathBase}-screenshot.png`, screenshot, { encoding: 'base64' })
+ const htmlSource = await driver.getPageSource()
+ await fs.writeFile(`${filepathBase}-dom.html`, htmlSource)
+}
diff --git a/test/e2e/metamask.spec.js b/test/e2e/metamask.spec.js
index b6efae5b3..d26786ca6 100644
--- a/test/e2e/metamask.spec.js
+++ b/test/e2e/metamask.spec.js
@@ -1,38 +1,29 @@
-const fs = require('fs')
-const mkdirp = require('mkdirp')
const path = require('path')
const assert = require('assert')
-const pify = require('pify')
-const webdriver = require('selenium-webdriver')
-const { By, Key, until } = webdriver
-const { delay, buildChromeWebDriver, buildFirefoxWebdriver, installWebExt, getExtensionIdChrome, getExtensionIdFirefox } = require('./func')
+const { By, Key, until } = require('selenium-webdriver')
+const { delay, createModifiedTestBuild, setupBrowserAndExtension, verboseReportOnFailure } = require('./func')
describe('Metamask popup page', function () {
- let driver, accountAddress, tokenAddress, extensionId
+ const browser = process.env.SELENIUM_BROWSER
+ let driver, accountAddress, tokenAddress, extensionUri
this.timeout(0)
before(async function () {
- if (process.env.SELENIUM_BROWSER === 'chrome') {
- const extPath = path.resolve('dist/chrome')
- driver = buildChromeWebDriver(extPath)
- extensionId = await getExtensionIdChrome(driver)
- await driver.get(`chrome-extension://${extensionId}/popup.html`)
-
- } else if (process.env.SELENIUM_BROWSER === 'firefox') {
- const extPath = path.resolve('dist/firefox')
- driver = buildFirefoxWebdriver()
- await installWebExt(driver, extPath)
- await delay(700)
- extensionId = await getExtensionIdFirefox(driver)
- await driver.get(`moz-extension://${extensionId}/popup.html`)
- }
+ const srcPath = path.resolve(`dist/${browser}`)
+ const { extPath } = await createModifiedTestBuild({ browser, srcPath })
+ const installResult = await setupBrowserAndExtension({ browser, extPath })
+ driver = installResult.driver
+ extensionUri = installResult.extensionUri
+
+ await driver.get(extensionUri)
+ await delay(300)
})
afterEach(async function () {
// logs command not supported in firefox
// https://github.com/SeleniumHQ/selenium/issues/2910
- if (process.env.SELENIUM_BROWSER === 'chrome') {
+ if (browser === 'chrome') {
// check for console errors
const errors = await checkBrowserForConsoleErrors()
if (errors.length) {
@@ -43,7 +34,7 @@ describe('Metamask popup page', function () {
}
// gather extra data if test failed
if (this.currentTest.state === 'failed') {
- await verboseReportOnFailure(this.currentTest)
+ await verboseReportOnFailure({ browser, driver, title: this.currentTest.title })
}
})
@@ -54,16 +45,10 @@ describe('Metamask popup page', function () {
describe('Setup', function () {
it('switches to Chrome extensions list', async function () {
- await delay(300)
const windowHandles = await driver.getAllWindowHandles()
await driver.switchTo().window(windowHandles[0])
})
- it('sets provider type to localhost', async function () {
- await delay(300)
- await setProviderType('localhost')
- })
-
})
describe('Account Creation', () => {
@@ -91,6 +76,7 @@ describe('Metamask popup page', function () {
it('allows the button to be clicked when scrolled to the bottom of TOU', async () => {
const button = await driver.findElement(By.css('#app-content > div > div.app-primary.from-right > div > div.flex-column.flex-center.flex-grow > button'))
await button.click()
+ await delay(300)
})
it('shows privacy notice', async () => {
@@ -101,7 +87,6 @@ describe('Metamask popup page', function () {
})
it('shows phishing notice', async () => {
- await delay(300)
const noticeHeader = await driver.findElement(By.css('.terms-header')).getText()
assert.equal(noticeHeader, 'PHISHING WARNING', 'shows phishing warning')
const element = await driver.findElement(By.css('.markdown'))
@@ -288,11 +273,7 @@ describe('Metamask popup page', function () {
})
it('navigates back to MetaMask popup in the tab', async function () {
- if (process.env.SELENIUM_BROWSER === 'chrome') {
- await driver.get(`chrome-extension://${extensionId}/popup.html`)
- } else if (process.env.SELENIUM_BROWSER === 'firefox') {
- await driver.get(`moz-extension://${extensionId}/popup.html`)
- }
+ await driver.get(extensionUri)
await delay(700)
})
})
@@ -331,10 +312,6 @@ describe('Metamask popup page', function () {
})
})
- async function setProviderType (type) {
- await driver.executeScript('window.metamask.setProviderType(arguments[0])', type)
- }
-
async function checkBrowserForConsoleErrors () {
const ignoredLogTypes = ['WARNING']
const ignoredErrorMessages = [
@@ -355,21 +332,4 @@ describe('Metamask popup page', function () {
return matchedErrorObjects
}
- async function verboseReportOnFailure (test) {
- let artifactDir
- if (process.env.SELENIUM_BROWSER === 'chrome') {
- artifactDir = `./test-artifacts/chrome/${test.title}`
- } else if (process.env.SELENIUM_BROWSER === 'firefox') {
- artifactDir = `./test-artifacts/firefox/${test.title}`
- }
- const filepathBase = `${artifactDir}/test-failure`
- await pify(mkdirp)(artifactDir)
- // capture screenshot
- const screenshot = await driver.takeScreenshot()
- await pify(fs.writeFile)(`${filepathBase}-screenshot.png`, screenshot, { encoding: 'base64' })
- // capture dom source
- const htmlSource = await driver.getPageSource()
- await pify(fs.writeFile)(`${filepathBase}-dom.html`, htmlSource)
- }
-
})