Skip to content

Commit dbebae6

Browse files
bunsenstraatbunsenstraat
authored andcommitted
metamask fix
lock lock rm script fix test rm unneeded test rm file rm file headless Delete .env.local
1 parent 22a5114 commit dbebae6

File tree

18 files changed

+383
-587
lines changed

18 files changed

+383
-587
lines changed

.circleci/config.yml

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: 2.1
22
parameters:
33
run_flaky_tests:
44
type: boolean
5-
default: false
5+
default: true
66
orbs:
77
browser-tools: circleci/[email protected]
88
win: circleci/[email protected]
@@ -680,6 +680,17 @@ jobs:
680680
install-geckodriver: false
681681
- run: yarn install_webdriver
682682
- run: google-chrome --version
683+
- when:
684+
condition:
685+
equal: [ "chromeMetamask", << parameters.browser >> ]
686+
steps:
687+
- browser-tools/install-browser-tools:
688+
install-firefox: false
689+
install-chrome: true
690+
install-chromedriver: false
691+
install-geckodriver: false
692+
- run: yarn install_webdriver
693+
- run: google-chrome --version
683694
- when:
684695
condition:
685696
equal: [ "firefox", << parameters.browser >> ]
@@ -794,11 +805,11 @@ workflows:
794805
- build
795806
matrix:
796807
parameters:
797-
browser: ["chrome", "firefox"]
798-
script: ["flaky.sh"]
799-
job: ["nogroup"]
800-
jobsize: ["1"]
801-
parallelism: [5]
808+
browser: ["chromeMetamask"]
809+
script: ["metamask.sh"]
810+
job: ["0"]
811+
jobsize: ["10"]
812+
parallelism: [1]
802813
build_all:
803814
unless: << pipeline.parameters.run_flaky_tests >>
804815
jobs:
@@ -887,26 +898,26 @@ workflows:
887898
job: ["0","1","2","3","4","5","6","7","8","9"]
888899
jobsize: ["10"]
889900
parallelism: [15]
890-
# - remix-ide-browser:
891-
# requires:
892-
# - build
893-
# matrix:
894-
# alias: metamask
895-
# parameters:
896-
# browser: ["chrome"]
897-
# script: ["metamask.sh"]
898-
# job: ["0"]
899-
# jobsize: ["10"]
900-
# parallelism: [1]
901-
# filters:
902-
# branches:
903-
# only: [/.*metamask.*/, 'master', 'remix_live', 'remix_beta']
901+
- remix-ide-browser:
902+
requires:
903+
- build
904+
matrix:
905+
alias: metamask
906+
parameters:
907+
browser: ["chromeMetamask"]
908+
script: ["metamask.sh"]
909+
job: ["0"]
910+
jobsize: ["10"]
911+
parallelism: [1]
912+
filters:
913+
branches:
914+
only: [/.*metamask.*/, 'master', 'remix_live', 'remix_beta']
904915
- tests-passed:
905916
requires:
906917
- lint
907918
- remix-libs
908919
- browser-tests
909-
#- metamask
920+
- metamask
910921
- plugins
911922

912923
- predeploy:
@@ -920,7 +931,7 @@ workflows:
920931
- lint
921932
- remix-libs
922933
- browser-tests
923-
#- metamask
934+
- metamask
924935
- plugins
925936
- predeploy
926937
filters:
@@ -933,7 +944,7 @@ workflows:
933944
- lint
934945
- remix-libs
935946
- browser-tests
936-
#- metamask
947+
- metamask
937948
- plugins
938949
- predeploy
939950
filters:
@@ -946,7 +957,7 @@ workflows:
946957
- lint
947958
- remix-libs
948959
- browser-tests
949-
#- metamask
960+
- metamask
950961
- plugins
951962
- predeploy
952963
filters:

.env.local

Lines changed: 0 additions & 5 deletions
This file was deleted.

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ soljson.js
1717
stats.json
1818
release
1919
.env
20+
.env.local
2021

2122

2223
# compiled output
@@ -74,3 +75,4 @@ apps/remixdesktop/circom-download
7475
apps/remixdesktop/log_input_signals.txt
7576
apps/remixdesktop/log_input_signals_new.txt
7677
logs
78+
apps/remix-ide-e2e/src/extensions/chrome/metamask

apps/remix-ide-e2e/METAMASK.md

Whitespace-only changes.

apps/remix-ide-e2e/nightwatch-chrome.ts

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
import * as fs from 'fs'
2-
3-
const crxFile = fs.readFileSync('apps/remix-ide-e2e/src/extensions/chrome/11.13.1_0.crx')
4-
const metamaskExtension = crxFile.toString('base64')
1+
const metamaskExtensionPath = 'apps/remix-ide-e2e/src/extensions/chrome/metamask';
52

