From 4cd4d99e70902fe14c3c91938df8f1557f2524e8 Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Wed, 20 Jun 2018 15:03:32 -0230 Subject: Add explicit timeout for add token test --- test/e2e/beta/metamask-beta-ui.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index d911b91ed..bc8fd2919 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -430,7 +430,7 @@ describe('MetaMask', function () { it('renders the balance for the chosen token', async () => { const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) - await driver.wait(until.elementTextIs(balance, '0BAT')) + await driver.wait(until.elementTextIs(balance, '0BAT'), 10000) const tokenAmount = await balance.getText() assert.equal(tokenAmount, '0BAT') await delay(regularDelayMs) -- cgit From 1509a4393a241eb18be6702a913f2041818b2972 Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Wed, 20 Jun 2018 15:47:11 -0230 Subject: Accept whitespace when matching token balances in e2e tests --- test/e2e/beta/from-import-beta-ui.spec.js | 7 ++++--- test/e2e/beta/metamask-beta-ui.spec.js | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js index 823c72a3a..8af654319 100644 --- a/test/e2e/beta/from-import-beta-ui.spec.js +++ b/test/e2e/beta/from-import-beta-ui.spec.js @@ -348,8 +348,9 @@ describe('Using MetaMask with an existing account', function () { it('renders the balance for the new token', async () => { const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) + await driver.wait(until.elementTextMatches(balance, /^0\s*BAT\s*$/), 10000) const tokenAmount = await balance.getText() - assert.equal(tokenAmount, '0BAT') + assert.ok(/^0\s*BAT\s*$/.test(tokenAmount)) await delay(regularDelayMs) }) }) @@ -421,9 +422,9 @@ describe('Using MetaMask with an existing account', function () { it('renders the balance for the new token', async () => { const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) - await driver.wait(until.elementTextIs(balance, '100TST')) + await driver.wait(until.elementTextMatches(balance, /^100\s*TST\s*$/), 10000) const tokenAmount = await balance.getText() - assert.equal(tokenAmount, '100TST') + assert.ok(/^100\s*TST\s*$/.test(tokenAmount)) await delay(regularDelayMs) }) }) diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index bc8fd2919..71329bff7 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -430,9 +430,9 @@ describe('MetaMask', function () { it('renders the balance for the chosen token', async () => { const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) - await driver.wait(until.elementTextIs(balance, '0BAT'), 10000) + await driver.wait(until.elementTextMatches(balance, /^0\s*BAT\s*$/), 10000) const tokenAmount = await balance.getText() - assert.equal(tokenAmount, '0BAT') + assert.ok(/^0\s*BAT\s*$/.test(tokenAmount)) await delay(regularDelayMs) }) }) @@ -504,9 +504,9 @@ describe('MetaMask', function () { it('renders the balance for the new token', async () => { const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) - await driver.wait(until.elementTextIs(balance, '100TST')) + await driver.wait(until.elementTextMatches(balance, /^100\s*TST\s*$/)) const tokenAmount = await balance.getText() - assert.equal(tokenAmount, '100TST') + assert.ok(/^100\s*TST\s*$/.test(tokenAmount)) await delay(regularDelayMs) }) }) -- cgit From 73894fb5bde4548395e584bbab199c3b6dc86cc1 Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 7 Jun 2018 10:07:41 -0230 Subject: Adds e2e tests for sending tokens within metamask. --- test/e2e/beta/metamask-beta-ui.spec.js | 50 ++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 71329bff7..58979ce7e 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -160,7 +160,7 @@ describe('MetaMask', function () { let seedPhrase it('reveals the seed phrase', async () => { - const revealSeedPhrase = await findElement(driver, By.css('.backup-phrase__secret-blocker')) + const revealSeedPhrase = await findElement(driver, By.css('.backup-phrase__secret-blocker'), 14000) await revealSeedPhrase.click() await delay(regularDelayMs) @@ -230,7 +230,7 @@ describe('MetaMask', function () { }) it('clicks through the deposit modal', async () => { - const buyModal = await driver.findElement(By.css('span .modal')) + const buyModal = await findElement(driver, By.css('span .modal')) const closeModal = await findElement(driver, By.css('.page-container__header-close')) await closeModal.click() await driver.wait(until.stalenessOf(buyModal)) @@ -345,8 +345,10 @@ describe('MetaMask', function () { await configureGas.click() await delay(regularDelayMs) + const gasModal = await driver.findElement(By.css('span .modal')) const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) await save.click() + await driver.wait(until.stalenessOf(gasModal)) await delay(regularDelayMs) // Continue to next screen @@ -510,4 +512,48 @@ describe('MetaMask', function () { await delay(regularDelayMs) }) }) + + describe('Send token from inside MetaMask', () => { + it('starts to send a transaction', async function () { + const sendButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Send')]`)) + await sendButton.click() + await delay(regularDelayMs) + + const inputAddress = await findElement(driver, By.css('input[placeholder="Recipient Address"]')) + const inputAmount = await findElement(driver, By.css('.currency-display__input')) + await inputAddress.sendKeys('0x2f318C334780961FB129D2a6c30D0763d9a5C970') + await inputAmount.sendKeys('50') + + // Set the gas limit + const configureGas = await findElement(driver, By.css('.send-v2__gas-fee-display button')) + await configureGas.click() + await delay(regularDelayMs) + + const gasModal = await driver.findElement(By.css('span .modal')) + const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) + await save.click() + await driver.wait(until.stalenessOf(gasModal)) + await delay(regularDelayMs) + + // Continue to next screen + const nextScreen = await findElement(driver, By.xpath(`//button[contains(text(), 'Next')]`)) + await nextScreen.click() + await delay(regularDelayMs) + }) + + it('confirms the transaction', async function () { + const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) + await confirmButton.click() + await delay(regularDelayMs) + }) + + it('finds the transaction in the transactions list', async function () { + const transactions = await findElements(driver, By.css('.tx-list-item')) + assert.equal(transactions.length, 1) + + const txValues = await findElements(driver, By.css('.tx-list-value')) + assert.equal(txValues.length, 1) + assert.equal(await txValues[0].getText(), '50 TST') + }) + }) }) -- cgit From f82e4439d0e6e17d87525e01de4f0a6a175a84e5 Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 7 Jun 2018 14:23:54 -0230 Subject: Adds e2e tests for sending tokens from token factory. --- test/e2e/beta/metamask-beta-ui.spec.js | 64 ++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 3 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 58979ce7e..68cc17bc2 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -514,6 +514,7 @@ describe('MetaMask', function () { }) describe('Send token from inside MetaMask', () => { + let gasModal it('starts to send a transaction', async function () { const sendButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Send')]`)) await sendButton.click() @@ -529,11 +530,23 @@ describe('MetaMask', function () { await configureGas.click() await delay(regularDelayMs) - const gasModal = await driver.findElement(By.css('span .modal')) + gasModal = await driver.findElement(By.css('span .modal')) + }) + + it('customizes gas', async () => { + const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) + await gasPriceInput.clear() + await gasPriceInput.sendKeys('12.5') + await gasLimitInput.clear() + await gasLimitInput.sendKeys('56789') + const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) await save.click() - await driver.wait(until.stalenessOf(gasModal)) await delay(regularDelayMs) + }) + + it('transitions to the confirm screen', async () => { + await driver.wait(until.stalenessOf(gasModal)) // Continue to next screen const nextScreen = await findElement(driver, By.xpath(`//button[contains(text(), 'Next')]`)) @@ -541,7 +554,7 @@ describe('MetaMask', function () { await delay(regularDelayMs) }) - it('confirms the transaction', async function () { + it('submits the transaction', async function () { const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) await confirmButton.click() await delay(regularDelayMs) @@ -554,6 +567,51 @@ describe('MetaMask', function () { const txValues = await findElements(driver, By.css('.tx-list-value')) assert.equal(txValues.length, 1) assert.equal(await txValues[0].getText(), '50 TST') + const txStatuses = await findElements(driver, By.css('.tx-list-status')) + await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) + }) + }) + + describe('Send a custom token from TokenFactory', () => { + it('sends an already created token', async () => { + await driver.executeScript(`window.open("https://tokenfactory.surge.sh/#/token/${tokenAddress}")`) + await delay(waitingNewPageDelayMs) + + const [extension, tokenFactory] = await driver.getAllWindowHandles() + await driver.switchTo().window(tokenFactory) + const [ + transferToAddress, + transferToAmount, + ] = await findElements(driver, By.css('.form-control')) + + await transferToAddress.sendKeys('0x2f318C334780961FB129D2a6c30D0763d9a5C970') + await transferToAmount.sendKeys('26') + + const transferAmountButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Transfer Amount')]`)) + await transferAmountButton.click() + await delay(regularDelayMs) + + await driver.switchTo().window(extension) + await loadExtension(driver, extensionId) + await delay(regularDelayMs) + + const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) + await confirmButton.click() + await delay(regularDelayMs) + }) + + it('finds the transaction in the transactions list', async function () { + const transactions = await findElements(driver, By.css('.tx-list-item')) + assert.equal(transactions.length, 5) + + const txValues = await findElements(driver, By.css('.tx-list-value')) + assert.equal(txValues.length, 5) + assert.equal(await txValues[0].getText(), '26 TST') + const txStatuses = await findElements(driver, By.css('.tx-list-status')) + await driver.wait(until.elementTextMatches(txStatuses[1], /Confirmed/)) + + const tokenBalanceAmount = await findElement(driver, By.css('.token-balance__amount')) + assert.equal(tokenBalanceAmount.getText(), '24 TST') }) }) }) -- cgit From 67894ef2e282f67539c4e7e00b1014f3854db8e0 Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 7 Jun 2018 10:07:41 -0230 Subject: Adds e2e tests for sending tokens within metamask. --- test/e2e/beta/metamask-beta-ui.spec.js | 44 ++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 68cc17bc2..bbebecc39 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -614,4 +614,48 @@ describe('MetaMask', function () { assert.equal(tokenBalanceAmount.getText(), '24 TST') }) }) + + describe('Send token from inside MetaMask', () => { + it('starts to send a transaction', async function () { + const sendButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Send')]`)) + await sendButton.click() + await delay(regularDelayMs) + + const inputAddress = await findElement(driver, By.css('input[placeholder="Recipient Address"]')) + const inputAmount = await findElement(driver, By.css('.currency-display__input')) + await inputAddress.sendKeys('0x2f318C334780961FB129D2a6c30D0763d9a5C970') + await inputAmount.sendKeys('50') + + // Set the gas limit + const configureGas = await findElement(driver, By.css('.send-v2__gas-fee-display button')) + await configureGas.click() + await delay(regularDelayMs) + + const gasModal = await driver.findElement(By.css('span .modal')) + const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) + await save.click() + await driver.wait(until.stalenessOf(gasModal)) + await delay(regularDelayMs) + + // Continue to next screen + const nextScreen = await findElement(driver, By.xpath(`//button[contains(text(), 'Next')]`)) + await nextScreen.click() + await delay(regularDelayMs) + }) + + it('confirms the transaction', async function () { + const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) + await confirmButton.click() + await delay(regularDelayMs) + }) + + it('finds the transaction in the transactions list', async function () { + const transactions = await findElements(driver, By.css('.tx-list-item')) + assert.equal(transactions.length, 1) + + const txValues = await findElements(driver, By.css('.tx-list-value')) + assert.equal(txValues.length, 1) + assert.equal(await txValues[0].getText(), '50 TST') + }) + }) }) -- cgit From 9cb15d44a055399c320d4544a2c71ffb7bf152c9 Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 7 Jun 2018 14:23:54 -0230 Subject: Adds e2e tests for sending tokens from token factory. --- test/e2e/beta/metamask-beta-ui.spec.js | 64 ++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 3 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index bbebecc39..add730271 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -616,6 +616,7 @@ describe('MetaMask', function () { }) describe('Send token from inside MetaMask', () => { + let gasModal it('starts to send a transaction', async function () { const sendButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Send')]`)) await sendButton.click() @@ -631,11 +632,23 @@ describe('MetaMask', function () { await configureGas.click() await delay(regularDelayMs) - const gasModal = await driver.findElement(By.css('span .modal')) + gasModal = await driver.findElement(By.css('span .modal')) + }) + + it('customizes gas', async () => { + const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) + await gasPriceInput.clear() + await gasPriceInput.sendKeys('12.5') + await gasLimitInput.clear() + await gasLimitInput.sendKeys('56789') + const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) await save.click() - await driver.wait(until.stalenessOf(gasModal)) await delay(regularDelayMs) + }) + + it('transitions to the confirm screen', async () => { + await driver.wait(until.stalenessOf(gasModal)) // Continue to next screen const nextScreen = await findElement(driver, By.xpath(`//button[contains(text(), 'Next')]`)) @@ -643,7 +656,7 @@ describe('MetaMask', function () { await delay(regularDelayMs) }) - it('confirms the transaction', async function () { + it('submits the transaction', async function () { const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) await confirmButton.click() await delay(regularDelayMs) @@ -656,6 +669,51 @@ describe('MetaMask', function () { const txValues = await findElements(driver, By.css('.tx-list-value')) assert.equal(txValues.length, 1) assert.equal(await txValues[0].getText(), '50 TST') + const txStatuses = await findElements(driver, By.css('.tx-list-status')) + await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) + }) + }) + + describe('Send a custom token from TokenFactory', () => { + it('sends an already created token', async () => { + await driver.executeScript(`window.open("https://tokenfactory.surge.sh/#/token/${tokenAddress}")`) + await delay(waitingNewPageDelayMs) + + const [extension, tokenFactory] = await driver.getAllWindowHandles() + await driver.switchTo().window(tokenFactory) + const [ + transferToAddress, + transferToAmount, + ] = await findElements(driver, By.css('.form-control')) + + await transferToAddress.sendKeys('0x2f318C334780961FB129D2a6c30D0763d9a5C970') + await transferToAmount.sendKeys('26') + + const transferAmountButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Transfer Amount')]`)) + await transferAmountButton.click() + await delay(regularDelayMs) + + await driver.switchTo().window(extension) + await loadExtension(driver, extensionId) + await delay(regularDelayMs) + + const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) + await confirmButton.click() + await delay(regularDelayMs) + }) + + it('finds the transaction in the transactions list', async function () { + const transactions = await findElements(driver, By.css('.tx-list-item')) + assert.equal(transactions.length, 5) + + const txValues = await findElements(driver, By.css('.tx-list-value')) + assert.equal(txValues.length, 5) + assert.equal(await txValues[0].getText(), '26 TST') + const txStatuses = await findElements(driver, By.css('.tx-list-status')) + await driver.wait(until.elementTextMatches(txStatuses[1], /Confirmed/)) + + const tokenBalanceAmount = await findElement(driver, By.css('.token-balance__amount')) + assert.equal(tokenBalanceAmount.getText(), '24 TST') }) }) }) -- cgit From 9734e6ffb8d45cf5268e73a76c29948fad129205 Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 8 Jun 2018 11:16:47 -0230 Subject: metamask-beta-ui.spec.js tests custom token send before searched token. --- test/e2e/beta/metamask-beta-ui.spec.js | 81 ++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 38 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index add730271..2d41d80cc 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -160,8 +160,9 @@ describe('MetaMask', function () { let seedPhrase it('reveals the seed phrase', async () => { - const revealSeedPhrase = await findElement(driver, By.css('.backup-phrase__secret-blocker'), 14000) - await revealSeedPhrase.click() + await driver.wait(until.elementIsVisible(By.css('.backup-phrase__reveal-button'))) + const revealSeedPhraseButton = await findElement(driver, By.css('.backup-phrase__reveal-button'), 10000) + await revealSeedPhraseButton.click() await delay(regularDelayMs) seedPhrase = await driver.findElement(By.css('.backup-phrase__secret-words')).getText() @@ -405,40 +406,6 @@ describe('MetaMask', function () { }) }) - 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('can pick a token from the existing options', 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 addTokens = await findElement(driver, By.xpath(`//button[contains(text(), 'Add Tokens')]`)) - await addTokens.click() - await delay(largeDelayMs) - }) - - it('renders the balance for the chosen token', async () => { - const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) - await driver.wait(until.elementTextMatches(balance, /^0\s*BAT\s*$/), 10000) - const tokenAmount = await balance.getText() - assert.ok(/^0\s*BAT\s*$/.test(tokenAmount)) - await delay(regularDelayMs) - }) - }) - describe('Add a custom token from TokenFactory', () => { it('creates a new token', async () => { await driver.executeScript('window.open("https://tokenfactory.surge.sh/#/factory")') @@ -710,10 +677,48 @@ describe('MetaMask', function () { assert.equal(txValues.length, 5) assert.equal(await txValues[0].getText(), '26 TST') const txStatuses = await findElements(driver, By.css('.tx-list-status')) - await driver.wait(until.elementTextMatches(txStatuses[1], /Confirmed/)) + await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) + + const tokenListItems = await findElements(driver, By.css('.token-list-item')) + tokenListItems[0].click() + await delay(regularDelayMs) const tokenBalanceAmount = await findElement(driver, By.css('.token-balance__amount')) - assert.equal(tokenBalanceAmount.getText(), '24 TST') + assert.equal(await tokenBalanceAmount.getText(), '24') + }) + }) + + 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('can pick a token from the existing options', 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 addTokens = await findElement(driver, By.xpath(`//button[contains(text(), 'Add Tokens')]`)) + await addTokens.click() + await delay(largeDelayMs) + }) + + it('renders the balance for the chosen token', async () => { + const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) + await driver.wait(until.elementTextIs(balance, '0BAT')) + const tokenAmount = await balance.getText() + assert.equal(tokenAmount, '0BAT') + await delay(regularDelayMs) }) }) }) -- cgit From 1d8f257832a91757a874bd4221c3a3494aba0f7b Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 11 Jun 2018 10:34:27 -0230 Subject: Add test for importing from private key to from-import-beta-ui.spec.js, and remove non-import related tests from that file. --- test/e2e/beta/from-import-beta-ui.spec.js | 142 ++++-------------------------- test/e2e/beta/run-all.sh | 2 +- 2 files changed, 19 insertions(+), 125 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js index 8af654319..dea963a73 100644 --- a/test/e2e/beta/from-import-beta-ui.spec.js +++ b/test/e2e/beta/from-import-beta-ui.spec.js @@ -26,6 +26,7 @@ describe('Using MetaMask with an existing account', function () { 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 @@ -289,143 +290,36 @@ describe('Using MetaMask with an existing account', function () { }) }) - 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 loadExtension(driver, extensionId) - 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 loadExtension(driver, extensionId) - 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() + 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() await delay(regularDelayMs) - const addTokens = await findElement(driver, By.xpath(`//button[contains(text(), 'Add Tokens')]`)) - await addTokens.click() - await delay(largeDelayMs) - }) - - it('renders the balance for the new token', async () => { - const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) - await driver.wait(until.elementTextMatches(balance, /^0\s*BAT\s*$/), 10000) - const tokenAmount = await balance.getText() - assert.ok(/^0\s*BAT\s*$/.test(tokenAmount)) + 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', () => { - it('creates a new token', async () => { - await driver.executeScript('window.open("https://tokenfactory.surge.sh/#/factory")') - await delay(waitingNewPageDelayMs) - - const [extension, tokenFactory] = await driver.getAllWindowHandles() - 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() + it('enter private key', async () => { + const privateKeyInput = await findElement(driver, By.css('#private-key-box')) + await privateKeyInput.sendKeys(testPrivateKey2) await delay(regularDelayMs) - - await driver.switchTo().window(extension) - await loadExtension(driver, extensionId) - await delay(regularDelayMs) - - const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) - await confirmButton.click() - await delay(regularDelayMs) - - 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)')) - tokenAddress = await tokenContactAddress.getText() - await driver.close() - await driver.switchTo().window(extension) - await loadExtension(driver, extensionId) - await delay(regularDelayMs) - }) - - it('clicks on the Add Token button', async () => { - const addToken = await findElement(driver, By.xpath(`//button[contains(text(), 'Add Token')]`)) - await addToken.click() + const importButtons = await findElements(driver, By.xpath(`//button[contains(text(), 'Import')]`)) + await importButtons[0].click() await delay(regularDelayMs) }) - it('picks the new Test token', async () => { - const addCustomToken = await findElement(driver, By.xpath("//div[contains(text(), 'Custom Token')]")) - await addCustomToken.click() - await delay(regularDelayMs) - - const newTokenAddress = await findElement(driver, By.css('#custom-address')) - await newTokenAddress.sendKeys(tokenAddress) - await delay(regularDelayMs) - - const nextScreen = await findElement(driver, By.xpath(`//button[contains(text(), 'Next')]`)) - await nextScreen.click() - await delay(regularDelayMs) - - const addTokens = await findElement(driver, By.xpath(`//button[contains(text(), 'Add Tokens')]`)) - await addTokens.click() + it('should show the correct account name', async () => { + const [accountName] = await findElements(driver, By.css('.account-name')) + assert.equal(await accountName.getText(), 'Account 3') await delay(regularDelayMs) }) - it('renders the balance for the new token', async () => { - const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) - await driver.wait(until.elementTextMatches(balance, /^100\s*TST\s*$/), 10000) - const tokenAmount = await balance.getText() - assert.ok(/^100\s*TST\s*$/.test(tokenAmount)) + it('should show the imported label', async () => { + const [importedLabel] = await findElements(driver, By.css('.wallet-view__keyring-label')) + assert.equal(await importedLabel.getText(), 'IMPORTED') await delay(regularDelayMs) }) }) + }) diff --git a/test/e2e/beta/run-all.sh b/test/e2e/beta/run-all.sh index 5916d5614..b0b6ecca8 100755 --- a/test/e2e/beta/run-all.sh +++ b/test/e2e/beta/run-all.sh @@ -7,4 +7,4 @@ set -o pipefail export PATH="$PATH:./node_modules/.bin" shell-parallel -s 'npm run ganache:start' -x 'sleep 5 && mocha test/e2e/beta/metamask-beta-ui.spec' -shell-parallel -s 'npm run ganache:start' -x 'sleep 5 && mocha test/e2e/beta/from-import-beta-ui.spec' +shell-parallel -s 'npm run ganache:start -- -d' -x 'sleep 5 && mocha test/e2e/beta/from-import-beta-ui.spec' -- cgit From e293233c5e5f2f85054af1918ecb3f0e9c4dbd8b Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 11 Jun 2018 10:36:15 -0230 Subject: Improve reliability of beta e2e tests by using webdriver apis to wait for certain dom elements. --- test/e2e/beta/from-import-beta-ui.spec.js | 5 +++-- test/e2e/beta/metamask-beta-ui.spec.js | 12 +++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js index dea963a73..38fdedcec 100644 --- a/test/e2e/beta/from-import-beta-ui.spec.js +++ b/test/e2e/beta/from-import-beta-ui.spec.js @@ -167,8 +167,7 @@ describe('Using MetaMask with an existing account', function () { describe('Show account information', () => { it('shows the correct account address', async () => { - const detailsButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Details')]`)) - detailsButton.click() + await driver.findElement(By.css('.wallet-view__details-button')).click() await driver.findElement(By.css('.qr-wrapper')).isDisplayed() await delay(regularDelayMs) @@ -264,8 +263,10 @@ describe('Using MetaMask with an existing account', function () { await configureGas.click() await delay(regularDelayMs) + const gasModal = await driver.findElement(By.css('span .modal')) const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) await save.click() + await driver.wait(until.stalenessOf(gasModal)) await delay(regularDelayMs) // Continue to next screen diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 2d41d80cc..736cbc916 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -136,6 +136,7 @@ describe('MetaMask', function () { await driver.executeScript('arguments[0].scrollIntoView(true)', bottomOfTos) await delay(regularDelayMs) const acceptTos = await findElement(driver, By.css('.tou button')) + driver.wait(until.elementIsEnabled(acceptTos)) await acceptTos.click() await delay(regularDelayMs) }) @@ -160,8 +161,9 @@ describe('MetaMask', function () { let seedPhrase it('reveals the seed phrase', async () => { - await driver.wait(until.elementIsVisible(By.css('.backup-phrase__reveal-button'))) - const revealSeedPhraseButton = await findElement(driver, By.css('.backup-phrase__reveal-button'), 10000) + const byRevealButton = By.css('.backup-phrase__secret-blocker .backup-phrase__reveal-button') + await driver.wait(until.elementLocated(byRevealButton, 10000)) + const revealSeedPhraseButton = await findElement(driver, byRevealButton, 10000) await revealSeedPhraseButton.click() await delay(regularDelayMs) @@ -245,8 +247,12 @@ describe('MetaMask', function () { await driver.findElement(By.css('.qr-wrapper')).isDisplayed() await delay(regularDelayMs) + let accountModal = await driver.findElement(By.css('span .modal')) + await driver.executeScript("document.querySelector('.account-modal-close').click()") - await delay(regularDelayMs * 4) + + await driver.wait(until.stalenessOf(accountModal)) + await delay(regularDelayMs) }) }) -- cgit From 797a3ee686bd3ed87ea0669a1a21da45f02d7e81 Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 11 Jun 2018 10:38:24 -0230 Subject: e2e beta tests for contract deployment and calling a contract method. --- test/e2e/beta/helpers.js | 29 +++++++++ test/e2e/beta/metamask-beta-ui.spec.js | 108 ++++++++++++++++++++++++++++++++- 2 files changed, 135 insertions(+), 2 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/helpers.js b/test/e2e/beta/helpers.js index 31c41d8b7..949fece96 100644 --- a/test/e2e/beta/helpers.js +++ b/test/e2e/beta/helpers.js @@ -3,12 +3,41 @@ const mkdirp = require('mkdirp') const pify = require('pify') const {until} = require('selenium-webdriver') +const testContract = ` + pragma solidity ^0.4.0; + contract PiggyBank { + + uint private balance; + address public owner; + + function PiggyBank() public { + owner = msg.sender; + balance = 0; + } + + function deposit() public payable returns (uint) { + balance += msg.value; + return balance; + } + + function withdraw(uint withdrawAmount) public returns (uint remainingBal) { + require(msg.sender == owner); + balance -= withdrawAmount; + + msg.sender.transfer(withdrawAmount); + + return balance; + } + } +` + module.exports = { checkBrowserForConsoleErrors, loadExtension, verboseReportOnFailure, findElement, findElements, + testContract, } async function loadExtension (driver, extensionId) { diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 736cbc916..5b257ff65 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -16,6 +16,7 @@ const { checkBrowserForConsoleErrors, loadExtension, verboseReportOnFailure, + testContract, } = require('./helpers') describe('MetaMask', function () { @@ -353,6 +354,7 @@ describe('MetaMask', function () { await delay(regularDelayMs) const gasModal = await driver.findElement(By.css('span .modal')) + const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) await save.click() await driver.wait(until.stalenessOf(gasModal)) @@ -412,6 +414,108 @@ describe('MetaMask', function () { }) }) + describe('Deploy contract and call contract method from Remix', () => { + it('writes a contract to remix', async () => { + await driver.executeScript('window.open("https://remix.ethereum.org/")') + await delay(waitingNewPageDelayMs) + + const [extension, remix] = await driver.getAllWindowHandles() + await driver.switchTo().window(remix) + + const newContractButton = await findElement(driver, By.css('.fa-plus-circle')) + await newContractButton.click() + await delay(regularDelayMs) + + const modalFooterOkay = await findElement(driver, By.css('#modal-footer-ok')) + await modalFooterOkay.click() + await delay(regularDelayMs) + + await driver.executeScript('window.document.getElementById("input").editor.session.setValue(arguments[0])', testContract) + await delay(regularDelayMs) + }) + + it('compiles the contract', async () => { + const [extension, remix] = await driver.getAllWindowHandles() + + const compileButton = await findElement(driver, By.css('#compile')) + compileButton.click() + const byOption = By.xpath(`//option[contains(text(), 'PiggyBank')]`) + await driver.wait(until.elementLocated(byOption, 10000)) + await delay(regularDelayMs) + + const runTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Run')]`)) + await runTab.click() + await delay(regularDelayMs) + + const deployButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Deploy')]`)) + await deployButton.click() + await delay(regularDelayMs) + + await driver.switchTo().window(extension) + await loadExtension(driver, extensionId) + await delay(regularDelayMs) + + const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) + await confirmButton.click() + await delay(regularDelayMs) + + const txStatuses = await findElements(driver, By.css('.tx-list-status')) + await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) + + const txAccounts = await findElements(driver, By.css('.tx-list-account')) + assert.equal(await txAccounts[0].getText(), 'Contract Deployment') + }) + + it('calls and confirms a contract method', async () => { + const [extension, remix] = await driver.getAllWindowHandles() + await driver.switchTo().window(remix) + await delay(regularDelayMs) + + const depositButton = await findElement(driver, By.xpath(`//button[contains(text(), 'deposit')]`)) + await depositButton.click() + await delay(regularDelayMs) + + await driver.switchTo().window(extension) + await loadExtension(driver, extensionId) + await delay(regularDelayMs) + + // Set the gas limit + const configureGas = await findElement(driver, By.css('.sliders-icon-container')) + await configureGas.click() + await delay(regularDelayMs) + + let gasModal = await driver.findElement(By.css('span .modal')) + + const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) + await gasPriceInput.clear() + await gasPriceInput.sendKeys('10') + await gasLimitInput.clear() + await gasLimitInput.sendKeys('60001') + + const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) + await save.click() + await delay(regularDelayMs) + + await driver.wait(until.stalenessOf(gasModal)) + + const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) + await confirmButton.click() + await delay(regularDelayMs) + + const txStatuses = await findElements(driver, By.css('.tx-list-status')) + await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) + + const txAccounts = await findElements(driver, By.css('.tx-list-account')) + const firstTxAddress = await txAccounts[0].getText() + assert(firstTxAddress.match(/^0x\w{8}\.{3}\w{4}$/)) + + await driver.switchTo().window(remix) + await driver.close() + await driver.switchTo().window(extension) + await delay(regularDelayMs) + }) + }) + describe('Add a custom token from TokenFactory', () => { it('creates a new token', async () => { await driver.executeScript('window.open("https://tokenfactory.surge.sh/#/factory")') @@ -677,10 +781,10 @@ describe('MetaMask', function () { it('finds the transaction in the transactions list', async function () { const transactions = await findElements(driver, By.css('.tx-list-item')) - assert.equal(transactions.length, 5) + assert.equal(transactions.length, 7) const txValues = await findElements(driver, By.css('.tx-list-value')) - assert.equal(txValues.length, 5) + assert.equal(txValues.length, 7) assert.equal(await txValues[0].getText(), '26 TST') const txStatuses = await findElements(driver, By.css('.tx-list-status')) await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) -- cgit From bf32aeaef26907369ae52ac2e9fcde7336d6760d Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 11 Jun 2018 11:22:44 -0230 Subject: Adds test for hiding tokens. --- test/e2e/beta/metamask-beta-ui.spec.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 5b257ff65..2b52e1e7c 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -798,6 +798,25 @@ describe('MetaMask', function () { }) }) + describe('Hide token', () => { + it('hides the token when clicked', async () => { + const [hideTokenEllipsis] = await findElements(driver, By.css('.token-list-item__ellipsis')) + hideTokenEllipsis.click() + + const byTokenMenuDropdownOption = By.css('.token-menu-dropdown__option') + const tokenMenuDropdownOption = await driver.wait(until.elementLocated(byTokenMenuDropdownOption)) + tokenMenuDropdownOption.click() + + const confirmHideModal = await findElement(driver, By.css('span .modal')) + + const byHideTokenConfirmationButton = By.css('.hide-token-confirmation__button') + const hideTokenConfirmationButton = await driver.wait(until.elementLocated(byHideTokenConfirmationButton)) + hideTokenConfirmationButton.click() + + await driver.wait(until.stalenessOf(confirmHideModal)) + }) + }) + 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')]`)) -- cgit From cc61372260ed8e2f6b22e3fc57a37289382d9ff9 Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 14 Jun 2018 15:42:04 -0230 Subject: Disable onbeforeunload alert on remix for contract integration tests. --- test/e2e/beta/metamask-beta-ui.spec.js | 1 + 1 file changed, 1 insertion(+) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 2b52e1e7c..451437ab1 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -510,6 +510,7 @@ describe('MetaMask', function () { assert(firstTxAddress.match(/^0x\w{8}\.{3}\w{4}$/)) await driver.switchTo().window(remix) + await driver.executeScript("window.onbeforeunload = function() {};") await driver.close() await driver.switchTo().window(extension) await delay(regularDelayMs) -- cgit From 13e0b42359bcc51e8ed4f342a5e3d3edb4cb4c3e Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 18 Jun 2018 21:05:38 -0230 Subject: Update tests to accomodate token list menu additions. --- test/e2e/beta/metamask-beta-ui.spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 451437ab1..548515760 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -804,8 +804,9 @@ describe('MetaMask', function () { const [hideTokenEllipsis] = await findElements(driver, By.css('.token-list-item__ellipsis')) hideTokenEllipsis.click() - const byTokenMenuDropdownOption = By.css('.token-menu-dropdown__option') + const byTokenMenuDropdownOption = By.css('.menu__item--clickable') const tokenMenuDropdownOption = await driver.wait(until.elementLocated(byTokenMenuDropdownOption)) + tokenMenuDropdownOption.click() const confirmHideModal = await findElement(driver, By.css('span .modal')) -- cgit From b64292d92fccafe2cf99279bb170c486d2c3515c Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 19 Jun 2018 13:14:01 -0230 Subject: Update metamask-beta-ui e2e spec to fail on insufficient gas estimation. --- test/e2e/beta/metamask-beta-ui.spec.js | 38 +++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 548515760..a86881877 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -485,6 +485,7 @@ describe('MetaMask', function () { await delay(regularDelayMs) let gasModal = await driver.findElement(By.css('span .modal')) + await driver.wait(until.elementLocated('send-v2__customize-gas__title')) const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) await gasPriceInput.clear() @@ -612,12 +613,7 @@ describe('MetaMask', function () { }) it('customizes gas', async () => { - const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) - await gasPriceInput.clear() - await gasPriceInput.sendKeys('12.5') - await gasLimitInput.clear() - await gasLimitInput.sendKeys('56789') - + await driver.wait(until.elementLocated(By.css('.send-v2__customize-gas__title'))) const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) await save.click() await delay(regularDelayMs) @@ -646,11 +642,13 @@ describe('MetaMask', function () { assert.equal(txValues.length, 1) assert.equal(await txValues[0].getText(), '50 TST') const txStatuses = await findElements(driver, By.css('.tx-list-status')) - await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) + const tx = await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed|Failed/)) + assert.equal(await tx.getText(), 'Confirmed') }) }) describe('Send a custom token from TokenFactory', () => { + let gasModal it('sends an already created token', async () => { await driver.executeScript(`window.open("https://tokenfactory.surge.sh/#/token/${tokenAddress}")`) await delay(waitingNewPageDelayMs) @@ -673,6 +671,32 @@ describe('MetaMask', function () { await loadExtension(driver, extensionId) await delay(regularDelayMs) + // Set the gas limit + const configureGas = await driver.wait(until.elementLocated(By.css('.send-v2__gas-fee-display button'))) + await configureGas.click() + await delay(regularDelayMs) + + gasModal = await driver.findElement(By.css('span .modal')) + }) + + it('customizes gas', async () => { + await driver.wait(until.elementLocated(By.css('.send-v2__customize-gas__title'))) + + const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) + await gasPriceInput.clear() + await gasPriceInput.sendKeys('10') + await gasLimitInput.clear() + await gasLimitInput.sendKeys('60000') + + const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) + await save.click() + await driver.wait(until.stalenessOf(gasModal)) + + const gasFeeInput = await findElement(driver, By.css('.currency-display__input')) + assert.equal(await gasFeeInput.getAttribute('value'), 0.0006) + }) + + it('submits the transaction', async function () { const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) await confirmButton.click() await delay(regularDelayMs) -- cgit From 7d5531d3e857780cf944437a309348421e5e78a3 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 19 Jun 2018 15:00:32 -0230 Subject: Improve wait for buy modal render after first time flow in beta e2e tests. --- test/e2e/beta/metamask-beta-ui.spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index a86881877..382aa4060 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -234,7 +234,8 @@ describe('MetaMask', function () { }) it('clicks through the deposit modal', async () => { - const buyModal = await findElement(driver, By.css('span .modal')) + const byBuyModal = By.css('span .modal') + const buyModal = await driver.wait(until.elementLocated(byBuyModal)) const closeModal = await findElement(driver, By.css('.page-container__header-close')) await closeModal.click() await driver.wait(until.stalenessOf(buyModal)) -- cgit From b7e7209fe670c693b2d54426fd402df2e0223bd0 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 19 Jun 2018 22:06:06 -0230 Subject: Fix element located bug in beta e2e contract method call test. --- test/e2e/beta/metamask-beta-ui.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 382aa4060..ee1fd0db2 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -486,7 +486,7 @@ describe('MetaMask', function () { await delay(regularDelayMs) let gasModal = await driver.findElement(By.css('span .modal')) - await driver.wait(until.elementLocated('send-v2__customize-gas__title')) + await driver.wait(until.elementLocated(By.css('.send-v2__customize-gas__title'))) const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) await gasPriceInput.clear() -- cgit From 07970b7cfa247541a21ceee0fbafce14ff77ff1d Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 20 Jun 2018 19:34:28 -0230 Subject: Add delay before regularly failing test. --- test/e2e/beta/metamask-beta-ui.spec.js | 1 + 1 file changed, 1 insertion(+) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index ee1fd0db2..b0ed23691 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -694,6 +694,7 @@ describe('MetaMask', function () { await driver.wait(until.stalenessOf(gasModal)) const gasFeeInput = await findElement(driver, By.css('.currency-display__input')) + await delay(regularDelayMs) assert.equal(await gasFeeInput.getAttribute('value'), 0.0006) }) -- cgit From bdf9cd8e3ad0ba126f452f0ff2d7f52f25eb249e Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 21 Jun 2018 09:49:27 -0230 Subject: Speed up page opening and fix timeout errors on remix page opening in beta e2e tests. --- test/e2e/beta/helpers.js | 14 ++++++++++++++ test/e2e/beta/metamask-beta-ui.spec.js | 25 ++++++++++++------------- 2 files changed, 26 insertions(+), 13 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/helpers.js b/test/e2e/beta/helpers.js index 949fece96..c1080e8db 100644 --- a/test/e2e/beta/helpers.js +++ b/test/e2e/beta/helpers.js @@ -2,6 +2,7 @@ const fs = require('fs') const mkdirp = require('mkdirp') const pify = require('pify') const {until} = require('selenium-webdriver') +const { delay } = require('../func') const testContract = ` pragma solidity ^0.4.0; @@ -37,6 +38,7 @@ module.exports = { verboseReportOnFailure, findElement, findElements, + openNewPage, testContract, } @@ -93,3 +95,15 @@ async function findElement (driver, by, timeout = 10000) { async function findElements (driver, by, timeout = 10000) { return driver.wait(until.elementsLocated(by), timeout) } + +async function openNewPage (driver, url) { + await driver.executeScript('window.open()') + await delay(1000) + + const handles = await driver.getAllWindowHandles() + const lastHandle = handles.pop() + await driver.switchTo().window(lastHandle) + + await driver.get(url) + await delay(1000) +} diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index b0ed23691..6391e686e 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -17,6 +17,7 @@ const { loadExtension, verboseReportOnFailure, testContract, + openNewPage, } = require('./helpers') describe('MetaMask', function () { @@ -385,11 +386,13 @@ describe('MetaMask', function () { 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) + await openNewPage(driver, 'https://faucet.metamask.io') const [extension, faucet] = await driver.getAllWindowHandles() await driver.switchTo().window(faucet) + + const faucetPageTitle = await findElement(driver, By.css('.container-fluid')) + await driver.wait(until.elementTextMatches(faucetPageTitle, /MetaMask/)) await delay(regularDelayMs) const send1eth = await findElement(driver, By.xpath(`//button[contains(text(), '10 ether')]`), 14000) @@ -417,11 +420,10 @@ describe('MetaMask', function () { describe('Deploy contract and call contract method from Remix', () => { it('writes a contract to remix', async () => { - await driver.executeScript('window.open("https://remix.ethereum.org/")') - await delay(waitingNewPageDelayMs) + await openNewPage(driver, 'https://remix.ethereum.org/') - const [extension, remix] = await driver.getAllWindowHandles() - await driver.switchTo().window(remix) + const byFilePanel = By.css('#filepanel') + await driver.wait(until.elementLocated(byFilePanel)) const newContractButton = await findElement(driver, By.css('.fa-plus-circle')) await newContractButton.click() @@ -521,11 +523,9 @@ describe('MetaMask', function () { describe('Add a custom token from TokenFactory', () => { it('creates a new token', async () => { - await driver.executeScript('window.open("https://tokenfactory.surge.sh/#/factory")') - await delay(waitingNewPageDelayMs) - + openNewPage(driver, 'https://tokenfactory.surge.sh/#/factory') const [extension, tokenFactory] = await driver.getAllWindowHandles() - await driver.switchTo().window(tokenFactory) + const [ totalSupply, tokenName, @@ -651,11 +651,10 @@ describe('MetaMask', function () { describe('Send a custom token from TokenFactory', () => { let gasModal it('sends an already created token', async () => { - await driver.executeScript(`window.open("https://tokenfactory.surge.sh/#/token/${tokenAddress}")`) - await delay(waitingNewPageDelayMs) + openNewPage(driver, `https://tokenfactory.surge.sh/#/token/${tokenAddress}`) const [extension, tokenFactory] = await driver.getAllWindowHandles() - await driver.switchTo().window(tokenFactory) + const [ transferToAddress, transferToAmount, -- cgit From f5d43404dc35a849dcb9dc9f5d87f183be0aff0b Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 21 Jun 2018 13:59:20 -0230 Subject: Fix send token tests in beta ui e2e tests. --- test/e2e/beta/metamask-beta-ui.spec.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 6391e686e..9711bf821 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -378,9 +378,8 @@ describe('MetaMask', function () { const transactions = await findElements(driver, By.css('.tx-list-item')) assert.equal(transactions.length, 1) - const txValues = await findElements(driver, By.css('.tx-list-value')) - assert.equal(txValues.length, 1) - assert.equal(await txValues[0].getText(), '1 ETH') + const txValues = await findElement(driver, By.css('.tx-list-value')) + await driver.wait(until.elementTextMatches(txValues, /1\sETH/), 10000) }) }) @@ -524,6 +523,8 @@ describe('MetaMask', function () { describe('Add a custom token from TokenFactory', () => { it('creates a new token', async () => { openNewPage(driver, 'https://tokenfactory.surge.sh/#/factory') + + await delay(regularDelayMs * 10) const [extension, tokenFactory] = await driver.getAllWindowHandles() const [ @@ -552,12 +553,15 @@ describe('MetaMask', function () { 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)')) tokenAddress = await tokenContactAddress.getText() + await driver.close() await driver.switchTo().window(extension) await loadExtension(driver, extensionId) await delay(regularDelayMs) + }) it('clicks on the Add Token button', async () => { @@ -641,6 +645,7 @@ describe('MetaMask', function () { const txValues = await findElements(driver, By.css('.tx-list-value')) assert.equal(txValues.length, 1) + await delay(regularDelayMs) assert.equal(await txValues[0].getText(), '50 TST') const txStatuses = await findElements(driver, By.css('.tx-list-status')) const tx = await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed|Failed/)) @@ -684,16 +689,24 @@ describe('MetaMask', function () { const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) await gasPriceInput.clear() + await delay(tinyDelayMs) await gasPriceInput.sendKeys('10') + await delay(tinyDelayMs) await gasLimitInput.clear() + await delay(tinyDelayMs) + await gasLimitInput.sendKeys(Key.chord(Key.CONTROL, 'a')) await gasLimitInput.sendKeys('60000') + await gasLimitInput.sendKeys(Key.chord(Key.CONTROL, 'e')) + if (process.env.SELENIUM_BROWSER === 'firefox') { + await gasLimitInput.sendKeys(Key.BACK_SPACE) + } + await delay(tinyDelayMs) - const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) + const save = await findElement(driver, By.css('.send-v2__customize-gas__save')) await save.click() await driver.wait(until.stalenessOf(gasModal)) const gasFeeInput = await findElement(driver, By.css('.currency-display__input')) - await delay(regularDelayMs) assert.equal(await gasFeeInput.getAttribute('value'), 0.0006) }) -- cgit From c1aa1934873d3fd4b26138855bd3453679e04ee1 Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 21 Jun 2018 17:10:11 -0230 Subject: Add extra delay to e2e tests after remix page load. --- test/e2e/beta/metamask-beta-ui.spec.js | 1 + 1 file changed, 1 insertion(+) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 9711bf821..21578ae36 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -423,6 +423,7 @@ describe('MetaMask', function () { const byFilePanel = By.css('#filepanel') await driver.wait(until.elementLocated(byFilePanel)) + await delay(regularDelayMs) const newContractButton = await findElement(driver, By.css('.fa-plus-circle')) await newContractButton.click() -- cgit From c343a1254383dbc55c557f1facedbdfe0784e3e4 Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 22 Jun 2018 09:43:01 -0230 Subject: Use locally served dapp to test contract calls in e2e beta tests --- test/e2e/beta/contract-test/contract.js | 61 ++++++++++ test/e2e/beta/contract-test/index.html | 8 ++ test/e2e/beta/helpers.js | 33 +----- test/e2e/beta/metamask-beta-ui.spec.js | 198 +++++++++----------------------- test/e2e/beta/run-all.sh | 4 +- 5 files changed, 130 insertions(+), 174 deletions(-) create mode 100644 test/e2e/beta/contract-test/contract.js create mode 100644 test/e2e/beta/contract-test/index.html (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/contract-test/contract.js b/test/e2e/beta/contract-test/contract.js new file mode 100644 index 000000000..19c29e5c1 --- /dev/null +++ b/test/e2e/beta/contract-test/contract.js @@ -0,0 +1,61 @@ +/* +The `piggybankContract` is compiled from: + + pragma solidity ^0.4.0; + contract PiggyBank { + + uint private balance; + address public owner; + + function PiggyBank() public { + owner = msg.sender; + balance = 0; + } + + function deposit() public payable returns (uint) { + balance += msg.value; + return balance; + } + + function withdraw(uint withdrawAmount) public returns (uint remainingBal) { + require(msg.sender == owner); + balance -= withdrawAmount; + + msg.sender.transfer(withdrawAmount); + + return balance; + } + } +*/ + +var piggybankContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"withdrawAmount","type":"uint256"}],"name":"withdraw","outputs":[{"name":"remainingBal","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]); + +deployButton.addEventListener('click', function (event) { + + var piggybank = piggybankContract.new( + { + from: web3.eth.accounts[0], + data: '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808190555061023b806100686000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461005c5780638da5cb5b1461009d578063d0e30db0146100f4575b600080fd5b34801561006857600080fd5b5061008760048036038101908080359060200190929190505050610112565b6040518082815260200191505060405180910390f35b3480156100a957600080fd5b506100b26101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100fc6101f6565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561017057600080fd5b8160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101c5573d6000803e3d6000fd5b506000549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003460008082825401925050819055506000549050905600a165627a7a72305820f237db3ec816a52589d82512117bc85bc08d3537683ffeff9059108caf3e5d400029', + gas: '4700000' + }, function (e, contract){ + console.log(e, contract); + if (typeof contract.address !== 'undefined') { + console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); + + console.log(`contract`, contract); + + depositButton.addEventListener('click', function (event) { + contract.deposit({ from: web3.eth.accounts[0], value: '0x29a2241af62c0000' }, function (result) { + console.log(result) + }) + }) + + withdrawButton.addEventListener('click', function (event) { + contract.withdraw('0xde0b6b3a7640000', { from: web3.eth.accounts[0] }, function (result) { + console.log(result) + }) + }) + } + }) + +}) \ No newline at end of file diff --git a/test/e2e/beta/contract-test/index.html b/test/e2e/beta/contract-test/index.html new file mode 100644 index 000000000..0868633f7 --- /dev/null +++ b/test/e2e/beta/contract-test/index.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/test/e2e/beta/helpers.js b/test/e2e/beta/helpers.js index c1080e8db..fcc3e96d6 100644 --- a/test/e2e/beta/helpers.js +++ b/test/e2e/beta/helpers.js @@ -4,34 +4,6 @@ const pify = require('pify') const {until} = require('selenium-webdriver') const { delay } = require('../func') -const testContract = ` - pragma solidity ^0.4.0; - contract PiggyBank { - - uint private balance; - address public owner; - - function PiggyBank() public { - owner = msg.sender; - balance = 0; - } - - function deposit() public payable returns (uint) { - balance += msg.value; - return balance; - } - - function withdraw(uint withdrawAmount) public returns (uint remainingBal) { - require(msg.sender == owner); - balance -= withdrawAmount; - - msg.sender.transfer(withdrawAmount); - - return balance; - } - } -` - module.exports = { checkBrowserForConsoleErrors, loadExtension, @@ -39,7 +11,6 @@ module.exports = { findElement, findElements, openNewPage, - testContract, } async function loadExtension (driver, extensionId) { @@ -101,8 +72,8 @@ async function openNewPage (driver, url) { await delay(1000) const handles = await driver.getAllWindowHandles() - const lastHandle = handles.pop() - await driver.switchTo().window(lastHandle) + const secondHandle = handles[1] + await driver.switchTo().window(secondHandle) await driver.get(url) await delay(1000) diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 21578ae36..d5f41a6ef 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -16,7 +16,6 @@ const { checkBrowserForConsoleErrors, loadExtension, verboseReportOnFailure, - testContract, openNewPage, } = require('./helpers') @@ -417,45 +416,24 @@ describe('MetaMask', function () { }) }) - describe('Deploy contract and call contract method from Remix', () => { - it('writes a contract to remix', async () => { - await openNewPage(driver, 'https://remix.ethereum.org/') + describe('Deploy contract and call contract methods', () => { + let extension + let contractTestPage + it('confirms a deploy contract transaction', async () => { + await openNewPage(driver, 'http://127.0.0.1:8080/'); - const byFilePanel = By.css('#filepanel') - await driver.wait(until.elementLocated(byFilePanel)) + [extension, contractTestPage] = await driver.getAllWindowHandles() await delay(regularDelayMs) - const newContractButton = await findElement(driver, By.css('.fa-plus-circle')) - await newContractButton.click() + const deployContractButton = await findElement(driver, By.css('#deployButton')) + await deployContractButton.click() await delay(regularDelayMs) - const modalFooterOkay = await findElement(driver, By.css('#modal-footer-ok')) - await modalFooterOkay.click() - await delay(regularDelayMs) - - await driver.executeScript('window.document.getElementById("input").editor.session.setValue(arguments[0])', testContract) - await delay(regularDelayMs) - }) - - it('compiles the contract', async () => { - const [extension, remix] = await driver.getAllWindowHandles() - - const compileButton = await findElement(driver, By.css('#compile')) - compileButton.click() - const byOption = By.xpath(`//option[contains(text(), 'PiggyBank')]`) - await driver.wait(until.elementLocated(byOption, 10000)) - await delay(regularDelayMs) - - const runTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Run')]`)) - await runTab.click() - await delay(regularDelayMs) - - const deployButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Deploy')]`)) - await deployButton.click() + await driver.switchTo().window(extension) await delay(regularDelayMs) - await driver.switchTo().window(extension) - await loadExtension(driver, extensionId) + const txListItem = await findElement(driver, By.css('.tx-list-item')) + await txListItem.click() await delay(regularDelayMs) const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) @@ -469,17 +447,19 @@ describe('MetaMask', function () { assert.equal(await txAccounts[0].getText(), 'Contract Deployment') }) - it('calls and confirms a contract method', async () => { - const [extension, remix] = await driver.getAllWindowHandles() - await driver.switchTo().window(remix) + it('calls and confirms a contract method where ETH is sent', async () => { + await driver.switchTo().window(contractTestPage) await delay(regularDelayMs) - const depositButton = await findElement(driver, By.xpath(`//button[contains(text(), 'deposit')]`)) + const depositButton = await findElement(driver, By.css('#depositButton')) await depositButton.click() await delay(regularDelayMs) await driver.switchTo().window(extension) - await loadExtension(driver, extensionId) + await delay(regularDelayMs) + + const txListItem = await findElement(driver, By.css('.tx-list-item')) + await txListItem.click() await delay(regularDelayMs) // Set the gas limit @@ -509,14 +489,49 @@ describe('MetaMask', function () { const txStatuses = await findElements(driver, By.css('.tx-list-status')) await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) + const txValues = await findElement(driver, By.css('.tx-list-value')) + await driver.wait(until.elementTextMatches(txValues, /3\sETH/), 10000) + const txAccounts = await findElements(driver, By.css('.tx-list-account')) const firstTxAddress = await txAccounts[0].getText() assert(firstTxAddress.match(/^0x\w{8}\.{3}\w{4}$/)) + }) + + it('calls and confirms a contract method where ETH is received', async () => { + await driver.switchTo().window(contractTestPage) + await delay(regularDelayMs) + + const withdrawButton = await findElement(driver, By.css('#withdrawButton')) + await withdrawButton.click() + await delay(regularDelayMs) + + await driver.switchTo().window(extension) + await delay(regularDelayMs) + + const txListItem = await findElement(driver, By.css('.tx-list-item')) + await txListItem.click() + await delay(regularDelayMs) + + const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) + await confirmButton.click() + await delay(regularDelayMs) + + const txStatuses = await findElements(driver, By.css('.tx-list-status')) + await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) - await driver.switchTo().window(remix) - await driver.executeScript("window.onbeforeunload = function() {};") + const txValues = await findElement(driver, By.css('.tx-list-value')) + await driver.wait(until.elementTextMatches(txValues, /0\sETH/), 10000) + + await driver.switchTo().window(contractTestPage) await driver.close() await driver.switchTo().window(extension) + }) + + it('renders the correct ETH balance', async () => { + const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) + await driver.wait(until.elementTextMatches(balance, /^86.*ETH.*$/), 10000) + const tokenAmount = await balance.getText() + assert.ok(/^86.*ETH.*$/.test(tokenAmount)) await delay(regularDelayMs) }) }) @@ -719,112 +734,13 @@ describe('MetaMask', function () { it('finds the transaction in the transactions list', async function () { const transactions = await findElements(driver, By.css('.tx-list-item')) - assert.equal(transactions.length, 5) - - const txValues = await findElements(driver, By.css('.tx-list-value')) - assert.equal(txValues.length, 5) - assert.equal(await txValues[0].getText(), '26 TST') - const txStatuses = await findElements(driver, By.css('.tx-list-status')) - await driver.wait(until.elementTextMatches(txStatuses[1], /Confirmed/)) - - const tokenBalanceAmount = await findElement(driver, By.css('.token-balance__amount')) - assert.equal(tokenBalanceAmount.getText(), '24 TST') - }) - }) - - describe('Send token from inside MetaMask', () => { - let gasModal - it('starts to send a transaction', async function () { - const sendButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Send')]`)) - await sendButton.click() - await delay(regularDelayMs) - - const inputAddress = await findElement(driver, By.css('input[placeholder="Recipient Address"]')) - const inputAmount = await findElement(driver, By.css('.currency-display__input')) - await inputAddress.sendKeys('0x2f318C334780961FB129D2a6c30D0763d9a5C970') - await inputAmount.sendKeys('50') - - // Set the gas limit - const configureGas = await findElement(driver, By.css('.send-v2__gas-fee-display button')) - await configureGas.click() - await delay(regularDelayMs) - - gasModal = await driver.findElement(By.css('span .modal')) - }) - - it('customizes gas', async () => { - const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) - await gasPriceInput.clear() - await gasPriceInput.sendKeys('12.5') - await gasLimitInput.clear() - await gasLimitInput.sendKeys('56789') - - const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) - await save.click() - await delay(regularDelayMs) - }) - - it('transitions to the confirm screen', async () => { - await driver.wait(until.stalenessOf(gasModal)) - - // Continue to next screen - const nextScreen = await findElement(driver, By.xpath(`//button[contains(text(), 'Next')]`)) - await nextScreen.click() - await delay(regularDelayMs) - }) - - it('submits the transaction', async function () { - const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) - await confirmButton.click() - await delay(regularDelayMs) - }) - - it('finds the transaction in the transactions list', async function () { - const transactions = await findElements(driver, By.css('.tx-list-item')) - assert.equal(transactions.length, 1) - - const txValues = await findElements(driver, By.css('.tx-list-value')) - assert.equal(txValues.length, 1) - assert.equal(await txValues[0].getText(), '50 TST') - const txStatuses = await findElements(driver, By.css('.tx-list-status')) - await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) - }) - }) - - describe('Send a custom token from TokenFactory', () => { - it('sends an already created token', async () => { - await driver.executeScript(`window.open("https://tokenfactory.surge.sh/#/token/${tokenAddress}")`) - await delay(waitingNewPageDelayMs) - - const [extension, tokenFactory] = await driver.getAllWindowHandles() - await driver.switchTo().window(tokenFactory) - const [ - transferToAddress, - transferToAmount, - ] = await findElements(driver, By.css('.form-control')) - - await transferToAddress.sendKeys('0x2f318C334780961FB129D2a6c30D0763d9a5C970') - await transferToAmount.sendKeys('26') - - const transferAmountButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Transfer Amount')]`)) - await transferAmountButton.click() - await delay(regularDelayMs) - - await driver.switchTo().window(extension) - await loadExtension(driver, extensionId) - await delay(regularDelayMs) - - const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) - await confirmButton.click() - await delay(regularDelayMs) - }) it('finds the transaction in the transactions list', async function () { const transactions = await findElements(driver, By.css('.tx-list-item')) - assert.equal(transactions.length, 7) + assert.equal(transactions.length, 8) const txValues = await findElements(driver, By.css('.tx-list-value')) - assert.equal(txValues.length, 7) + assert.equal(txValues.length, 8) assert.equal(await txValues[0].getText(), '26 TST') const txStatuses = await findElements(driver, By.css('.tx-list-status')) await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) diff --git a/test/e2e/beta/run-all.sh b/test/e2e/beta/run-all.sh index b0b6ecca8..49b2ee4ec 100755 --- a/test/e2e/beta/run-all.sh +++ b/test/e2e/beta/run-all.sh @@ -6,5 +6,5 @@ set -o pipefail export PATH="$PATH:./node_modules/.bin" -shell-parallel -s 'npm run ganache:start' -x 'sleep 5 && mocha test/e2e/beta/metamask-beta-ui.spec' -shell-parallel -s 'npm run ganache:start -- -d' -x 'sleep 5 && mocha test/e2e/beta/from-import-beta-ui.spec' +shell-parallel -s 'npm run ganache:start' -x 'sleep 5 && http-server test/e2e/beta/contract-test/' -x 'sleep 5 && mocha test/e2e/beta/metamask-beta-ui.spec' +shell-parallel -s 'npm run ganache:start -- -d' -x 'sleep 5 && http-server test/e2e/beta/contract-test/' -x 'sleep 5 && mocha test/e2e/beta/from-import-beta-ui.spec' -- cgit From a6cb13422de26e7d6bcecda03fb4756d3bf6ed67 Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 22 Jun 2018 13:30:27 -0230 Subject: Wait for element text match in metamask-beta-ui e2e send token test --- test/e2e/beta/metamask-beta-ui.spec.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index d5f41a6ef..efd391003 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -661,8 +661,7 @@ describe('MetaMask', function () { const txValues = await findElements(driver, By.css('.tx-list-value')) assert.equal(txValues.length, 1) - await delay(regularDelayMs) - assert.equal(await txValues[0].getText(), '50 TST') + await driver.wait(until.elementTextMatches(txValues[0], /50\sTST/)) const txStatuses = await findElements(driver, By.css('.tx-list-status')) const tx = await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed|Failed/)) assert.equal(await tx.getText(), 'Confirmed') @@ -740,8 +739,7 @@ describe('MetaMask', function () { assert.equal(transactions.length, 8) const txValues = await findElements(driver, By.css('.tx-list-value')) - assert.equal(txValues.length, 8) - assert.equal(await txValues[0].getText(), '26 TST') + await driver.wait(until.elementTextMatches(txValues[0], /26\sTST/)) const txStatuses = await findElements(driver, By.css('.tx-list-status')) await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) -- cgit From 31bb8a0ab773449aae302a229489b5816fdb093c Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 22 Jun 2018 17:06:22 -0230 Subject: Add try catch to deal with false negative timeouts in beta e2e tests. --- test/e2e/beta/metamask-beta-ui.spec.js | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index efd391003..4f01f5b50 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -72,14 +72,20 @@ describe('MetaMask', function () { }) describe('New UI setup', async function () { + let networkSelector it('switches to first tab', async function () { const [firstTab] = await driver.getAllWindowHandles() await driver.switchTo().window(firstTab) await delay(regularDelayMs) + try { + networkSelector = await findElement(driver, By.css('#network_component')) + } catch (e) { + await loadExtension(driver, extensionId) + } + 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) @@ -177,9 +183,7 @@ describe('MetaMask', function () { await delay(regularDelayMs) }) - it('can retype the seed phrase', async () => { - const words = seedPhrase.split(' ') - + async function retypeSeedPhrase (words) { const word0 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[0]}')]`)) await word0.click() await delay(tinyDelayMs) @@ -224,9 +228,20 @@ describe('MetaMask', function () { await word10.click() await delay(tinyDelayMs) - const word11 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[11]}')]`)) - await word11.click() - await delay(tinyDelayMs) + try { + const word11 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[11]}')]`), 10000) + await word11.click() + await delay(tinyDelayMs) + } catch (e) { + await loadExtension(driver, extensionId) + await retypeSeedPhrase + } + } + + it('can retype the seed phrase', async () => { + const words = seedPhrase.split(' ') + + await retypeSeedPhrase(words) const confirm = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) await confirm.click() -- cgit From 686d14f42d249f621d4f39d274c1c7c42473fac5 Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 22 Jun 2018 17:33:22 -0230 Subject: Add timeouts to certain beta e2e driver.waits. --- test/e2e/beta/metamask-beta-ui.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 4f01f5b50..37ee99869 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -676,9 +676,9 @@ describe('MetaMask', function () { const txValues = await findElements(driver, By.css('.tx-list-value')) assert.equal(txValues.length, 1) - await driver.wait(until.elementTextMatches(txValues[0], /50\sTST/)) + await driver.wait(until.elementTextMatches(txValues[0], /50\sTST/), 10000) const txStatuses = await findElements(driver, By.css('.tx-list-status')) - const tx = await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed|Failed/)) + const tx = await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed|Failed/), 10000) assert.equal(await tx.getText(), 'Confirmed') }) }) -- cgit From 6c8f4b2dea2a46287bc2c69aef28c12d6a1110f6 Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 22 Jun 2018 19:50:00 -0230 Subject: Pass correct params to verboseReportOnFailure in beta e2e tests. --- test/e2e/beta/metamask-beta-ui.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 37ee99869..0fc61ed41 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -63,7 +63,7 @@ describe('MetaMask', function () { } } if (this.currentTest.state === 'failed') { - await verboseReportOnFailure(this.currentTest) + await verboseReportOnFailure(driver, this.currentTest) } }) -- cgit From b029085fbe2d3539fa125d23debef30d0a6aa9d3 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 26 Jun 2018 10:10:04 -0230 Subject: Disable e2e beta assertion after first token addition because of firefox / webdriver bug. --- test/e2e/beta/metamask-beta-ui.spec.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 0fc61ed41..46e8620f8 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -591,6 +591,7 @@ describe('MetaMask', function () { await driver.close() await driver.switchTo().window(extension) await loadExtension(driver, extensionId) + await driver.switchTo().window(extension) await delay(regularDelayMs) }) @@ -676,7 +677,13 @@ describe('MetaMask', function () { const txValues = await findElements(driver, By.css('.tx-list-value')) assert.equal(txValues.length, 1) - await driver.wait(until.elementTextMatches(txValues[0], /50\sTST/), 10000) + + // test cancelled on firefox until https://github.com/mozilla/geckodriver/issues/906 is resolved, + // or possibly until we use latest version of firefox in the tests + if (process.env.SELENIUM_BROWSER !== 'firefox') { + await driver.wait(until.elementTextMatches(txValues[0], /50\sTST/), 10000) + } + const txStatuses = await findElements(driver, By.css('.tx-list-status')) const tx = await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed|Failed/), 10000) assert.equal(await tx.getText(), 'Confirmed') -- cgit From a25f5483d84c160586029d1fda7e06374ab923bc Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 26 Jun 2018 12:13:28 -0230 Subject: Fix retype seed phrase button. --- test/e2e/beta/metamask-beta-ui.spec.js | 81 +++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 35 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 46e8620f8..36295adac 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -184,57 +184,68 @@ describe('MetaMask', function () { }) async function retypeSeedPhrase (words) { - const word0 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[0]}')]`)) - await word0.click() - await delay(tinyDelayMs) + try { + const word0 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[0]}')]`), 10000) - const word1 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[1]}')]`)) - await word1.click() - await delay(tinyDelayMs) + await word0.click() + await delay(tinyDelayMs) - const word2 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[2]}')]`)) - await word2.click() - await delay(tinyDelayMs) + const word1 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[1]}')]`), 10000) - const word3 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[3]}')]`)) - await word3.click() - await delay(tinyDelayMs) + await word1.click() + await delay(tinyDelayMs) - const word4 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[4]}')]`)) - await word4.click() - await delay(tinyDelayMs) + const word2 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[2]}')]`), 10000) - const word5 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[5]}')]`)) - await word5.click() - await delay(tinyDelayMs) + await word2.click() + await delay(tinyDelayMs) - const word6 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[6]}')]`)) - await word6.click() - await delay(tinyDelayMs) + const word3 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[3]}')]`), 10000) - const word7 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[7]}')]`)) - await word7.click() - await delay(tinyDelayMs) + await word3.click() + await delay(tinyDelayMs) - const word8 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[8]}')]`)) - await word8.click() - await delay(tinyDelayMs) + const word4 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[4]}')]`), 10000) - const word9 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[9]}')]`)) - await word9.click() - await delay(tinyDelayMs) + await word4.click() + await delay(tinyDelayMs) - const word10 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[10]}')]`)) - await word10.click() - await delay(tinyDelayMs) + const word5 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[5]}')]`), 10000) - try { + await word5.click() + await delay(tinyDelayMs) + + const word6 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[6]}')]`), 10000) + + await word6.click() + await delay(tinyDelayMs) + + const word7 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[7]}')]`), 10000) + + await word7.click() + await delay(tinyDelayMs) + + const word8 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[8]}')]`), 10000) + + await word8.click() + await delay(tinyDelayMs) + + const word9 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[9]}')]`), 10000) + + await word9.click() + await delay(tinyDelayMs) + + const word10 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[10]}')]`), 10000) + + await word10.click() + await delay(tinyDelayMs) + const word11 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[11]}')]`), 10000) await word11.click() await delay(tinyDelayMs) } catch (e) { await loadExtension(driver, extensionId) - await retypeSeedPhrase + await retypeSeedPhrase(words) } } -- cgit From 12266b064eff7aa42978a4414c18237a2c28dd45 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 26 Jun 2018 16:40:41 -0230 Subject: Close popup window for e2e beta token factory send test. --- test/e2e/beta/metamask-beta-ui.spec.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 36295adac..9233b9c60 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -720,8 +720,10 @@ describe('MetaMask', function () { await transferAmountButton.click() await delay(regularDelayMs) + const [,, popup] = await driver.getAllWindowHandles() + await driver.switchTo().window(popup) + await driver.close() await driver.switchTo().window(extension) - await loadExtension(driver, extensionId) await delay(regularDelayMs) // Set the gas limit @@ -748,7 +750,6 @@ describe('MetaMask', function () { if (process.env.SELENIUM_BROWSER === 'firefox') { await gasLimitInput.sendKeys(Key.BACK_SPACE) } - await delay(tinyDelayMs) const save = await findElement(driver, By.css('.send-v2__customize-gas__save')) await save.click() -- cgit From 9cc358a429b9fee5da4127dfb06f6020d4191d27 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 26 Jun 2018 23:44:38 -0230 Subject: await all clicks in e2e beta tests. --- test/e2e/beta/metamask-beta-ui.spec.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 9233b9c60..a8b273439 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -726,6 +726,10 @@ describe('MetaMask', function () { await driver.switchTo().window(extension) await delay(regularDelayMs) + const [txListItem] = await findElements(driver, By.css('.tx-list-item')) + await txListItem.click() + await delay(regularDelayMs) + // Set the gas limit const configureGas = await driver.wait(until.elementLocated(By.css('.send-v2__gas-fee-display button'))) await configureGas.click() @@ -767,19 +771,17 @@ describe('MetaMask', function () { it('finds the transaction in the transactions list', async function () { const transactions = await findElements(driver, By.css('.tx-list-item')) - - it('finds the transaction in the transactions list', async function () { - const transactions = await findElements(driver, By.css('.tx-list-item')) - assert.equal(transactions.length, 8) + assert.equal(transactions.length, 2) const txValues = await findElements(driver, By.css('.tx-list-value')) await driver.wait(until.elementTextMatches(txValues[0], /26\sTST/)) const txStatuses = await findElements(driver, By.css('.tx-list-status')) await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) + // const walletBalance = await findElement(driver, By.css('.wallet-balance')) + const tokenListItems = await findElements(driver, By.css('.token-list-item')) - tokenListItems[0].click() - await delay(regularDelayMs) + await tokenListItems[0].click() const tokenBalanceAmount = await findElement(driver, By.css('.token-balance__amount')) assert.equal(await tokenBalanceAmount.getText(), '24') @@ -789,18 +791,18 @@ describe('MetaMask', function () { describe('Hide token', () => { it('hides the token when clicked', async () => { const [hideTokenEllipsis] = await findElements(driver, By.css('.token-list-item__ellipsis')) - hideTokenEllipsis.click() + await hideTokenEllipsis.click() const byTokenMenuDropdownOption = By.css('.menu__item--clickable') const tokenMenuDropdownOption = await driver.wait(until.elementLocated(byTokenMenuDropdownOption)) - tokenMenuDropdownOption.click() + await tokenMenuDropdownOption.click() const confirmHideModal = await findElement(driver, By.css('span .modal')) const byHideTokenConfirmationButton = By.css('.hide-token-confirmation__button') const hideTokenConfirmationButton = await driver.wait(until.elementLocated(byHideTokenConfirmationButton)) - hideTokenConfirmationButton.click() + await hideTokenConfirmationButton.click() await driver.wait(until.stalenessOf(confirmHideModal)) }) -- cgit From 669f2437c7e65f0a6e7370bb3e265b3e4177e8d8 Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 27 Jun 2018 08:01:37 -0230 Subject: Switch to eth and back before asserting on token balance (e2e beta token tests). --- test/e2e/beta/metamask-beta-ui.spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index a8b273439..12a194e3a 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -778,7 +778,8 @@ describe('MetaMask', function () { const txStatuses = await findElements(driver, By.css('.tx-list-status')) await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) - // const walletBalance = await findElement(driver, By.css('.wallet-balance')) + const walletBalance = await findElement(driver, By.css('.wallet-balance')) + await walletBalance.click() const tokenListItems = await findElements(driver, By.css('.token-list-item')) await tokenListItems[0].click() -- cgit From bec3fa3dbf88699bc3db48b58beb5220914593af Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 27 Jun 2018 12:00:29 -0230 Subject: Fix add existing token test (e2e beta tests). --- test/e2e/beta/metamask-beta-ui.spec.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 12a194e3a..44610975a 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -836,9 +836,7 @@ describe('MetaMask', function () { it('renders the balance for the chosen token', async () => { const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) - await driver.wait(until.elementTextIs(balance, '0BAT')) - const tokenAmount = await balance.getText() - assert.equal(tokenAmount, '0BAT') + await driver.wait(until.elementTextMatches(balance, /0\sBAT/)) await delay(regularDelayMs) }) }) -- cgit From 0cdfbb450364d986bd9bee680f16b8a3ab236fbe Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 27 Jun 2018 13:50:44 -0230 Subject: Update condition for backspace in customize gas step of token factory send test (e2e beta). --- test/e2e/beta/metamask-beta-ui.spec.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 44610975a..669cc8fce 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -751,7 +751,10 @@ describe('MetaMask', function () { await gasLimitInput.sendKeys(Key.chord(Key.CONTROL, 'a')) await gasLimitInput.sendKeys('60000') await gasLimitInput.sendKeys(Key.chord(Key.CONTROL, 'e')) - if (process.env.SELENIUM_BROWSER === 'firefox') { + + // Needed for different behaviour of input in different versions of firefox + const gasLimitInputValue = await gasLimitInput.getAttribute('value') + if (gasLimitInputValue === '600001') { await gasLimitInput.sendKeys(Key.BACK_SPACE) } -- cgit From 8a96dc0c48f966f0a222ddc0b95e3385468b1e12 Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 27 Jun 2018 14:40:16 -0230 Subject: Turn off failing e2e beta assertion in firefox until bugs in webdriver/geckodriver are resolved. --- test/e2e/beta/metamask-beta-ui.spec.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 669cc8fce..387d8c348 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -787,8 +787,12 @@ describe('MetaMask', function () { const tokenListItems = await findElements(driver, By.css('.token-list-item')) await tokenListItems[0].click() - const tokenBalanceAmount = await findElement(driver, By.css('.token-balance__amount')) - assert.equal(await tokenBalanceAmount.getText(), '24') + // test cancelled on firefox until https://github.com/mozilla/geckodriver/issues/906 is resolved, + // or possibly until we use latest version of firefox in the tests + if (process.env.SELENIUM_BROWSER !== 'firefox') { + const tokenBalanceAmount = await findElement(driver, By.css('.token-balance__amount')) + assert.equal(await tokenBalanceAmount.getText(), '24') + } }) }) -- cgit From f824a2982acec08241302b84d893e32e5c5f2dce Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 28 Jun 2018 10:16:36 -0230 Subject: Use supersonic instead of httpserver to serve local dapp (e2e beta tests) --- test/e2e/beta/run-all.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/run-all.sh b/test/e2e/beta/run-all.sh index 49b2ee4ec..493e1360a 100755 --- a/test/e2e/beta/run-all.sh +++ b/test/e2e/beta/run-all.sh @@ -6,5 +6,5 @@ set -o pipefail export PATH="$PATH:./node_modules/.bin" -shell-parallel -s 'npm run ganache:start' -x 'sleep 5 && http-server test/e2e/beta/contract-test/' -x 'sleep 5 && mocha test/e2e/beta/metamask-beta-ui.spec' -shell-parallel -s 'npm run ganache:start -- -d' -x 'sleep 5 && http-server test/e2e/beta/contract-test/' -x 'sleep 5 && mocha test/e2e/beta/from-import-beta-ui.spec' +shell-parallel -s 'npm run ganache:start' -x 'sleep 5 && superstatic test/e2e/beta/contract-test/ --port 8080 --host 127.0.0.1' -x 'sleep 5 && mocha test/e2e/beta/metamask-beta-ui.spec' +shell-parallel -s 'npm run ganache:start -- -d' -x 'sleep 5 && superstatic test/e2e/beta/contract-test/ --port 8080 --host 127.0.0.1' -x 'sleep 5 && mocha test/e2e/beta/from-import-beta-ui.spec' -- cgit From c5a16af83141c6488432cec5ba6de09f5cd39714 Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 29 Jun 2018 08:56:51 -0230 Subject: Improve checks for closing info page on app installation in e2e beta tests. --- test/e2e/beta/metamask-beta-ui.spec.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 387d8c348..0f424abcc 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -100,15 +100,21 @@ describe('MetaMask', function () { await delay(regularDelayMs) // Close all other tabs - let [oldUi, infoPage, newUi] = await driver.getAllWindowHandles() - newUi = newUi || infoPage + let [oldUi, tab1, tab2] = await driver.getAllWindowHandles() await driver.switchTo().window(oldUi) await driver.close() - if (infoPage !== newUi) { - await driver.switchTo().window(infoPage) + + await driver.switchTo().window(tab1) + const tab1Url = await driver.getCurrentUrl() + if (tab1Url.match(/metamask.io/)) { + await driver.switchTo().window(tab1) + await driver.close() + await driver.switchTo().window(tab2) + } else if (tab2) { + await driver.switchTo().window(tab2) await driver.close() + await driver.switchTo().window(tab1) } - await driver.switchTo().window(newUi) await delay(regularDelayMs) const continueBtn = await findElement(driver, By.css('.welcome-screen__button')) -- cgit From a8f745f9fe74751b87f500af3857b66d4c80f45e Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Mon, 2 Jul 2018 18:49:33 -0400 Subject: eslint --fix . --- test/e2e/beta/contract-test/contract.js | 20 ++++++++++---------- test/e2e/beta/from-import-beta-ui.spec.js | 2 +- test/e2e/beta/metamask-beta-ui.spec.js | 12 ++++++------ 3 files changed, 17 insertions(+), 17 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/contract-test/contract.js b/test/e2e/beta/contract-test/contract.js index 19c29e5c1..f1ca006b1 100644 --- a/test/e2e/beta/contract-test/contract.js +++ b/test/e2e/beta/contract-test/contract.js @@ -28,21 +28,21 @@ The `piggybankContract` is compiled from: } */ -var piggybankContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"withdrawAmount","type":"uint256"}],"name":"withdraw","outputs":[{"name":"remainingBal","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]); +var piggybankContract = web3.eth.contract([{'constant': false, 'inputs': [{'name': 'withdrawAmount', 'type': 'uint256'}], 'name': 'withdraw', 'outputs': [{'name': 'remainingBal', 'type': 'uint256'}], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'function'}, {'constant': true, 'inputs': [], 'name': 'owner', 'outputs': [{'name': '', 'type': 'address'}], 'payable': false, 'stateMutability': 'view', 'type': 'function'}, {'constant': false, 'inputs': [], 'name': 'deposit', 'outputs': [{'name': '', 'type': 'uint256'}], 'payable': true, 'stateMutability': 'payable', 'type': 'function'}, {'inputs': [], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'constructor'}]) deployButton.addEventListener('click', function (event) { - + var piggybank = piggybankContract.new( { - from: web3.eth.accounts[0], - data: '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808190555061023b806100686000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461005c5780638da5cb5b1461009d578063d0e30db0146100f4575b600080fd5b34801561006857600080fd5b5061008760048036038101908080359060200190929190505050610112565b6040518082815260200191505060405180910390f35b3480156100a957600080fd5b506100b26101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100fc6101f6565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561017057600080fd5b8160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101c5573d6000803e3d6000fd5b506000549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003460008082825401925050819055506000549050905600a165627a7a72305820f237db3ec816a52589d82512117bc85bc08d3537683ffeff9059108caf3e5d400029', - gas: '4700000' - }, function (e, contract){ - console.log(e, contract); + from: web3.eth.accounts[0], + data: '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808190555061023b806100686000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461005c5780638da5cb5b1461009d578063d0e30db0146100f4575b600080fd5b34801561006857600080fd5b5061008760048036038101908080359060200190929190505050610112565b6040518082815260200191505060405180910390f35b3480156100a957600080fd5b506100b26101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100fc6101f6565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561017057600080fd5b8160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101c5573d6000803e3d6000fd5b506000549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003460008082825401925050819055506000549050905600a165627a7a72305820f237db3ec816a52589d82512117bc85bc08d3537683ffeff9059108caf3e5d400029', + gas: '4700000', + }, function (e, contract) { + console.log(e, contract) if (typeof contract.address !== 'undefined') { - console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); + console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash) - console.log(`contract`, contract); + console.log(`contract`, contract) depositButton.addEventListener('click', function (event) { contract.deposit({ from: web3.eth.accounts[0], value: '0x29a2241af62c0000' }, function (result) { @@ -58,4 +58,4 @@ deployButton.addEventListener('click', function (event) { } }) -}) \ No newline at end of file +}) diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js index 38fdedcec..3198d5b78 100644 --- a/test/e2e/beta/from-import-beta-ui.spec.js +++ b/test/e2e/beta/from-import-beta-ui.spec.js @@ -322,5 +322,5 @@ describe('Using MetaMask with an existing account', function () { await delay(regularDelayMs) }) }) - + }) diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 0f424abcc..8bef08709 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -100,7 +100,7 @@ describe('MetaMask', function () { await delay(regularDelayMs) // Close all other tabs - let [oldUi, tab1, tab2] = await driver.getAllWindowHandles() + const [oldUi, tab1, tab2] = await driver.getAllWindowHandles() await driver.switchTo().window(oldUi) await driver.close() @@ -245,7 +245,7 @@ describe('MetaMask', function () { await word10.click() await delay(tinyDelayMs) - + const word11 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[11]}')]`), 10000) await word11.click() await delay(tinyDelayMs) @@ -281,7 +281,7 @@ describe('MetaMask', function () { await driver.findElement(By.css('.qr-wrapper')).isDisplayed() await delay(regularDelayMs) - let accountModal = await driver.findElement(By.css('span .modal')) + const accountModal = await driver.findElement(By.css('span .modal')) await driver.executeScript("document.querySelector('.account-modal-close').click()") @@ -499,7 +499,7 @@ describe('MetaMask', function () { await configureGas.click() await delay(regularDelayMs) - let gasModal = await driver.findElement(By.css('span .modal')) + const gasModal = await driver.findElement(By.css('span .modal')) await driver.wait(until.elementLocated(By.css('.send-v2__customize-gas__title'))) const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) @@ -700,7 +700,7 @@ describe('MetaMask', function () { if (process.env.SELENIUM_BROWSER !== 'firefox') { await driver.wait(until.elementTextMatches(txValues[0], /50\sTST/), 10000) } - + const txStatuses = await findElements(driver, By.css('.tx-list-status')) const tx = await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed|Failed/), 10000) assert.equal(await tx.getText(), 'Confirmed') @@ -759,7 +759,7 @@ describe('MetaMask', function () { await gasLimitInput.sendKeys(Key.chord(Key.CONTROL, 'e')) // Needed for different behaviour of input in different versions of firefox - const gasLimitInputValue = await gasLimitInput.getAttribute('value') + const gasLimitInputValue = await gasLimitInput.getAttribute('value') if (gasLimitInputValue === '600001') { await gasLimitInput.sendKeys(Key.BACK_SPACE) } -- cgit From cb71896a8fd2f1a49d462774ff15217e2febaf86 Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Mon, 2 Jul 2018 19:51:27 -0400 Subject: fix warnings for e2e tests --- test/e2e/beta/contract-test/contract.js | 3 ++- test/e2e/beta/from-import-beta-ui.spec.js | 12 +++++------- test/e2e/beta/metamask-beta-ui.spec.js | 3 +-- 3 files changed, 8 insertions(+), 10 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/contract-test/contract.js b/test/e2e/beta/contract-test/contract.js index f1ca006b1..78ab0cfc6 100644 --- a/test/e2e/beta/contract-test/contract.js +++ b/test/e2e/beta/contract-test/contract.js @@ -29,10 +29,11 @@ The `piggybankContract` is compiled from: */ var piggybankContract = web3.eth.contract([{'constant': false, 'inputs': [{'name': 'withdrawAmount', 'type': 'uint256'}], 'name': 'withdraw', 'outputs': [{'name': 'remainingBal', 'type': 'uint256'}], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'function'}, {'constant': true, 'inputs': [], 'name': 'owner', 'outputs': [{'name': '', 'type': 'address'}], 'payable': false, 'stateMutability': 'view', 'type': 'function'}, {'constant': false, 'inputs': [], 'name': 'deposit', 'outputs': [{'name': '', 'type': 'uint256'}], 'payable': true, 'stateMutability': 'payable', 'type': 'function'}, {'inputs': [], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'constructor'}]) +let deployButton, depositButton, withdrawButton deployButton.addEventListener('click', function (event) { - var piggybank = piggybankContract.new( + piggybankContract.new( { from: web3.eth.accounts[0], data: '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808190555061023b806100686000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461005c5780638da5cb5b1461009d578063d0e30db0146100f4575b600080fd5b34801561006857600080fd5b5061008760048036038101908080359060200190929190505050610112565b6040518082815260200191505060405180910390f35b3480156100a957600080fd5b506100b26101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100fc6101f6565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561017057600080fd5b8160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101c5573d6000803e3d6000fd5b506000549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003460008082825401925050819055506000549050905600a165627a7a72305820f237db3ec816a52589d82512117bc85bc08d3537683ffeff9059108caf3e5d400029', diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js index 3198d5b78..b396dc5b9 100644 --- a/test/e2e/beta/from-import-beta-ui.spec.js +++ b/test/e2e/beta/from-import-beta-ui.spec.js @@ -12,7 +12,6 @@ const { } = require('../func') const { checkBrowserForConsoleErrors, - loadExtension, verboseReportOnFailure, findElement, findElements, @@ -22,14 +21,12 @@ const { describe('Using MetaMask with an existing account', function () { let extensionId let driver - let tokenAddress 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) @@ -98,15 +95,16 @@ describe('Using MetaMask with an existing account', function () { await delay(regularDelayMs) // Close all other tabs - let [oldUi, infoPage, newUi] = await driver.getAllWindowHandles() - newUi = newUi || infoPage + const [oldUi, infoPage, newUi] = await driver.getAllWindowHandles() + + const newUiOrInfoPage = newUi || infoPage await driver.switchTo().window(oldUi) await driver.close() - if (infoPage !== newUi) { + if (infoPage !== newUiOrInfoPage) { await driver.switchTo().window(infoPage) await driver.close() } - await driver.switchTo().window(newUi) + await driver.switchTo().window(newUiOrInfoPage) await delay(regularDelayMs) const continueBtn = await findElement(driver, By.css('.welcome-screen__button')) diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 8bef08709..5f270b52b 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -28,7 +28,6 @@ describe('MetaMask', function () { const tinyDelayMs = 1000 const regularDelayMs = tinyDelayMs * 2 const largeDelayMs = regularDelayMs * 2 - const waitingNewPageDelayMs = regularDelayMs * 30 this.timeout(0) this.bail(true) @@ -712,7 +711,7 @@ describe('MetaMask', function () { it('sends an already created token', async () => { openNewPage(driver, `https://tokenfactory.surge.sh/#/token/${tokenAddress}`) - const [extension, tokenFactory] = await driver.getAllWindowHandles() + const [extension] = await driver.getAllWindowHandles() const [ transferToAddress, -- cgit From 53f1072ff467d6284d1fc3143330961749baaf5e Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Mon, 2 Jul 2018 22:20:51 -0400 Subject: fix contract-test --- test/e2e/beta/contract-test/contract.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/contract-test/contract.js b/test/e2e/beta/contract-test/contract.js index 78ab0cfc6..18c866f21 100644 --- a/test/e2e/beta/contract-test/contract.js +++ b/test/e2e/beta/contract-test/contract.js @@ -29,11 +29,13 @@ The `piggybankContract` is compiled from: */ var piggybankContract = web3.eth.contract([{'constant': false, 'inputs': [{'name': 'withdrawAmount', 'type': 'uint256'}], 'name': 'withdraw', 'outputs': [{'name': 'remainingBal', 'type': 'uint256'}], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'function'}, {'constant': true, 'inputs': [], 'name': 'owner', 'outputs': [{'name': '', 'type': 'address'}], 'payable': false, 'stateMutability': 'view', 'type': 'function'}, {'constant': false, 'inputs': [], 'name': 'deposit', 'outputs': [{'name': '', 'type': 'uint256'}], 'payable': true, 'stateMutability': 'payable', 'type': 'function'}, {'inputs': [], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'constructor'}]) -let deployButton, depositButton, withdrawButton +const deployButton = document.getElementById('deployButton') +const depositButton = document.getElementById('depositButton') +const withdrawButton = document.getElementById('withdrawButton') -deployButton.addEventListener('click', function (event) { +deployButton.addEventListener('click', async function (event) { - piggybankContract.new( + var piggybank = await piggybankContract.new( { from: web3.eth.accounts[0], data: '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808190555061023b806100686000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461005c5780638da5cb5b1461009d578063d0e30db0146100f4575b600080fd5b34801561006857600080fd5b5061008760048036038101908080359060200190929190505050610112565b6040518082815260200191505060405180910390f35b3480156100a957600080fd5b506100b26101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100fc6101f6565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561017057600080fd5b8160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101c5573d6000803e3d6000fd5b506000549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003460008082825401925050819055506000549050905600a165627a7a72305820f237db3ec816a52589d82512117bc85bc08d3537683ffeff9059108caf3e5d400029', @@ -59,4 +61,6 @@ deployButton.addEventListener('click', function (event) { } }) + console.log(piggybank) + }) -- cgit From f262f0ea64e1e803d8dcd9a31f92cffe81d27b3d Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 22 Jun 2018 14:41:18 -0230 Subject: Update import from seed screen on new ui. --- test/e2e/beta/metamask-beta-ui.spec.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 5f270b52b..b07b1ecd7 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -355,9 +355,12 @@ describe('MetaMask', function () { await seedTextArea.sendKeys(testSeedPhrase) await delay(regularDelayMs) - await driver.findElement(By.id('password-box')).sendKeys('correct horse battery staple') - await driver.findElement(By.id('password-box-confirm')).sendKeys('correct horse battery staple') - await driver.findElement(By.css('button:nth-child(2)')).click() + const passwordInputs = await driver.findElements(By.css('input')) + await delay(regularDelayMs) + + passwordInputs[0].sendKeys('correct horse battery staple') + passwordInputs[1].sendKeys('correct horse battery staple') + await driver.findElement(By.css('.first-time-flow__button')).click() await delay(regularDelayMs) }) -- cgit From 1a0a701de0fe97386a5acb666c4a4e123f27af94 Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 6 Jul 2018 20:25:30 -0230 Subject: Handles window indeterminancy issues for external dapps in e2e beta tests. --- test/e2e/beta/contract-test/contract.js | 114 ++++++++++++++++----- test/e2e/beta/contract-test/index.html | 33 +++++- test/e2e/beta/helpers.js | 48 ++++++++- test/e2e/beta/metamask-beta-ui.spec.js | 174 +++++++++++++++++--------------- 4 files changed, 255 insertions(+), 114 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/contract-test/contract.js b/test/e2e/beta/contract-test/contract.js index 18c866f21..8af008dce 100644 --- a/test/e2e/beta/contract-test/contract.js +++ b/test/e2e/beta/contract-test/contract.js @@ -32,35 +32,103 @@ var piggybankContract = web3.eth.contract([{'constant': false, 'inputs': [{'name const deployButton = document.getElementById('deployButton') const depositButton = document.getElementById('depositButton') const withdrawButton = document.getElementById('withdrawButton') +const sendButton = document.getElementById('sendButton') +const createToken = document.getElementById('createToken') +const transferTokens = document.getElementById('transferTokens') +const approveTokens = document.getElementById('approveTokens') deployButton.addEventListener('click', async function (event) { + var piggybank = await piggybankContract.new( + { + from: web3.eth.accounts[0], + data: '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808190555061023b806100686000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461005c5780638da5cb5b1461009d578063d0e30db0146100f4575b600080fd5b34801561006857600080fd5b5061008760048036038101908080359060200190929190505050610112565b6040518082815260200191505060405180910390f35b3480156100a957600080fd5b506100b26101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100fc6101f6565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561017057600080fd5b8160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101c5573d6000803e3d6000fd5b506000549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003460008082825401925050819055506000549050905600a165627a7a72305820f237db3ec816a52589d82512117bc85bc08d3537683ffeff9059108caf3e5d400029', + gas: '4700000', + }, function (e, contract) { + console.log(e, contract) + if (typeof contract.address !== 'undefined') { + console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash) - var piggybank = await piggybankContract.new( - { - from: web3.eth.accounts[0], - data: '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808190555061023b806100686000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461005c5780638da5cb5b1461009d578063d0e30db0146100f4575b600080fd5b34801561006857600080fd5b5061008760048036038101908080359060200190929190505050610112565b6040518082815260200191505060405180910390f35b3480156100a957600080fd5b506100b26101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100fc6101f6565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561017057600080fd5b8160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101c5573d6000803e3d6000fd5b506000549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003460008082825401925050819055506000549050905600a165627a7a72305820f237db3ec816a52589d82512117bc85bc08d3537683ffeff9059108caf3e5d400029', - gas: '4700000', - }, function (e, contract) { - console.log(e, contract) - if (typeof contract.address !== 'undefined') { - console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash) - - console.log(`contract`, contract) - - depositButton.addEventListener('click', function (event) { - contract.deposit({ from: web3.eth.accounts[0], value: '0x29a2241af62c0000' }, function (result) { - console.log(result) - }) + console.log(`contract`, contract) + + depositButton.addEventListener('click', function (event) { + contract.deposit({ from: web3.eth.accounts[0], value: '0x3782dace9d900000' }, function (result) { + console.log(result) + }) + }) + + withdrawButton.addEventListener('click', function (event) { + contract.withdraw('0xde0b6b3a7640000', { from: web3.eth.accounts[0] }, function (result) { + console.log(result) }) + }) + } + }) + + console.log(piggybank) +}) + +sendButton.addEventListener('click', function (event) { + web3.eth.sendTransaction({ + from: web3.eth.accounts[0], + to: '0x2f318C334780961FB129D2a6c30D0763d9a5C970', + value: '0x29a2241af62c0000', + gas: 21000, + gasPrice: 20000000000, + }, (result) => { + console.log(result) + }) +}) + + +createToken.addEventListener('click', async function (event) { + var _initialAmount = 100 + var _tokenName = 'TST' + var _decimalUnits = 0 + var _tokenSymbol = 'TST' + var humanstandardtokenContract = web3.eth.contract([{'constant': true, 'inputs': [], 'name': 'name', 'outputs': [{'name': '', 'type': 'string'}], 'payable': false, 'stateMutability': 'view', 'type': 'function'}, {'constant': false, 'inputs': [{'name': '_spender', 'type': 'address'}, {'name': '_value', 'type': 'uint256'}], 'name': 'approve', 'outputs': [{'name': 'success', 'type': 'bool'}], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'function'}, {'constant': true, 'inputs': [], 'name': 'totalSupply', 'outputs': [{'name': '', 'type': 'uint256'}], 'payable': false, 'stateMutability': 'view', 'type': 'function'}, {'constant': false, 'inputs': [{'name': '_from', 'type': 'address'}, {'name': '_to', 'type': 'address'}, {'name': '_value', 'type': 'uint256'}], 'name': 'transferFrom', 'outputs': [{'name': 'success', 'type': 'bool'}], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'function'}, {'constant': true, 'inputs': [], 'name': 'decimals', 'outputs': [{'name': '', 'type': 'uint8'}], 'payable': false, 'stateMutability': 'view', 'type': 'function'}, {'constant': true, 'inputs': [], 'name': 'version', 'outputs': [{'name': '', 'type': 'string'}], 'payable': false, 'stateMutability': 'view', 'type': 'function'}, {'constant': true, 'inputs': [{'name': '_owner', 'type': 'address'}], 'name': 'balanceOf', 'outputs': [{'name': 'balance', 'type': 'uint256'}], 'payable': false, 'stateMutability': 'view', 'type': 'function'}, {'constant': true, 'inputs': [], 'name': 'symbol', 'outputs': [{'name': '', 'type': 'string'}], 'payable': false, 'stateMutability': 'view', 'type': 'function'}, {'constant': false, 'inputs': [{'name': '_to', 'type': 'address'}, {'name': '_value', 'type': 'uint256'}], 'name': 'transfer', 'outputs': [{'name': 'success', 'type': 'bool'}], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'function'}, {'constant': false, 'inputs': [{'name': '_spender', 'type': 'address'}, {'name': '_value', 'type': 'uint256'}, {'name': '_extraData', 'type': 'bytes'}], 'name': 'approveAndCall', 'outputs': [{'name': 'success', 'type': 'bool'}], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'function'}, {'constant': true, 'inputs': [{'name': '_owner', 'type': 'address'}, {'name': '_spender', 'type': 'address'}], 'name': 'allowance', 'outputs': [{'name': 'remaining', 'type': 'uint256'}], 'payable': false, 'stateMutability': 'view', 'type': 'function'}, {'inputs': [{'name': '_initialAmount', 'type': 'uint256'}, {'name': '_tokenName', 'type': 'string'}, {'name': '_decimalUnits', 'type': 'uint8'}, {'name': '_tokenSymbol', 'type': 'string'}], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'constructor'}, {'payable': false, 'stateMutability': 'nonpayable', 'type': 'fallback'}, {'anonymous': false, 'inputs': [{'indexed': true, 'name': '_from', 'type': 'address'}, {'indexed': true, 'name': '_to', 'type': 'address'}, {'indexed': false, 'name': '_value', 'type': 'uint256'}], 'name': 'Transfer', 'type': 'event'}, {'anonymous': false, 'inputs': [{'indexed': true, 'name': '_owner', 'type': 'address'}, {'indexed': true, 'name': '_spender', 'type': 'address'}, {'indexed': false, 'name': '_value', 'type': 'uint256'}], 'name': 'Approval', 'type': 'event'}]) + return humanstandardtokenContract.new( + _initialAmount, + _tokenName, + _decimalUnits, + _tokenSymbol, + { + from: web3.eth.accounts[0], + data: '0x60806040526040805190810160405280600481526020017f48302e3100000000000000000000000000000000000000000000000000000000815250600690805190602001906200005192919062000143565b503480156200005f57600080fd5b50604051620011f3380380620011f383398101806040528101908080519060200190929190805182019291906020018051906020019092919080518201929190505050836000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360028190555082600390805190602001906200010492919062000143565b5081600460006101000a81548160ff021916908360ff16021790555080600590805190602001906200013892919062000143565b5050505050620001f2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200018657805160ff1916838001178555620001b7565b82800160010185558215620001b7579182015b82811115620001b657825182559160200191906001019062000199565b5b509050620001c69190620001ca565b5090565b620001ef91905b80821115620001eb576000816000905550600101620001d1565b5090565b90565b610ff180620002026000396000f3006080604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100c1578063095ea7b31461015157806318160ddd146101b657806323b872dd146101e1578063313ce5671461026657806354fd4d501461029757806370a082311461032757806395d89b411461037e578063a9059cbb1461040e578063cae9ca5114610473578063dd62ed3e1461051e575b3480156100bb57600080fd5b50600080fd5b3480156100cd57600080fd5b506100d6610595565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101165780820151818401526020810190506100fb565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015d57600080fd5b5061019c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610633565b604051808215151515815260200191505060405180910390f35b3480156101c257600080fd5b506101cb610725565b6040518082815260200191505060405180910390f35b3480156101ed57600080fd5b5061024c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061072b565b604051808215151515815260200191505060405180910390f35b34801561027257600080fd5b5061027b6109a4565b604051808260ff1660ff16815260200191505060405180910390f35b3480156102a357600080fd5b506102ac6109b7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ec5780820151818401526020810190506102d1565b50505050905090810190601f1680156103195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033357600080fd5b50610368600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a55565b6040518082815260200191505060405180910390f35b34801561038a57600080fd5b50610393610a9d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103d35780820151818401526020810190506103b8565b50505050905090810190601f1680156104005780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041a57600080fd5b50610459600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b3b565b604051808215151515815260200191505060405180910390f35b34801561047f57600080fd5b50610504600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610ca1565b604051808215151515815260200191505060405180910390f35b34801561052a57600080fd5b5061057f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f3e565b6040518082815260200191505060405180910390f35b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561062b5780601f106106005761010080835404028352916020019161062b565b820191906000526020600020905b81548152906001019060200180831161060e57829003601f168201915b505050505081565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60025481565b6000816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156107f7575081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156108035750600082115b1561099857816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905061099d565b600090505b9392505050565b600460009054906101000a900460ff1681565b60068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a4d5780601f10610a2257610100808354040283529160200191610a4d565b820191906000526020600020905b815481529060010190602001808311610a3057829003601f168201915b505050505081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b335780601f10610b0857610100808354040283529160200191610b33565b820191906000526020600020905b815481529060010190602001808311610b1657829003601f168201915b505050505081565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610b8b5750600082115b15610c9657816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610c9b565b600090505b92915050565b600082600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff1660405180807f72656365697665417070726f76616c28616464726573732c75696e743235362c81526020017f616464726573732c627974657329000000000000000000000000000000000000815250602e01905060405180910390207c01000000000000000000000000000000000000000000000000000000009004338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828051906020019080838360005b83811015610ee2578082015181840152602081019050610ec7565b50505050905090810190601f168015610f0f5780820380516001836020036101000a031916815260200191505b509450505050506000604051808303816000875af1925050501515610f3357600080fd5b600190509392505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058200052919e0bc22b5adcd3d320be977df3a1dcc35d1a0160287383ba371900a1c50029', + gas: '4700000', + gasPrice: '20000000000', + }, function (e, contract) { + console.log(e, contract) + if (typeof contract.address !== 'undefined') { + console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash) + + document.getElementById('tokenAddress').innerHTML = contract.address - withdrawButton.addEventListener('click', function (event) { - contract.withdraw('0xde0b6b3a7640000', { from: web3.eth.accounts[0] }, function (result) { - console.log(result) - }) + transferTokens.addEventListener('click', function (event) { + console.log(`event`, event) + contract.transfer('0x2f318C334780961FB129D2a6c30D0763d9a5C970', '7', { + from: web3.eth.accounts[0], + to: contract.address, + data: '0xa9059cbb0000000000000000000000002f318C334780961FB129D2a6c30D0763d9a5C970000000000000000000000000000000000000000000000000000000000000000a', + gas: 60000, + gasPrice: '20000000000', + }, function (result) { + console.log('result', result) }) - } - }) + }) - console.log(piggybank) + approveTokens.addEventListener('click', function (event) { + contract.approve('0x2f318C334780961FB129D2a6c30D0763d9a5C970', '7', { + from: web3.eth.accounts[0], + to: contract.address, + data: '0x095ea7b30000000000000000000000002f318C334780961FB129D2a6c30D0763d9a5C9700000000000000000000000000000000000000000000000000000000000000005', + gas: 60000, + gasPrice: '20000000000', + }, function (result) { + console.log(result) + }) + }) + } + }) }) + diff --git a/test/e2e/beta/contract-test/index.html b/test/e2e/beta/contract-test/index.html index 0868633f7..0d63fd940 100644 --- a/test/e2e/beta/contract-test/index.html +++ b/test/e2e/beta/contract-test/index.html @@ -1,8 +1,33 @@ + + E2E Test Dapp + - - - - +
+
Contract
+
+ + + +
+
+
+
Send eth
+
+ +
+
+
+
Send tokens
+
+
+ + + +
+
+ + + \ No newline at end of file diff --git a/test/e2e/beta/helpers.js b/test/e2e/beta/helpers.js index fcc3e96d6..e7299184e 100644 --- a/test/e2e/beta/helpers.js +++ b/test/e2e/beta/helpers.js @@ -6,11 +6,14 @@ const { delay } = require('../func') module.exports = { checkBrowserForConsoleErrors, - loadExtension, - verboseReportOnFailure, + closeAllWindowHandlesExcept, findElement, findElements, + loadExtension, openNewPage, + switchToWindowWithTitle, + verboseReportOnFailure, + waitUntilXWindowHandles, } async function loadExtension (driver, extensionId) { @@ -72,9 +75,46 @@ async function openNewPage (driver, url) { await delay(1000) const handles = await driver.getAllWindowHandles() - const secondHandle = handles[1] - await driver.switchTo().window(secondHandle) + const lastHandle = handles[handles.length - 1] + await driver.switchTo().window(lastHandle) await driver.get(url) await delay(1000) } + +async function waitUntilXWindowHandles (driver, x) { + const windowHandles = await driver.getAllWindowHandles() + if (windowHandles.length === x) return + await delay(1000) + return await waitUntilXWindowHandles(driver, x) +} + +async function switchToWindowWithTitle (driver, title, windowHandles) { + if (!windowHandles) { + windowHandles = await driver.getAllWindowHandles() + } else if (windowHandles.length === 0) { + throw new Error('No window with title: ' + title) + } + const firstHandle = windowHandles[0] + await driver.switchTo().window(firstHandle) + const handleTitle = await driver.getTitle() + + if (handleTitle === title) { + return firstHandle + } else { + return await switchToWindowWithTitle(driver, title, windowHandles.slice(1)) + } +} + +async function closeAllWindowHandlesExcept (driver, exceptions, windowHandles) { + exceptions = typeof exceptions === 'string' ? [ exceptions ] : exceptions + windowHandles = windowHandles || await driver.getAllWindowHandles() + const lastWindowHandle = windowHandles.pop() + if (!exceptions.includes(lastWindowHandle)) { + await driver.switchTo().window(lastWindowHandle) + await delay(1000) + await driver.close() + await delay(1000) + } + return windowHandles.length && await closeAllWindowHandlesExcept(driver, exceptions, windowHandles) +} diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index b07b1ecd7..69bcf8901 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -11,12 +11,15 @@ const { getExtensionIdFirefox, } = require('../func') const { + checkBrowserForConsoleErrors, + closeAllWindowHandlesExcept, findElement, findElements, - checkBrowserForConsoleErrors, loadExtension, - verboseReportOnFailure, openNewPage, + switchToWindowWithTitle, + verboseReportOnFailure, + waitUntilXWindowHandles, } = require('./helpers') describe('MetaMask', function () { @@ -25,7 +28,7 @@ describe('MetaMask', function () { let tokenAddress const testSeedPhrase = 'phrase upgrade clock rough situate wedding elder clever doctor stamp excess tent' - const tinyDelayMs = 1000 + const tinyDelayMs = 200 const regularDelayMs = tinyDelayMs * 2 const largeDelayMs = regularDelayMs * 2 @@ -94,6 +97,11 @@ describe('MetaMask', function () { }) it('selects the new UI option', async () => { + try { + const overlay = await findElement(driver, By.css('.full-flex-height')) + await driver.wait(until.stalenessOf(overlay)) + } catch (e) {} + const button = await findElement(driver, By.xpath("//p[contains(text(), 'Try Beta Version')]")) await button.click() await delay(regularDelayMs) @@ -324,10 +332,10 @@ describe('MetaMask', function () { const create = await findElement(driver, By.xpath(`//button[contains(text(), 'Create')]`)) await create.click() - await delay(regularDelayMs) + await delay(largeDelayMs) }) - it('should correct account name', async () => { + it('should display correct account name', async () => { const accountName = await findElement(driver, By.css('.account-name')) assert.equal(await accountName.getText(), '2nd account') await delay(regularDelayMs) @@ -366,8 +374,7 @@ describe('MetaMask', function () { it('balance renders', async () => { const balance = await findElement(driver, By.css('.balance-display .token-amount')) - const tokenAmount = await balance.getText() - assert.equal(tokenAmount, '100.000 ETH') + await driver.wait(until.elementTextMatches(balance, /100.+ETH/)) await delay(regularDelayMs) }) }) @@ -404,59 +411,69 @@ describe('MetaMask', function () { it('confirms the transaction', async function () { const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) await confirmButton.click() - await delay(regularDelayMs) + await delay(largeDelayMs) }) it('finds the transaction in the transactions list', async function () { const transactions = await findElements(driver, By.css('.tx-list-item')) assert.equal(transactions.length, 1) - const txValues = await findElement(driver, By.css('.tx-list-value')) - await driver.wait(until.elementTextMatches(txValues, /1\sETH/), 10000) + if (process.env.SELENIUM_BROWSER !== 'firefox') { + const txValues = await findElement(driver, By.css('.tx-list-value')) + await driver.wait(until.elementTextMatches(txValues, /1\sETH/), 10000) + } }) }) - describe('Send ETH from Faucet', () => { - it('starts a send transaction inside Faucet', async () => { - await openNewPage(driver, 'https://faucet.metamask.io') + describe('Send ETH from dapp', () => { + it('starts a send transaction inside the dapp', async () => { + await openNewPage(driver, 'http://127.0.0.1:8080/') + await delay(regularDelayMs) - const [extension, faucet] = await driver.getAllWindowHandles() - await driver.switchTo().window(faucet) + await waitUntilXWindowHandles(driver, 2) + let windowHandles = await driver.getAllWindowHandles() + const extension = windowHandles[0] + const dapp = windowHandles[1] - const faucetPageTitle = await findElement(driver, By.css('.container-fluid')) - await driver.wait(until.elementTextMatches(faucetPageTitle, /MetaMask/)) + await driver.switchTo().window(dapp) await delay(regularDelayMs) - const send1eth = await findElement(driver, By.xpath(`//button[contains(text(), '10 ether')]`), 14000) - await send1eth.click() + const send3eth = await findElement(driver, By.xpath(`//button[contains(text(), 'Send')]`), 10000) + await send3eth.click() await delay(regularDelayMs) - await driver.switchTo().window(extension) - await loadExtension(driver, extensionId) + windowHandles = await driver.getAllWindowHandles() + await driver.switchTo().window(windowHandles[2]) await delay(regularDelayMs) - const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`), 14000) + const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`), 10000) await confirmButton.click() await delay(regularDelayMs) - await driver.switchTo().window(faucet) - await delay(regularDelayMs) - await driver.close() - await delay(regularDelayMs) + await closeAllWindowHandlesExcept(driver, [extension, dapp]) await driver.switchTo().window(extension) await delay(regularDelayMs) - await loadExtension(driver, extensionId) - await delay(regularDelayMs) + }) + + it('finds the transaction in the transactions list', async function () { + const transactions = await findElements(driver, By.css('.tx-list-item')) + assert.equal(transactions.length, 2) + + const txValues = await findElement(driver, By.css('.tx-list-value')) + await driver.wait(until.elementTextMatches(txValues, /3\sETH/), 10000) }) }) describe('Deploy contract and call contract methods', () => { let extension - let contractTestPage + let dapp it('confirms a deploy contract transaction', async () => { - await openNewPage(driver, 'http://127.0.0.1:8080/'); + const windowHandles = await driver.getAllWindowHandles() + extension = windowHandles[0] + dapp = windowHandles[1] + await delay(tinyDelayMs) - [extension, contractTestPage] = await driver.getAllWindowHandles() + await driver.switchTo().window(dapp) await delay(regularDelayMs) const deployContractButton = await findElement(driver, By.css('#deployButton')) @@ -466,7 +483,7 @@ describe('MetaMask', function () { await driver.switchTo().window(extension) await delay(regularDelayMs) - const txListItem = await findElement(driver, By.css('.tx-list-item')) + const txListItem = await findElement(driver, By.xpath(`//span[contains(text(), 'Contract Deployment')]`)) await txListItem.click() await delay(regularDelayMs) @@ -479,10 +496,11 @@ describe('MetaMask', function () { const txAccounts = await findElements(driver, By.css('.tx-list-account')) assert.equal(await txAccounts[0].getText(), 'Contract Deployment') + await delay(regularDelayMs) }) it('calls and confirms a contract method where ETH is sent', async () => { - await driver.switchTo().window(contractTestPage) + await driver.switchTo().window(dapp) await delay(regularDelayMs) const depositButton = await findElement(driver, By.css('#depositButton')) @@ -492,7 +510,7 @@ describe('MetaMask', function () { await driver.switchTo().window(extension) await delay(regularDelayMs) - const txListItem = await findElement(driver, By.css('.tx-list-item')) + const txListItem = await findElement(driver, By.xpath(`//span[contains(text(), '4 ETH')]`)) await txListItem.click() await delay(regularDelayMs) @@ -524,7 +542,7 @@ describe('MetaMask', function () { await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) const txValues = await findElement(driver, By.css('.tx-list-value')) - await driver.wait(until.elementTextMatches(txValues, /3\sETH/), 10000) + await driver.wait(until.elementTextMatches(txValues, /4\sETH/), 10000) const txAccounts = await findElements(driver, By.css('.tx-list-account')) const firstTxAddress = await txAccounts[0].getText() @@ -532,7 +550,7 @@ describe('MetaMask', function () { }) it('calls and confirms a contract method where ETH is received', async () => { - await driver.switchTo().window(contractTestPage) + await driver.switchTo().window(dapp) await delay(regularDelayMs) const withdrawButton = await findElement(driver, By.css('#withdrawButton')) @@ -556,38 +574,31 @@ describe('MetaMask', function () { const txValues = await findElement(driver, By.css('.tx-list-value')) await driver.wait(until.elementTextMatches(txValues, /0\sETH/), 10000) - await driver.switchTo().window(contractTestPage) - await driver.close() + await closeAllWindowHandlesExcept(driver, [extension, dapp]) await driver.switchTo().window(extension) }) it('renders the correct ETH balance', async () => { const balance = await findElement(driver, By.css('.tx-view .balance-display .token-amount')) - await driver.wait(until.elementTextMatches(balance, /^86.*ETH.*$/), 10000) - const tokenAmount = await balance.getText() - assert.ok(/^86.*ETH.*$/.test(tokenAmount)) await delay(regularDelayMs) + if (process.env.SELENIUM_BROWSER !== 'firefox') { + await driver.wait(until.elementTextMatches(balance, /^92.*ETH.*$/), 10000) + const tokenAmount = await balance.getText() + assert.ok(/^92.*ETH.*$/.test(tokenAmount)) + await delay(regularDelayMs) + } }) }) - describe('Add a custom token from TokenFactory', () => { + describe('Add a custom token from a dapp', () => { it('creates a new token', async () => { - openNewPage(driver, 'https://tokenfactory.surge.sh/#/factory') + const windowHandles = await driver.getAllWindowHandles() + const extension = windowHandles[0] + const dapp = windowHandles[1] + await delay(regularDelayMs * 2) - await delay(regularDelayMs * 10) - const [extension, tokenFactory] = await driver.getAllWindowHandles() - - 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') + await driver.switchTo().window(dapp) + await delay(regularDelayMs) const createToken = await findElement(driver, By.xpath(`//button[contains(text(), 'Create Token')]`)) await createToken.click() @@ -601,15 +612,16 @@ describe('MetaMask', function () { await confirmButton.click() await delay(regularDelayMs) - await driver.switchTo().window(tokenFactory) - await delay(regularDelayMs) + await driver.switchTo().window(dapp) + await delay(tinyDelayMs) - const tokenContactAddress = await driver.findElement(By.css('div > div > div:nth-child(2) > span:nth-child(3)')) - tokenAddress = await tokenContactAddress.getText() + const tokenContractAddress = await driver.findElement(By.css('#tokenAddress')) + await driver.wait(until.elementTextMatches(tokenContractAddress, /0x/)) + tokenAddress = await tokenContractAddress.getText() - await driver.close() - await driver.switchTo().window(extension) - await loadExtension(driver, extensionId) + await delay(regularDelayMs) + await closeAllWindowHandlesExcept(driver, [extension, dapp]) + await delay(regularDelayMs) await driver.switchTo().window(extension) await delay(regularDelayMs) @@ -709,32 +721,28 @@ describe('MetaMask', function () { }) }) - describe('Send a custom token from TokenFactory', () => { + describe('Send a custom token from dapp', () => { let gasModal it('sends an already created token', async () => { - openNewPage(driver, `https://tokenfactory.surge.sh/#/token/${tokenAddress}`) - - const [extension] = await driver.getAllWindowHandles() - - const [ - transferToAddress, - transferToAmount, - ] = await findElements(driver, By.css('.form-control')) + const windowHandles = await driver.getAllWindowHandles() + const extension = windowHandles[0] + const dapp = await switchToWindowWithTitle(driver, 'E2E Test Dapp', windowHandles) + await closeAllWindowHandlesExcept(driver, [extension, dapp]) + await delay(regularDelayMs) - await transferToAddress.sendKeys('0x2f318C334780961FB129D2a6c30D0763d9a5C970') - await transferToAmount.sendKeys('26') + await driver.switchTo().window(dapp) + await delay(tinyDelayMs) - const transferAmountButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Transfer Amount')]`)) - await transferAmountButton.click() - await delay(regularDelayMs) + const transferTokens = await findElement(driver, By.xpath(`//button[contains(text(), 'Transfer Tokens')]`)) + await transferTokens.click() - const [,, popup] = await driver.getAllWindowHandles() - await driver.switchTo().window(popup) - await driver.close() + await closeAllWindowHandlesExcept(driver, extension) await driver.switchTo().window(extension) await delay(regularDelayMs) const [txListItem] = await findElements(driver, By.css('.tx-list-item')) + const [txListValue] = await findElements(driver, By.css('.tx-list-value')) + await driver.wait(until.elementTextMatches(txListValue, /7\sTST/)) await txListItem.click() await delay(regularDelayMs) @@ -785,7 +793,7 @@ describe('MetaMask', function () { assert.equal(transactions.length, 2) const txValues = await findElements(driver, By.css('.tx-list-value')) - await driver.wait(until.elementTextMatches(txValues[0], /26\sTST/)) + await driver.wait(until.elementTextMatches(txValues[0], /7\sTST/)) const txStatuses = await findElements(driver, By.css('.tx-list-status')) await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) @@ -799,7 +807,7 @@ describe('MetaMask', function () { // or possibly until we use latest version of firefox in the tests if (process.env.SELENIUM_BROWSER !== 'firefox') { const tokenBalanceAmount = await findElement(driver, By.css('.token-balance__amount')) - assert.equal(await tokenBalanceAmount.getText(), '24') + assert.equal(await tokenBalanceAmount.getText(), '43') } }) }) -- cgit From 228b8072218a27fe45867018152392ffb2012251 Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 9 Jul 2018 13:38:05 -0230 Subject: Fix existing e2e tests --- test/e2e/beta/metamask-beta-ui.spec.js | 37 ++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 11 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 69bcf8901..61738af00 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -196,8 +196,20 @@ describe('MetaMask', function () { await delay(regularDelayMs) }) - async function retypeSeedPhrase (words) { + async function retypeSeedPhrase (words, wasReloaded) { try { + if (wasReloaded) { + const byRevealButton = By.css('.backup-phrase__secret-blocker .backup-phrase__reveal-button') + await driver.wait(until.elementLocated(byRevealButton, 10000)) + const revealSeedPhraseButton = await findElement(driver, byRevealButton, 10000) + await revealSeedPhraseButton.click() + await delay(regularDelayMs) + + const nextScreen = await findElement(driver, By.css('.backup-phrase button')) + await nextScreen.click() + await delay(regularDelayMs) + } + const word0 = await findElement(driver, By.xpath(`//button[contains(text(), '${words[0]}')]`), 10000) await word0.click() @@ -258,7 +270,7 @@ describe('MetaMask', function () { await delay(tinyDelayMs) } catch (e) { await loadExtension(driver, extensionId) - await retypeSeedPhrase(words) + await retypeSeedPhrase(words, true) } } @@ -311,7 +323,7 @@ describe('MetaMask', function () { it('accepts the account password after lock', async () => { await driver.findElement(By.id('password')).sendKeys('correct horse battery staple') await driver.findElement(By.id('password')).sendKeys(Key.ENTER) - await delay(regularDelayMs * 4) + await delay(largeDelayMs * 4) }) }) @@ -390,6 +402,9 @@ describe('MetaMask', function () { await inputAddress.sendKeys('0x2f318C334780961FB129D2a6c30D0763d9a5C970') await inputAmount.sendKeys('1') + const inputValue = await inputAmount.getAttribute('value') + assert.equal(inputValue, '1') + // Set the gas limit const configureGas = await findElement(driver, By.css('.send-v2__gas-fee-display button')) await configureGas.click() @@ -515,12 +530,12 @@ describe('MetaMask', function () { await delay(regularDelayMs) // Set the gas limit - const configureGas = await findElement(driver, By.css('.sliders-icon-container')) + const configureGas = await findElement(driver, By.css('.confirm-detail-row__header-text--edit')) await configureGas.click() await delay(regularDelayMs) const gasModal = await driver.findElement(By.css('span .modal')) - await driver.wait(until.elementLocated(By.css('.send-v2__customize-gas__title'))) + await driver.wait(until.elementLocated(By.css('.customize-gas__title'))) const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) await gasPriceInput.clear() @@ -680,7 +695,7 @@ describe('MetaMask', function () { gasModal = await driver.findElement(By.css('span .modal')) }) - it('customizes gas', async () => { + it('opens customizes gas modal', async () => { await driver.wait(until.elementLocated(By.css('.send-v2__customize-gas__title'))) const save = await findElement(driver, By.xpath(`//button[contains(text(), 'Save')]`)) await save.click() @@ -747,7 +762,7 @@ describe('MetaMask', function () { await delay(regularDelayMs) // Set the gas limit - const configureGas = await driver.wait(until.elementLocated(By.css('.send-v2__gas-fee-display button'))) + const configureGas = await driver.wait(until.elementLocated(By.css('.confirm-detail-row__header-text--edit'))) await configureGas.click() await delay(regularDelayMs) @@ -755,7 +770,7 @@ describe('MetaMask', function () { }) it('customizes gas', async () => { - await driver.wait(until.elementLocated(By.css('.send-v2__customize-gas__title'))) + await driver.wait(until.elementLocated(By.css('.customize-gas__title'))) const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) await gasPriceInput.clear() @@ -774,12 +789,12 @@ describe('MetaMask', function () { await gasLimitInput.sendKeys(Key.BACK_SPACE) } - const save = await findElement(driver, By.css('.send-v2__customize-gas__save')) + const save = await findElement(driver, By.css('.customize-gas__save')) await save.click() await driver.wait(until.stalenessOf(gasModal)) - const gasFeeInput = await findElement(driver, By.css('.currency-display__input')) - assert.equal(await gasFeeInput.getAttribute('value'), 0.0006) + const gasFeeInputs = await findElements(driver, By.css('.confirm-detail-row__eth')) + assert.equal(await gasFeeInputs[0].getText(), '♦ 0.0006') }) it('submits the transaction', async function () { -- cgit From f81676fda141c4ea37b76c7adb545d4a7c0588e2 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 10 Jul 2018 13:13:17 -0230 Subject: Update e2e beta tests to cover confirm refactor changes. --- test/e2e/beta/helpers.js | 13 +++ test/e2e/beta/metamask-beta-ui.spec.js | 144 ++++++++++++++++++++++++++++++++- 2 files changed, 154 insertions(+), 3 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/helpers.js b/test/e2e/beta/helpers.js index e7299184e..828f87db7 100644 --- a/test/e2e/beta/helpers.js +++ b/test/e2e/beta/helpers.js @@ -1,10 +1,12 @@ 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') module.exports = { + assertElementNotPresent, checkBrowserForConsoleErrors, closeAllWindowHandlesExcept, findElement, @@ -118,3 +120,14 @@ async function closeAllWindowHandlesExcept (driver, exceptions, windowHandles) { } return windowHandles.length && await closeAllWindowHandlesExcept(driver, exceptions, windowHandles) } + +async function assertElementNotPresent (webdriver, driver, by) { + try { + const dataTab = await findElement(driver, by, 4000) + if (dataTab) { + assert(false, 'Data tab should not be present') + } + } catch (err) { + assert(err instanceof webdriver.error.NoSuchElementError) + } +} diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 61738af00..c4db925c4 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -11,6 +11,7 @@ const { getExtensionIdFirefox, } = require('../func') const { + assertElementNotPresent, checkBrowserForConsoleErrors, closeAllWindowHandlesExcept, findElement, @@ -461,6 +462,8 @@ describe('MetaMask', function () { await driver.switchTo().window(windowHandles[2]) await delay(regularDelayMs) + assertElementNotPresent(webdriver, driver, By.xpath(`//li[contains(text(), 'Data')]`)) + const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`), 10000) await confirmButton.click() await delay(regularDelayMs) @@ -482,7 +485,7 @@ describe('MetaMask', function () { describe('Deploy contract and call contract methods', () => { let extension let dapp - it('confirms a deploy contract transaction', async () => { + it('creates a deploy contract transaction', async () => { const windowHandles = await driver.getAllWindowHandles() extension = windowHandles[0] dapp = windowHandles[1] @@ -501,7 +504,25 @@ describe('MetaMask', function () { const txListItem = await findElement(driver, By.xpath(`//span[contains(text(), 'Contract Deployment')]`)) await txListItem.click() await delay(regularDelayMs) + }) + + it('displays the contract creation data', async () => { + const dataTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Data')]`)) + dataTab.click() + await (regularDelayMs) + + await findElement(driver, By.xpath(`//div[contains(text(), '127.0.0.1')]`)) + + const confirmDataDiv = await findElement(driver, By.css('.confirm-page-container-content__data-box')) + const confirmDataText = await confirmDataDiv.getText() + assert.equal(confirmDataText.match(/0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff/)) + const detailsTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Details')]`)) + detailsTab.click() + await (regularDelayMs) + }) + + it('confirms a deploy contract transaction', async () => { const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) await confirmButton.click() await delay(regularDelayMs) @@ -711,6 +732,24 @@ describe('MetaMask', function () { await delay(regularDelayMs) }) + it('displays the token transfer data', async () => { + const dataTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Data')]`)) + dataTab.click() + await (regularDelayMs) + + const functionType = await findElement(driver, By.css('.confirm-page-container-content__function-type')) + const functionTypeText = await functionType.getText() + assert.equal(functionTypeText, 'Transfer') + + const confirmDataDiv = await findElement(driver, By.css('.confirm-page-container-content__data-box')) + const confirmDataText = await confirmDataDiv.getText() + assert.equal(confirmDataText.match(/0xa9059cbb0000000000000000000000002f318c334780961fb129d2a6c30d0763d9a5c97/)) + + const detailsTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Details')]`)) + detailsTab.click() + await (regularDelayMs) + }) + it('submits the transaction', async function () { const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) await confirmButton.click() @@ -751,9 +790,9 @@ describe('MetaMask', function () { const transferTokens = await findElement(driver, By.xpath(`//button[contains(text(), 'Transfer Tokens')]`)) await transferTokens.click() - await closeAllWindowHandlesExcept(driver, extension) + await closeAllWindowHandlesExcept(driver, [extension, dapp]) await driver.switchTo().window(extension) - await delay(regularDelayMs) + await delay(largeDelayMs) const [txListItem] = await findElements(driver, By.css('.tx-list-item')) const [txListValue] = await findElements(driver, By.css('.tx-list-value')) @@ -827,6 +866,105 @@ describe('MetaMask', function () { }) }) + describe('Approves a custom token from dapp', () => { + let gasModal + it('approves an already created token', async () => { + const windowHandles = await driver.getAllWindowHandles() + const extension = windowHandles[0] + const dapp = await switchToWindowWithTitle(driver, 'E2E Test Dapp', windowHandles) + await closeAllWindowHandlesExcept(driver, [extension, dapp]) + await delay(regularDelayMs) + + await driver.switchTo().window(dapp) + await delay(tinyDelayMs) + + const transferTokens = await findElement(driver, By.xpath(`//button[contains(text(), 'Approve Tokens')]`)) + await transferTokens.click() + + await closeAllWindowHandlesExcept(driver, extension) + await driver.switchTo().window(extension) + await delay(regularDelayMs) + + const [txListItem] = await findElements(driver, By.css('.tx-list-item')) + const [txListValue] = await findElements(driver, By.css('.tx-list-value')) + await driver.wait(until.elementTextMatches(txListValue, /0\sETH/)) + await txListItem.click() + await delay(regularDelayMs) + }) + + it('displays the token approval data', async () => { + const dataTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Data')]`)) + dataTab.click() + await (regularDelayMs) + + const functionType = await findElement(driver, By.css('.confirm-page-container-content__function-type')) + const functionTypeText = await functionType.getText() + assert.equal(functionTypeText, 'Approve') + + const confirmDataDiv = await findElement(driver, By.css('.confirm-page-container-content__data-box')) + const confirmDataText = await confirmDataDiv.getText() + assert.equal(confirmDataText.match(/0x095ea7b30000000000000000000000002f318c334780961fb129d2a6c30d0763d9a5c97/)) + + const detailsTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Details')]`)) + detailsTab.click() + await (regularDelayMs) + + const approvalWarning = await findElement(driver, By.css('.confirm-page-container-warning__warning')) + const approvalWarningText = await approvalWarning.getText() + assert(approvalWarningText.match(/By approving this/)) + await (regularDelayMs) + }) + + it('opens the gas edit modal', async () => { + const configureGas = await driver.wait(until.elementLocated(By.css('.confirm-detail-row__header-text--edit'))) + await configureGas.click() + await delay(regularDelayMs) + + gasModal = await driver.findElement(By.css('span .modal')) + }) + + it('customizes gas', async () => { + await driver.wait(until.elementLocated(By.css('.customize-gas__title'))) + + const [gasPriceInput, gasLimitInput] = await findElements(driver, By.css('.customize-gas-input')) + await gasPriceInput.clear() + await delay(tinyDelayMs) + await gasPriceInput.sendKeys('10') + await delay(tinyDelayMs) + await gasLimitInput.clear() + await delay(tinyDelayMs) + await gasLimitInput.sendKeys(Key.chord(Key.CONTROL, 'a')) + await gasLimitInput.sendKeys('60000') + await gasLimitInput.sendKeys(Key.chord(Key.CONTROL, 'e')) + + // Needed for different behaviour of input in different versions of firefox + const gasLimitInputValue = await gasLimitInput.getAttribute('value') + if (gasLimitInputValue === '600001') { + await gasLimitInput.sendKeys(Key.BACK_SPACE) + } + + const save = await findElement(driver, By.css('.customize-gas__save')) + await save.click() + await driver.wait(until.stalenessOf(gasModal)) + + const gasFeeInputs = await findElements(driver, By.css('.confirm-detail-row__eth')) + assert.equal(await gasFeeInputs[0].getText(), '♦ 0.0006') + }) + + it('submits the transaction', async function () { + const confirmButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Confirm')]`)) + await confirmButton.click() + await delay(regularDelayMs) + }) + + it('finds the transaction in the transactions list', async function () { + const txValues = await findElements(driver, By.css('.tx-list-value')) + await driver.wait(until.elementTextMatches(txValues[0], /0\sETH/)) + const txStatuses = await findElements(driver, By.css('.tx-list-status')) + await driver.wait(until.elementTextMatches(txStatuses[0], /Confirmed/)) + }) + }) + describe('Hide token', () => { it('hides the token when clicked', async () => { const [hideTokenEllipsis] = await findElements(driver, By.css('.token-list-item__ellipsis')) -- cgit From 8912955765e41c7d57ac6252e003ab10f5db6b7e Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 11 Jul 2018 14:51:58 -0230 Subject: Wait for submitted tx list item amounts to match the expected before clicking through. (e2e beta tests) --- test/e2e/beta/metamask-beta-ui.spec.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index c4db925c4..fd75bd2f6 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -546,8 +546,9 @@ describe('MetaMask', function () { await driver.switchTo().window(extension) await delay(regularDelayMs) - const txListItem = await findElement(driver, By.xpath(`//span[contains(text(), '4 ETH')]`)) - await txListItem.click() + const [txListValue] = await findElements(driver, By.css('.tx-list-value')) + await driver.wait(until.elementTextMatches(txListValue, /4\sETH/), 10000) + await txListValue.click() await delay(regularDelayMs) // Set the gas limit @@ -796,12 +797,12 @@ describe('MetaMask', function () { const [txListItem] = await findElements(driver, By.css('.tx-list-item')) const [txListValue] = await findElements(driver, By.css('.tx-list-value')) - await driver.wait(until.elementTextMatches(txListValue, /7\sTST/)) - await txListItem.click() + await driver.wait(until.elementTextMatches(txListValue, /7\sTST/), 10000) + await txListValue.click() await delay(regularDelayMs) // Set the gas limit - const configureGas = await driver.wait(until.elementLocated(By.css('.confirm-detail-row__header-text--edit'))) + const configureGas = await driver.wait(until.elementLocated(By.css('.confirm-detail-row__header-text--edit')), 10000) await configureGas.click() await delay(regularDelayMs) -- cgit From 05ee2b7401cbbcf120eb627d0ad54122c05f85b0 Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 11 Jul 2018 15:13:32 -0230 Subject: Reattempt to find network selector; wait for network selector dropdown to contain localhost before attempting to click. (e2e beta tests) --- test/e2e/beta/metamask-beta-ui.spec.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index fd75bd2f6..39199c1e1 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -84,15 +84,19 @@ describe('MetaMask', function () { networkSelector = await findElement(driver, By.css('#network_component')) } catch (e) { await loadExtension(driver, extensionId) + await delay(largeDelayMs * 2) + networkSelector = await findElement(driver, By.css('#network_component')) } await delay(regularDelayMs) }) - it('use the local network', async function () { + it('uses the local network', async function () { await networkSelector.click() await delay(regularDelayMs) - const localhost = await findElement(driver, By.xpath(`//li[contains(text(), 'Localhost')]`)) + const networks = await findElements(driver, By.css('.dropdown-menu-item')) + const localhost = networks[4] + await driver.wait(until.elementTextMatches(localhost, /Localhost/)) await localhost.click() await delay(regularDelayMs) }) @@ -795,7 +799,6 @@ describe('MetaMask', function () { await driver.switchTo().window(extension) await delay(largeDelayMs) - const [txListItem] = await findElements(driver, By.css('.tx-list-item')) const [txListValue] = await findElements(driver, By.css('.tx-list-value')) await driver.wait(until.elementTextMatches(txListValue, /7\sTST/), 10000) await txListValue.click() -- cgit From 07322bc404692625ceac06722df12ff179f26c6f Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 11 Jul 2018 15:47:17 -0230 Subject: Wait for an element with a .tx-list-pending-item-container to be rendered before attempting to select the tx-list-item. (e2e beta tests) --- test/e2e/beta/metamask-beta-ui.spec.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 39199c1e1..caa49d450 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -550,6 +550,7 @@ describe('MetaMask', function () { await driver.switchTo().window(extension) await delay(regularDelayMs) + await findElements(driver, By.css('.tx-list-pending-item-container')) const [txListValue] = await findElements(driver, By.css('.tx-list-value')) await driver.wait(until.elementTextMatches(txListValue, /4\sETH/), 10000) await txListValue.click() @@ -799,6 +800,7 @@ describe('MetaMask', function () { await driver.switchTo().window(extension) await delay(largeDelayMs) + await findElements(driver, By.css('.tx-list-pending-item-container')) const [txListValue] = await findElements(driver, By.css('.tx-list-value')) await driver.wait(until.elementTextMatches(txListValue, /7\sTST/), 10000) await txListValue.click() -- cgit From e16f5ab54d1e69e59fe4689fde3fa34e61c88974 Mon Sep 17 00:00:00 2001 From: Alexander Tseung Date: Sat, 14 Jul 2018 23:36:42 -0700 Subject: Fix tests --- test/e2e/beta/metamask-beta-ui.spec.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index caa49d450..ee1aa0ff1 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -513,7 +513,7 @@ describe('MetaMask', function () { it('displays the contract creation data', async () => { const dataTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Data')]`)) dataTab.click() - await (regularDelayMs) + await delay(regularDelayMs) await findElement(driver, By.xpath(`//div[contains(text(), '127.0.0.1')]`)) @@ -523,7 +523,7 @@ describe('MetaMask', function () { const detailsTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Details')]`)) detailsTab.click() - await (regularDelayMs) + await delay(regularDelayMs) }) it('confirms a deploy contract transaction', async () => { @@ -548,7 +548,7 @@ describe('MetaMask', function () { await delay(regularDelayMs) await driver.switchTo().window(extension) - await delay(regularDelayMs) + await delay(largeDelayMs) await findElements(driver, By.css('.tx-list-pending-item-container')) const [txListValue] = await findElements(driver, By.css('.tx-list-value')) @@ -741,7 +741,7 @@ describe('MetaMask', function () { it('displays the token transfer data', async () => { const dataTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Data')]`)) dataTab.click() - await (regularDelayMs) + await delay(regularDelayMs) const functionType = await findElement(driver, By.css('.confirm-page-container-content__function-type')) const functionTypeText = await functionType.getText() @@ -753,7 +753,7 @@ describe('MetaMask', function () { const detailsTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Details')]`)) detailsTab.click() - await (regularDelayMs) + await delay(regularDelayMs) }) it('submits the transaction', async function () { @@ -901,7 +901,7 @@ describe('MetaMask', function () { it('displays the token approval data', async () => { const dataTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Data')]`)) dataTab.click() - await (regularDelayMs) + await delay(regularDelayMs) const functionType = await findElement(driver, By.css('.confirm-page-container-content__function-type')) const functionTypeText = await functionType.getText() @@ -913,12 +913,12 @@ describe('MetaMask', function () { const detailsTab = await findElement(driver, By.xpath(`//li[contains(text(), 'Details')]`)) detailsTab.click() - await (regularDelayMs) + await delay(regularDelayMs) const approvalWarning = await findElement(driver, By.css('.confirm-page-container-warning__warning')) const approvalWarningText = await approvalWarning.getText() assert(approvalWarningText.match(/By approving this/)) - await (regularDelayMs) + await delay(regularDelayMs) }) it('opens the gas edit modal', async () => { -- cgit From aa5a987765677b4945e9eefe03cae8dcc93318cd Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Tue, 17 Jul 2018 21:54:04 -0400 Subject: added some e2e tests --- test/e2e/beta/from-import-beta-ui.spec.js | 47 +++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js index b396dc5b9..938d22cd9 100644 --- a/test/e2e/beta/from-import-beta-ui.spec.js +++ b/test/e2e/beta/from-import-beta-ui.spec.js @@ -321,4 +321,51 @@ describe('Using MetaMask with an existing account', function () { }) }) + describe('Connects to a Hardware wallet', () => { + it('choose Connect Hardware Wallet from the account menu', async () => { + await driver.findElement(By.css('.account-menu__icon')).click() + await delay(regularDelayMs) + + const [connectAccount] = await findElements(driver, By.xpath(`//div[contains(text(), 'Connect Hardware Wallet')]`)) + await connectAccount.click() + await delay(regularDelayMs) + }) + + it('should open the TREZOR Connect popup', async () => { + const connectButtons = await findElements(driver, By.xpath(`//button[contains(text(), 'Connect to Trezor')]`)) + await connectButtons[0].click() + await delay(regularDelayMs) + const allWindows = await driver.getAllWindowHandles() + switch (process.env.SELENIUM_BROWSER) { + case 'chrome': + assert.equal(allWindows.length, 2) + break + default: + assert.equal(allWindows.length, 1) + } + }) + + it('should show the "Browser not supported" screen for non Chrome browsers', async () => { + if (process.env.SELENIUM_BROWSER !== 'chrome') { + const title = await findElements(driver, By.xpath(`//h3[contains(text(), 'Bummer! Your Browser is not supported...')]`)) + assert.equal(title.length, 1) + + const downloadChromeButtons = await findElements(driver, By.xpath(`//button[contains(text(), 'Download Google Chrome')]`)) + assert.equal(downloadChromeButtons.length, 1) + + await downloadChromeButtons[0].click() + await delay(regularDelayMs) + + const [newUITab, downloadChromeTab] = await driver.getAllWindowHandles() + + await driver.switchTo().window(downloadChromeTab) + await delay(regularDelayMs) + const tabUrl = await driver.getCurrentUrl() + assert.equal(tabUrl, 'https://www.google.com/chrome/') + await driver.close() + await delay(regularDelayMs) + await driver.switchTo().window(newUITab) + } + }) + }) }) -- cgit From cbb14f1d5e50c10865838a98452ecfb4b6cb8d6a Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Tue, 17 Jul 2018 21:57:19 -0400 Subject: fix browser not supported screen --- test/e2e/beta/from-import-beta-ui.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js index 938d22cd9..32f57b157 100644 --- a/test/e2e/beta/from-import-beta-ui.spec.js +++ b/test/e2e/beta/from-import-beta-ui.spec.js @@ -347,7 +347,7 @@ describe('Using MetaMask with an existing account', function () { it('should show the "Browser not supported" screen for non Chrome browsers', async () => { if (process.env.SELENIUM_BROWSER !== 'chrome') { - const title = await findElements(driver, By.xpath(`//h3[contains(text(), 'Bummer! Your Browser is not supported...')]`)) + const title = await findElements(driver, By.xpath(`//h3[contains(text(), 'Your Browser is not supported...')]`)) assert.equal(title.length, 1) const downloadChromeButtons = await findElements(driver, By.xpath(`//button[contains(text(), 'Download Google Chrome')]`)) -- cgit From cb8ea12db626e82b7230317fc74b6b80ce20f793 Mon Sep 17 00:00:00 2001 From: Dan Miller Date: Tue, 24 Jul 2018 11:24:36 -0230 Subject: Updates e2e beta tests to ensure that popup window closes after confirming a simple send. --- test/e2e/beta/metamask-beta-ui.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index ee1aa0ff1..ca1977c5a 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -472,7 +472,7 @@ describe('MetaMask', function () { await confirmButton.click() await delay(regularDelayMs) - await closeAllWindowHandlesExcept(driver, [extension, dapp]) + await waitUntilXWindowHandles(driver, 2) await driver.switchTo().window(extension) await delay(regularDelayMs) }) -- cgit From 30d92b8d3f4c38dcd83bab97576775c0096adc1a Mon Sep 17 00:00:00 2001 From: Dan Miller Date: Thu, 26 Jul 2018 10:54:38 -0230 Subject: Fix e2e tests to accomodate new ui suggestion screen changes. --- test/e2e/beta/from-import-beta-ui.spec.js | 61 +++++++++++++++++++---------- test/e2e/beta/metamask-beta-ui.spec.js | 64 +++++++++++++++---------------- 2 files changed, 72 insertions(+), 53 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js index 32f57b157..c271461d3 100644 --- a/test/e2e/beta/from-import-beta-ui.spec.js +++ b/test/e2e/beta/from-import-beta-ui.spec.js @@ -12,9 +12,11 @@ const { } = require('../func') const { checkBrowserForConsoleErrors, + closeAllWindowHandlesExcept, verboseReportOnFailure, findElement, findElements, + loadExtension, } = require('./helpers') @@ -25,6 +27,7 @@ describe('Using MetaMask with an existing account', function () { const testSeedPhrase = 'phrase upgrade clock rough situate wedding elder clever doctor stamp excess tent' const testAddress = '0xE18035BF8712672935FDB4e5e431b1a0183d2DFC' const testPrivateKey2 = '14abe6f4aab7f9f626fe981c864d0adeb5685f289ac9270c27b8fd790b4235d6' + const tinyDelayMs = 500 const regularDelayMs = 1000 const largeDelayMs = regularDelayMs * 2 @@ -74,37 +77,55 @@ describe('Using MetaMask with an existing account', function () { describe('New UI setup', async function () { it('switches to first tab', async function () { + await delay(tinyDelayMs) const [firstTab] = await driver.getAllWindowHandles() await driver.switchTo().window(firstTab) 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')]")) + try { + const overlay = await findElement(driver, By.css('.full-flex-height')) + await driver.wait(until.stalenessOf(overlay)) + } catch (e) {} + + const button = await findElement(driver, By.xpath("//button[contains(text(), 'Try it now')]")) await button.click() await delay(regularDelayMs) // Close all other tabs - const [oldUi, infoPage, newUi] = await driver.getAllWindowHandles() - - const newUiOrInfoPage = newUi || infoPage - await driver.switchTo().window(oldUi) - await driver.close() - if (infoPage !== newUiOrInfoPage) { - await driver.switchTo().window(infoPage) - await driver.close() + const [tab0, tab1, tab2] = await driver.getAllWindowHandles() + await driver.switchTo().window(tab0) + await delay(tinyDelayMs) + + let selectedUrl = await driver.getCurrentUrl() + await delay(tinyDelayMs) + if (tab0 && selectedUrl.match(/popup.html/)) { + await closeAllWindowHandlesExcept(driver, tab0) + } else if (tab1) { + await driver.switchTo().window(tab1) + selectedUrl = await driver.getCurrentUrl() + await delay(tinyDelayMs) + if (selectedUrl.match(/popup.html/)) { + await closeAllWindowHandlesExcept(driver, tab1) + } else if (tab2) { + await driver.switchTo().window(tab2) + selectedUrl = await driver.getCurrentUrl() + selectedUrl.match(/popup.html/) && await closeAllWindowHandlesExcept(driver, tab2) + } + } else { + throw new Error('popup.html not found') } - await driver.switchTo().window(newUiOrInfoPage) + await delay(regularDelayMs) + const [appTab] = await driver.getAllWindowHandles() + await driver.switchTo().window(appTab) + await delay(tinyDelayMs) + + const okayBtn = await findElement(driver, By.xpath("//button[contains(text(), 'Ok')]")) + await okayBtn.click() + await delay(regularDelayMs) + + await loadExtension(driver, extensionId) await delay(regularDelayMs) const continueBtn = await findElement(driver, By.css('.welcome-screen__button')) diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index ca1977c5a..1590e6d35 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -75,30 +75,11 @@ describe('MetaMask', function () { }) describe('New UI setup', async function () { - let networkSelector it('switches to first tab', async function () { + await delay(tinyDelayMs) const [firstTab] = await driver.getAllWindowHandles() await driver.switchTo().window(firstTab) await delay(regularDelayMs) - try { - networkSelector = await findElement(driver, By.css('#network_component')) - } catch (e) { - await loadExtension(driver, extensionId) - await delay(largeDelayMs * 2) - networkSelector = await findElement(driver, By.css('#network_component')) - } - await delay(regularDelayMs) - }) - - it('uses the local network', async function () { - await networkSelector.click() - await delay(regularDelayMs) - - const networks = await findElements(driver, By.css('.dropdown-menu-item')) - const localhost = networks[4] - await driver.wait(until.elementTextMatches(localhost, /Localhost/)) - await localhost.click() - await delay(regularDelayMs) }) it('selects the new UI option', async () => { @@ -107,27 +88,44 @@ describe('MetaMask', function () { await driver.wait(until.stalenessOf(overlay)) } catch (e) {} - const button = await findElement(driver, By.xpath("//p[contains(text(), 'Try Beta Version')]")) + const button = await findElement(driver, By.xpath("//button[contains(text(), 'Try it now')]")) await button.click() await delay(regularDelayMs) // Close all other tabs - const [oldUi, tab1, tab2] = await driver.getAllWindowHandles() - await driver.switchTo().window(oldUi) - await driver.close() + const [tab0, tab1, tab2] = await driver.getAllWindowHandles() + await driver.switchTo().window(tab0) + await delay(tinyDelayMs) - await driver.switchTo().window(tab1) - const tab1Url = await driver.getCurrentUrl() - if (tab1Url.match(/metamask.io/)) { - await driver.switchTo().window(tab1) - await driver.close() - await driver.switchTo().window(tab2) - } else if (tab2) { - await driver.switchTo().window(tab2) - await driver.close() + let selectedUrl = await driver.getCurrentUrl() + await delay(tinyDelayMs) + if (tab0 && selectedUrl.match(/popup.html/)) { + await closeAllWindowHandlesExcept(driver, tab0) + } else if (tab1) { await driver.switchTo().window(tab1) + selectedUrl = await driver.getCurrentUrl() + await delay(tinyDelayMs) + if (selectedUrl.match(/popup.html/)) { + await closeAllWindowHandlesExcept(driver, tab1) + } else if (tab2) { + await driver.switchTo().window(tab2) + selectedUrl = await driver.getCurrentUrl() + selectedUrl.match(/popup.html/) && await closeAllWindowHandlesExcept(driver, tab2) + } + } else { + throw new Error('popup.html not found') } await delay(regularDelayMs) + const [appTab] = await driver.getAllWindowHandles() + await driver.switchTo().window(appTab) + await delay(tinyDelayMs) + + const okayBtn = await findElement(driver, By.xpath("//button[contains(text(), 'Ok')]")) + await okayBtn.click() + await delay(regularDelayMs) + + await loadExtension(driver, extensionId) + await delay(regularDelayMs) const continueBtn = await findElement(driver, By.css('.welcome-screen__button')) await continueBtn.click() -- cgit From 07c0cd59d4b670eafc5d6c20ab9f54faa841ee1c Mon Sep 17 00:00:00 2001 From: Dan Miller Date: Thu, 26 Jul 2018 13:32:17 -0230 Subject: New ui e2e tests switch to localhost provider (needed after new ui selection screen addition). --- test/e2e/beta/from-import-beta-ui.spec.js | 10 ++++++++++ test/e2e/beta/metamask-beta-ui.spec.js | 10 ++++++++++ 2 files changed, 20 insertions(+) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js index c271461d3..92e5be715 100644 --- a/test/e2e/beta/from-import-beta-ui.spec.js +++ b/test/e2e/beta/from-import-beta-ui.spec.js @@ -229,6 +229,16 @@ describe('Using MetaMask with an existing account', function () { }) describe('Add an account', () => { + it('switches to localhost', async () => { + const networkDropdown = await findElement(driver, By.css('.network-name')) + await networkDropdown.click() + await delay(regularDelayMs) + + const [localhost] = await findElements(driver, By.xpath(`//span[contains(text(), 'Localhost')]`)) + await localhost.click() + await delay(largeDelayMs * 2) + }) + it('choose Create Account from the account menu', async () => { await driver.findElement(By.css('.account-menu__icon')).click() await delay(regularDelayMs) diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 1590e6d35..6a169de76 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -387,6 +387,16 @@ describe('MetaMask', function () { await delay(regularDelayMs) }) + it('switches to localhost', async () => { + const networkDropdown = await findElement(driver, By.css('.network-name')) + await networkDropdown.click() + await delay(regularDelayMs) + + const [localhost] = await findElements(driver, By.xpath(`//span[contains(text(), 'Localhost')]`)) + await localhost.click() + await delay(largeDelayMs * 2) + }) + it('balance renders', async () => { const balance = await findElement(driver, By.css('.balance-display .token-amount')) await driver.wait(until.elementTextMatches(balance, /100.+ETH/)) -- cgit From 0fd8862c5e942778763e170a36aeb7604472c5cd Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Fri, 27 Jul 2018 20:05:26 -0230 Subject: Don't show an additional beta UI notification When a user has opted-in to the new UI from the announcement, we don't need an additional notification letting the user know that they've switched. --- test/e2e/beta/from-import-beta-ui.spec.js | 6 +----- test/e2e/beta/metamask-beta-ui.spec.js | 4 ---- 2 files changed, 1 insertion(+), 9 deletions(-) (limited to 'test/e2e/beta') diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js index 92e5be715..06e669e5b 100644 --- a/test/e2e/beta/from-import-beta-ui.spec.js +++ b/test/e2e/beta/from-import-beta-ui.spec.js @@ -121,10 +121,6 @@ describe('Using MetaMask with an existing account', function () { await driver.switchTo().window(appTab) await delay(tinyDelayMs) - const okayBtn = await findElement(driver, By.xpath("//button[contains(text(), 'Ok')]")) - await okayBtn.click() - await delay(regularDelayMs) - await loadExtension(driver, extensionId) await delay(regularDelayMs) @@ -238,7 +234,7 @@ describe('Using MetaMask with an existing account', function () { await localhost.click() await delay(largeDelayMs * 2) }) - + it('choose Create Account from the account menu', async () => { await driver.findElement(By.css('.account-menu__icon')).click() await delay(regularDelayMs) diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index 6a169de76..98132e68c 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -120,10 +120,6 @@ describe('MetaMask', function () { await driver.switchTo().window(appTab) await delay(tinyDelayMs) - const okayBtn = await findElement(driver, By.xpath("//button[contains(text(), 'Ok')]")) - await okayBtn.click() - await delay(regularDelayMs) - await loadExtension(driver, extensionId) await delay(regularDelayMs) -- cgit