@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
52 lines (51 loc) • 3.73 kB
JavaScript
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=