63
module.exports = {
74
src_folders: ['dist/apps/remix-ide-e2e/src/tests'],
@@ -44,8 +41,7 @@ module.exports = {
4441
'--headless=new',
4542
'--verbose',
4643
'--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
47-
],
48-
extensions: [metamaskExtension]
44+
]
4945
}
5046
}
5147
},
@@ -63,12 +59,35 @@ module.exports = {
6359

6460
'chromeDesktopMetamask': {
6561
desiredCapabilities: {
66-
'browserName': 'chrome',
67-
'javascriptEnabled': true,
68-
'acceptSslCerts': true,
62+
browserName: 'chrome',
63+
javascriptEnabled: true,
64+
acceptSslCerts: true,
6965
'goog:chromeOptions': {
70-
args: ['window-size=2560,1440', '--no-sandbox', '--verbose']
71-
,extensions: [metamaskExtension]
66+
args: [
67+
`--load-extension=${metamaskExtensionPath}`,
68+
'--window-size=2560,1440',
69+
'--no-sandbox',
70+
'--verbose',
71+
'--disable-gpu',
72+
]
73+
}
74+
}
75+
},
76+
77+
'chromeMetamask': {
78+
desiredCapabilities: {
79+
browserName: 'chrome',
80+
javascriptEnabled: true,
81+
acceptSslCerts: true,
82+
'goog:chromeOptions': {
83+
args: [
84+
`--load-extension=${metamaskExtensionPath}`,
85+
'--window-size=2560,1440',
86+
'--no-sandbox',
87+
'--verbose',
88+
'--headless=new',
89+
'--disable-gpu',
90+
]
7291
}
7392
}
7493
},
@@ -80,7 +99,7 @@ module.exports = {
8099
'acceptSslCerts': true,
81100
'goog:chromeOptions': {
82101
args: ['window-size=2560,1440', 'start-fullscreen', '--no-sandbox', '--headless', '--verbose'],
83-
extensions: [metamaskExtension]
102+
extensions: []
84103
}
85104
}
86105
}

