mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-29 15:50:28 +01:00
f7c37cab51
Chrome logs are now enabled for E2E tests when the 'ENABLE_CHROME_LOGS' environment variable is set to anything other than `false`. This was helpful to me in debugging Chrome crashes on CI, the ones with the error "unknown error: DevToolsActivePort file doesn't exist". This was the only way to discover the cause of the error. It's also useful for discovering console errors from the background process or from the UI. It's disabled by default because it makes the test output quite noisy and difficult to read.
76 lines
2.3 KiB
JavaScript
76 lines
2.3 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.
|
|
// 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 &&
|
|
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}`,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* @constructor
|
|
* @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;
|