diff --git a/packages/wdio-devtools-service/README.md b/packages/wdio-devtools-service/README.md index 815ed62cb3d..96cbb2670ed 100644 --- a/packages/wdio-devtools-service/README.md +++ b/packages/wdio-devtools-service/README.md @@ -35,10 +35,13 @@ In order to use the service you just need to add the service to your service lis // wdio.conf.js export.config = { // ... - services: ['devtools'], + services: [['devtools', { + debuggerAddress: '10.0.0.3:9222' + }]], // ... }; ``` +- `debuggerAddress` - optional parameter, you could set host and port. ## Usage diff --git a/packages/wdio-devtools-service/src/index.js b/packages/wdio-devtools-service/src/index.js index b5e693a6a48..9ff7c4062c6 100644 --- a/packages/wdio-devtools-service/src/index.js +++ b/packages/wdio-devtools-service/src/index.js @@ -7,7 +7,8 @@ const log = logger('@wdio/devtools-service') const UNSUPPORTED_ERROR_MESSAGE = 'The @wdio/devtools-service currently only supports Chrome version 63 and up' export default class DevToolsService { - constructor () { + constructor (options = {}) { + this.options = options this.isSupported = false } @@ -27,8 +28,14 @@ export default class DevToolsService { } try { - const { host, port } = await findCDPInterface() - const client = await getCDPClient(host, port) + let debuggerAddress + if (this.options.debuggerAddress) { + const [host, port] = this.options.debuggerAddress.split(':') + debuggerAddress = { host, port: parseInt(port, 10) } + } else { + debuggerAddress = await findCDPInterface() + } + const client = await getCDPClient(debuggerAddress) this.commandHandler = new CommandHandler(client, global.browser) } catch (err) { log.error(`Couldn't connect to chrome: ${err.stack}`) diff --git a/packages/wdio-devtools-service/src/utils.js b/packages/wdio-devtools-service/src/utils.js index ae3e03ac649..c448023ada6 100644 --- a/packages/wdio-devtools-service/src/utils.js +++ b/packages/wdio-devtools-service/src/utils.js @@ -42,7 +42,7 @@ export async function findCDPInterface () { return { host: 'localhost', port } } -export function getCDPClient (host, port) { +export function getCDPClient ({ host, port }) { return new Promise((resolve) => CDP({ host, port, diff --git a/packages/wdio-devtools-service/tests/service.test.js b/packages/wdio-devtools-service/tests/service.test.js index baa6f69da97..9a337e7ba9c 100644 --- a/packages/wdio-devtools-service/tests/service.test.js +++ b/packages/wdio-devtools-service/tests/service.test.js @@ -1,6 +1,7 @@ import DevToolsService from '../src' import logger from '@wdio/logger' +import { getCDPClient } from '../src/utils' jest.mock('../src/commands', () => { class CommandHandlerMock { @@ -52,7 +53,6 @@ test('if not supported by browser', async () => { }) test('if supported by browser', async () => { - const service = new DevToolsService() service.isSupported = true await service.before() @@ -60,6 +60,18 @@ test('if supported by browser', async () => { expect(service.commandHandler.cdp).toBeCalledWith('Page', 'enable') }) +test('initialised with the debuggerAddress as option', async () => { + const options = { + debuggerAddress: 'localhost:4444' + } + const service = new DevToolsService(options) + service.isSupported = true + await service.before() + expect(getCDPClient).toBeCalledWith({ host: 'localhost', port: 4444 }) + expect(service.commandHandler.cdp).toBeCalledWith('Network', 'enable') + expect(service.commandHandler.cdp).toBeCalledWith('Page', 'enable') +}) + test('initialization fails', async () => { jest.mock('../src/utils', () => ({ findCDPInterface: () => { diff --git a/packages/wdio-devtools-service/tests/utils.test.js b/packages/wdio-devtools-service/tests/utils.test.js index 1d349834e16..ceab91b994f 100644 --- a/packages/wdio-devtools-service/tests/utils.test.js +++ b/packages/wdio-devtools-service/tests/utils.test.js @@ -11,7 +11,7 @@ jest.mock('fs', () => ({ })) test('getCDPClient', async () => { - const cdp = await getCDPClient('localhost', 1234) + const cdp = await getCDPClient({ host: 'localhost', port: 1234 }) expect(CDP.mock.calls).toHaveLength(1) expect(CDP.mock.calls[0][0].port).toBe(1234) expect(CDP.mock.calls[0][0].host).toBe('localhost')