apps/remix-ide-e2e/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
"@openzeppelin/wizard": "^0.4.0",
1313
"@remix-project/remixd": "../../dist/libs/remixd",
1414
"deep-equal": "^1.0.1",
15-
"tree-kill": "^1.2.2"
15+
"tree-kill": "^1.2.2",
16+
"adm-zip": "^0.5.16"
1617
},
1718
"devDependencies": {
1819
"http-server": "^14.1.1",

apps/remix-ide-e2e/src/commands/setupMetamask.ts

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@ class MetaMask extends EventEmitter {
1515
}
1616

1717
function setupMetaMask(browser: NightwatchBrowser, passphrase: string, password: string, done: VoidFunction) {
18+
//passphrase = 'asset chalk glimpse inch wall tomorrow fatal major crater omit tiny sun'
1819
const words = passphrase.split(' ')
1920
console.log('setup metamask')
2021
browser
21-
.switchBrowserTab(1)
22+
.switchBrowserTab('MetaMask')
23+
.saveScreenshot('./reports/screenshots/metamask_setup.png')
2224
.waitForElementVisible('input[data-testid="onboarding-terms-checkbox"]')
2325
.click('input[data-testid="onboarding-terms-checkbox"]')
2426
.waitForElementVisible('button[data-testid="onboarding-import-wallet"]')
@@ -50,31 +52,32 @@ function setupMetaMask(browser: NightwatchBrowser, passphrase: string, password:
5052
.click('button[data-testid="pin-extension-next"]')
5153
.waitForElementVisible('button[data-testid="pin-extension-done"]')
5254
.click('button[data-testid="pin-extension-done"]')
53-
.perform((done) => {
54-
browser.execute(function () {
55-
function addStyle(styleString) {
56-
const style = document.createElement('style')
57-
style.textContent = styleString
58-
document.head.append(style)
59-
}
60-
addStyle(`
61-
#popover-content {
62-
display:none !important
63-
}
64-
.popover-container {
65-
display:none !important;
66-
}
67-
`)
68-
}, [], done())
69-
})
70-
55+
.pause(10000)
7156
.saveScreenshot('./reports/screenshots/metamask.png')
57+
.waitForElementVisible('[data-testid="network-display"]')
58+
.saveScreenshot('./reports/screenshots/metamask_3.png')
7259
.click('[data-testid="network-display"]')
7360
.click('.mm-modal-content label.toggle-button--off') // show test networks
61+
.waitForElementVisible('div[data-testid="Sepolia"]')
7462
.click('div[data-testid="Sepolia"]') // switch to sepolia
63+
.waitForElementVisible({
64+
selector: '//*[@data-testid="network-display" and contains(., "Sepolia")]',
65+
locateStrategy: 'xpath'
66+
})
67+
.waitForElementVisible({
68+
selector: '//*[@class="eth-overview__balance" and contains(., "SepoliaETH")]',
69+
locateStrategy: 'xpath'
70+
})
71+
.saveScreenshot('./reports/screenshots/metamask_4.png')
7572
.perform(() => {
7673
console.log('MetaMask setup complete')
77-
done()
74+
browser.getCurrentUrl((url) => {
75+
console.log('MetaMask URL:', url)
76+
browser.globals.extensionUrl = url.value
77+
console.log(browser.globals)
78+
browser.closeWindow()
79+
done()
80+
})
7881
})
7982
}
8083

apps/remix-ide-e2e/src/commands/switchBrowserTab.ts

Lines changed: 93 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,109 @@
11
import { NightwatchBrowser, NightwatchAPI } from 'nightwatch'
22
import EventEmitter from 'events'
33

4+
function isValidUrl(str: string): boolean {
5+
try {
6+
new URL(str);
7+
return true;
8+
} catch (_) {
9+
return false;
10+
}
11+
}
12+
413
/*
514
Switches between browser tabs
615
*/
716

817
class SwitchBrowserTab extends EventEmitter {
9-
command(this: NightwatchBrowser, index: number): NightwatchBrowser {
18+
command(this: NightwatchBrowser, indexOrTitle: number | string, forceReload = false): NightwatchBrowser {
19+
console.log('Switching to browser tab', indexOrTitle);
1020
this.api.perform((browser: NightwatchAPI, done) => {
11-
const runtimeBrowser = browser.options.desiredCapabilities.browserName
21+
const runtimeBrowser = browser.options.desiredCapabilities.browserName;
1222
browser.windowHandles((result) => {
13-
console.log('switching to window', result)
23+
console.log('switching to window', result);
1424
if (Array.isArray(result.value)) {
15-
if(runtimeBrowser === 'chrome') {
16-
index = index + 1
25+
const handles = result.value;
26+
27+
const logTabInfo = (handle: string, i: number) => {
28+
browser.switchWindow(handle);
29+
browser.getTitle((title) => {
30+
console.log(`🪟 Tab ${i}: Title → ${title}`);
31+
});
32+
browser.getCurrentUrl((url) => {
33+
console.log(`🌐 Tab ${i}: URL → ${JSON.stringify(url)}`);
34+
});
35+
};
36+
37+
handles.forEach((handle, i) => logTabInfo(handle, i));
38+
39+
if (typeof indexOrTitle === 'string') {
40+
let matchedIndex = -1;
41+
const urlMatches: string[] = [];
42+
43+
const checkNext = (i = 0) => {
44+
if (i >= handles.length) {
45+
if (matchedIndex >= 0 && !forceReload) {
46+
browser.switchWindow(handles[matchedIndex]);
47+
console.log(`✅ Switched to tab with title or URL matching "${indexOrTitle}"`);
48+
return done();
49+
} else if (matchedIndex >= 0 && forceReload) {
50+
console.log(`🔁 Force reloading tab with URL "${indexOrTitle}"`);
51+
browser.switchWindow(handles[matchedIndex]);
52+
browser.refresh(() => {
53+
console.log(`✅ Reloaded tab with URL: ${indexOrTitle}`);
54+
done();
55+
});
56+
return;
57+
} else if (isValidUrl(indexOrTitle)) {
58+
console.log(`🔍 No tab matched, opening new tab with URL "${indexOrTitle}"`);
59+
browser.openNewWindow('tab', () => {
60+
browser.url(indexOrTitle, () => {
61+
browser.pause(2000);
62+
console.log(`✅ Opened and switched to new tab with URL: ${indexOrTitle}`);
63+
done();
64+
});
65+
});
66+
return;
67+
} else {
68+
console.log(`❌ "${indexOrTitle}" is not a valid URL. No tab opened.`);
69+
return done();
70+
}
71+
}
72+
73+
browser.switchWindow(handles[i]);
74+
browser.pause(500);
75+
browser.getTitle((title) => {
76+
browser.getCurrentUrl((urlObj) => {
77+
const url = typeof urlObj === 'object' && 'value' in urlObj ? urlObj.value : urlObj;
78+
if ((title && title.includes(indexOrTitle)) || (typeof url === 'string' && url.includes(indexOrTitle))) {
79+
matchedIndex = i;
80+
}
81+
checkNext(i + 1);
82+
});
83+
});
84+
};
85+
86+
checkNext(0);
87+
} else {
88+
const targetHandle = handles[indexOrTitle] || handles[0];
89+
browser.switchWindow(targetHandle);
90+
browser.getTitle((title) => {
91+
if (title) {
92+
console.log(`✅ Switched to tab with title "${title}"`);
93+
done();
94+
} else {
95+
console.log(`❌ No tab with index ${indexOrTitle} found.`);
96+
}
97+
})
98+
1799
}
18-
browser.switchWindow(result.value[index] || result.value[0])
100+
} else {
101+
done();
19102
}
20-
done()
21-
})
22-
this.emit('complete')
23-
})
24-
return this
103+
});
104+
this.emit('complete');
105+
});
106+
return this;
25107
}
26108
}
27109

-19.7 MB
Binary file not shown.

0 commit comments

Comments
 (0)