UNPKG

@luminati-io/webdriverio8

Version:

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

52 lines (51 loc) 3.73 kB
import fs from 'node:fs/promises'; import url from 'node:url'; import { resolve } from 'import-meta-resolve'; import { enhanceElementsArray } from '../../utils/index.js'; import { getElements } from '../../utils/getElementObject.js'; import { waitToLoadReact, react$$ as react$$Script } from '../../scripts/resq.js'; let resqScript; /** * * The `react$$` command is a useful command to query multiple React Components * by their actual name and filter them by props and state. * * :::info * * The command only works with applications using React v16.x. Read more about React * selectors in the [Selectors](/docs/selectors#react-selectors) guide. * * ::: * * <example> :pause.js it('should calculate 7 * 6', async () => { await browser.url('https://ahfarmer.github.io/calculator/'); const orangeButtons = await browser.react$$('t', { props: { orange: true } }) console.log(await orangeButtons.map((btn) => btn.getText())); // prints "[ '÷', 'x', '-', '+', '=' ]" }); * </example> * * @alias browser.react$$ * @param {string} selector of React component * @param {ReactSelectorOptions=} options React selector options * @param {Object=} options.props React props the element should contain * @param {Array<any>|number|string|object|boolean=} options.state React state the element should be in * @return {ElementArray} * */ export async function react$$(selector, { props = {}, state = {} } = {}) { if (!resqScript) { const resqScriptPath = url.fileURLToPath(await resolve('resq', import.meta.url)); resqScript = (await fs.readFile(resqScriptPath)).toString(); } await this.executeScript(resqScript, []); await this.execute(waitToLoadReact); const res = await this.execute(react$$Script, selector, props, state); const elements = await getElements.call(this, selector, res, { isReactElement: true }); return enhanceElementsArray(elements, this, selector, 'react$$', [props, state]); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QkJC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9icm93c2VyL3JlYWN0JCQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDakMsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFBO0FBRTFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUc3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFHakYsSUFBSSxVQUFrQixDQUFBO0FBRXRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUV6QixRQUFnQixFQUNoQixFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBMkIsRUFBRTtJQUVyRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDZCxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDaEYsVUFBVSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDL0QsQ0FBQztJQUVELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDeEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQ25DLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FDMUIsYUFBb0IsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FDekIsQ0FBQTtJQUV2QixNQUFNLFFBQVEsR0FBNkIsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDaEgsT0FBTyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUNwRixDQUFDIn0=