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