UNPKG

@luminati-io/webdriverio8

Version:

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

55 lines (54 loc) 2.84 kB
import { ELEMENT_KEY } from '../../constants.js'; import { getBrowserObject } from '../../utils/index.js'; import isElementClickableScript from '../../scripts/isElementClickable.js'; /** * * Return true if the selected DOM-element: * * - exists * - is visible * - is within viewport (if not try scroll to it) * - its center is not overlapped with another element * - is not disabled * * otherwise return false. * * :::info * * Please note that `isClickable` works only in web browser and in mobile webviews, * it doesn't work in mobile app native context. Also, As opposed to other element * commands WebdriverIO will not wait for the element to exist to execute this command. * * ::: * * <example> :isClickable.js it('should detect if an element is clickable', async () => { const el = await $('#el') let clickable = await el.isClickable(); console.log(clickable); // outputs: true or false // wait for element to be clickable await browser.waitUntil(() => el.isClickable()) }); * </example> * * @alias element.isClickable * @return {Boolean} true if element is clickable * @uses protocol/selectorExecute, protocol/timeoutsAsyncScript * @type state * */ export async function isClickable() { if (!await this.isDisplayed()) { return false; } if (this.isMobile && await this.getContext() === 'NATIVE_APP') { throw new Error('Method not supported in mobile native environment. It is unlikely that you need to use this command.'); } const browser = getBrowserObject(this); return browser.execute(isElementClickableScript, { [ELEMENT_KEY]: this.elementId, // w3c compatible ELEMENT: this.elementId // jsonwp compatible }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNDbGlja2FibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvZWxlbWVudC9pc0NsaWNrYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDdkQsT0FBTyx3QkFBd0IsTUFBTSxxQ0FBcUMsQ0FBQTtBQUUxRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVztJQUM3QixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQTtJQUNoQixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQUMsc0dBQXNHLENBQUMsQ0FBQTtJQUMzSCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFO1FBQzdDLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUI7UUFDaEQsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CO0tBQ3pCLENBQUMsQ0FBQTtBQUM1QixDQUFDIn0=