1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/test/e2e/webdriver/chrome.js
Mark Stacey 3732c5f71e
Add JSDoc ESLint rules (#12112)
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.
2022-01-07 12:27:33 -03:30

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;