UNPKG

@luminati-io/webdriverio8

Version:

Next-gen browser and mobile automation test framework for Node.js

103 lines 6.42 kB
import { serializeError } from 'serialize-error'; import WDIORepl from '@wdio/repl'; /** * * This command helps you to debug your integration tests. It stops the running browser and gives * you time to jump into it and check the state of your application (e.g. using dev tools). * Your terminal transforms into a [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) * interface that will allow you to try out certain commands, find elements and test actions on * them. * * [![WebdriverIO REPL](https://webdriver.io/img/repl.gif)](https://webdriver.io/img/repl.gif) * * If you run the WDIO testrunner make sure you increase the timeout property of the test framework * you are using (e.g. Mocha or Jasmine) in order to prevent test termination due to a test timeout. * Also avoid executing the command with multiple capabilities running at the same time. * * <iframe width="560" height="315" src="https://www.youtube.com/embed/xWwP-3B_YyE" frameborder="0" allowFullScreen></iframe> * * <example> :debug.js it('should demonstrate the debug command', async () => { await $('#input').setValue('FOO') await browser.debug() // jumping into the browser and change value of #input to 'BAR' const value = await $('#input').getValue() console.log(value) // outputs: "BAR" }) * </example> * * @alias browser.debug * @type utility * */ export function debug(commandTimeout = 5000) { const repl = new WDIORepl(); const { introMessage } = WDIORepl; /** * run repl in standalone mode */ if (!process.env.WDIO_WORKER_ID || typeof process.send !== 'function') { // eslint-disable-next-line console.log(WDIORepl.introMessage); const context = { browser: this, driver: this, $: this.$.bind(this), $$: this.$$.bind(this) }; return repl.start(context); } /** * register worker process as debugger target */ process._debugProcess(process.pid); /** * initialize repl in testrunner */ process.send({ origin: 'debugger', name: 'start', params: { commandTimeout, introMessage } }); let commandResolve = /* istanbul ignore next */ () => { }; process.on('message', (m) => { if (m.origin !== 'debugger') { return; } if (m.name === 'stop') { process._debugEnd(process.pid); return commandResolve(); } /* istanbul ignore if */ if (m.name === 'eval') { repl.eval(m.content.cmd, global, undefined, (err, result) => { if (typeof process.send !== 'function') { return; } if (err) { process.send({ origin: 'debugger', name: 'result', params: { error: true, ...serializeError(err) } }); } /** * try to do some smart serializations */ if (typeof result === 'function') { result = `[Function: ${result.name}]`; } process.send({ origin: 'debugger', name: 'result', params: { result } }); }); } }); return new Promise((resolve) => (commandResolve = resolve)); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvYnJvd3Nlci9kZWJ1Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEQsT0FBTyxRQUFRLE1BQU0sWUFBWSxDQUFBO0FBRWpDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILE1BQU0sVUFBVSxLQUFLLENBRWpCLGNBQWMsR0FBRyxJQUFJO0lBRXJCLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUE7SUFDM0IsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLFFBQVEsQ0FBQTtJQUVqQzs7T0FFRztJQUNILElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDcEUsMkJBQTJCO1FBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ2xDLE1BQU0sT0FBTyxHQUFHO1lBQ1osT0FBTyxFQUFFLElBQUk7WUFDYixNQUFNLEVBQUUsSUFBSTtZQUNaLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDcEIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN6QixDQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRWxDOztPQUVHO0lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQztRQUNULE1BQU0sRUFBRSxVQUFVO1FBQ2xCLElBQUksRUFBRSxPQUFPO1FBQ2IsTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRTtLQUMzQyxDQUFDLENBQUE7SUFFRixJQUFJLGNBQWMsR0FBRywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDekQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtRQUM3QixJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDMUIsT0FBTTtRQUNWLENBQUM7UUFFRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDOUIsT0FBTyxjQUFjLEVBQUUsQ0FBQTtRQUMzQixDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFpQixFQUFFLE1BQVcsRUFBRSxFQUFFO2dCQUMzRSxJQUFJLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDckMsT0FBTTtnQkFDVixDQUFDO2dCQUVELElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ04sT0FBTyxDQUFDLElBQUksQ0FBQzt3QkFDVCxNQUFNLEVBQUUsVUFBVTt3QkFDbEIsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsTUFBTSxFQUFFOzRCQUNKLEtBQUssRUFBRSxJQUFJOzRCQUNYLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQzt5QkFDekI7cUJBQ0osQ0FBQyxDQUFBO2dCQUNOLENBQUM7Z0JBRUQ7O21CQUVHO2dCQUNILElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQy9CLE1BQU0sR0FBRyxjQUFjLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQTtnQkFDekMsQ0FBQztnQkFFRCxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNULE1BQU0sRUFBRSxVQUFVO29CQUNsQixJQUFJLEVBQUUsUUFBUTtvQkFDZCxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUU7aUJBQ3JCLENBQUMsQ0FBQTtZQUNOLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUNyRSxDQUFDIn0=