mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
3732c5f71e
ESLint rules have been added to enforce our JSDoc conventions. These rules were introduced by updating `@metamask/eslint-config` to v9. Some of the rules have been disabled because the effort to fix all lint errors was too high. It might be easiest to enable these rules one directory at a time, or one rule at a time. Most of the changes in this PR were a result of running `yarn lint:fix`. There were a handful of manual changes that seemed obvious and simple to make. Anything beyond that and the rule was left disabled.
73 lines
2.2 KiB
JavaScript
73 lines
2.2 KiB
JavaScript
const { Builder } = require('selenium-webdriver');
|
|
const chrome = require('selenium-webdriver/chrome');
|
|
|
|
/**
|
|
* A wrapper around a {@code WebDriver} instance exposing Chrome-specific functionality
|
|
*/
|
|
class ChromeDriver {
|
|
static async build({ responsive, port }) {
|
|
const args = [`load-extension=dist/chrome`];
|
|
if (responsive) {
|
|
args.push('--auto-open-devtools-for-tabs');
|
|
}
|
|
const options = new chrome.Options().addArguments(args);
|
|
const builder = new Builder()
|
|
.forBrowser('chrome')
|
|
.setChromeOptions(options);
|
|
const service = new chrome.ServiceBuilder();
|
|
|
|
// Enables Chrome logging. Default: enabled
|
|
// Especially useful for discovering why Chrome has crashed, but can also
|
|
// be useful for revealing console errors (from the page or background).
|
|
if (process.env.ENABLE_CHROME_LOGGING !== 'false') {
|
|
service.setStdio('inherit').enableChromeLogging();
|
|
}
|
|
if (port) {
|
|
service.setPort(port);
|
|
}
|
|
builder.setChromeService(service);
|
|
const driver = builder.build();
|
|
const chromeDriver = new ChromeDriver(driver);
|
|
const extensionId = await chromeDriver.getExtensionIdByName('MetaMask');
|
|
|
|
return {
|
|
driver,
|
|
extensionUrl: `chrome-extension://${extensionId}`,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* @param {!ThenableWebDriver} driver - a {@code WebDriver} instance
|
|
*/
|
|
constructor(driver) {
|
|
this._driver = driver;
|
|
}
|
|
|
|
/**
|
|
* Returns the extension ID for the given extension name
|
|
*
|
|
* @param {string} extensionName - the extension name
|
|
* @returns {Promise<string|undefined>} the extension ID
|
|
*/
|
|
async getExtensionIdByName(extensionName) {
|
|
await this._driver.get('chrome://extensions');
|
|
return await this._driver.executeScript(`
|
|
const extensions = document.querySelector("extensions-manager").shadowRoot
|
|
.querySelector("extensions-item-list").shadowRoot
|
|
.querySelectorAll("extensions-item")
|
|
|
|
for (let i = 0; i < extensions.length; i++) {
|
|
const extension = extensions[i].shadowRoot
|
|
const name = extension.querySelector('#name').textContent
|
|
if (name === "${extensionName}") {
|
|
return extensions[i].getAttribute("id")
|
|
}
|
|
}
|
|
|
|
return undefined
|
|
`);
|
|
}
|
|
}
|
|
|
|
module.exports = ChromeDriver;
|