1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-02 06:07:06 +01:00
metamask-extension/test/e2e/webdriver/firefox.js
Mark Stacey 36869a4350
Migrate version from _base manifest to package.json (#11029)
The version field is now stored in the main `package.json` file rather
than in the base manifest. It is built into the final manifest during
the build script.

This makes it easier to communicate what the current version should be
to our `auto-changelog` script. It's also generally a more conventional
place to keep track of the version, even considering that we're not
publishing to npm.
2021-05-10 14:16:03 -07:00

88 lines
2.6 KiB
JavaScript

const fs = require('fs');
const os = require('os');
const path = require('path');
const { Builder, By, until } = require('selenium-webdriver');
const firefox = require('selenium-webdriver/firefox');
const { version } = require('../../../package.json');
/**
* The prefix for temporary Firefox profiles. All Firefox profiles used for e2e tests
* will be created as random directories inside this.
* @type {string}
*/
const TEMP_PROFILE_PATH_PREFIX = path.join(os.tmpdir(), 'MetaMask-Fx-Profile');
/**
* A wrapper around a {@code WebDriver} instance exposing Firefox-specific functionality
*/
class FirefoxDriver {
/**
* Builds a {@link FirefoxDriver} instance
* @param {Object} options - the options for the build
* @returns {Promise<{driver: !ThenableWebDriver, extensionUrl: string, extensionId: string}>}
*/
static async build({ responsive, port }) {
const templateProfile = fs.mkdtempSync(TEMP_PROFILE_PATH_PREFIX);
const options = new firefox.Options().setProfile(templateProfile);
const builder = new Builder()
.forBrowser('firefox')
.setFirefoxOptions(options);
if (port) {
const service = new firefox.ServiceBuilder().setPort(port);
builder.setFirefoxService(service);
}
const driver = builder.build();
const fxDriver = new FirefoxDriver(driver);
const extensionId = await fxDriver.installExtension(
`builds/metamask-firefox-${version}.zip`,
);
const internalExtensionId = await fxDriver.getInternalId();
if (responsive) {
await driver.manage().window().setRect({ width: 320, height: 600 });
}
return {
driver,
extensionId,
extensionUrl: `moz-extension://${internalExtensionId}`,
};
}
/**
* @constructor
* @param {!ThenableWebDriver} driver - a {@code WebDriver} instance
*/
constructor(driver) {
this._driver = driver;
}
/**
* Installs the extension at the given path
* @param {string} addonPath - the path to the unpacked extension or XPI
* @returns {Promise<string>} the extension ID
*/
async installExtension(addonPath) {
return await this._driver.installAddon(addonPath, true);
}
/**
* Returns the Internal UUID for the given extension
* @returns {Promise<string>} the Internal UUID for the given extension
*/
async getInternalId() {
await this._driver.get('about:debugging#addons');
return await this._driver
.wait(
until.elementLocated(
By.xpath("//dl/div[contains(., 'Internal UUID')]/dd"),
),
1000,
)
.getText();
}
}
module.exports = FirefoxDriver;