mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-02 06:07:06 +01:00
36869a4350
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.
88 lines
2.6 KiB
JavaScript
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;
|