mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
ca38635d22
The driver now has a page navigation function that can navigate to any of the three primary pages used in the extension. Additional pages and support of paths can be added later as needed.
69 lines
2.0 KiB
JavaScript
69 lines
2.0 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 ({ extensionPath, responsive, port }) {
|
|
const args = [
|
|
`load-extension=${extensionPath}`,
|
|
]
|
|
if (responsive) {
|
|
args.push('--auto-open-devtools-for-tabs')
|
|
}
|
|
const options = new chrome.Options()
|
|
.addArguments(args)
|
|
const builder = new Builder()
|
|
.forBrowser('chrome')
|
|
.setChromeOptions(options)
|
|
if (port) {
|
|
const service = new chrome.ServiceBuilder()
|
|
.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
|