jquery-action.js

import {Action} from './action';
import {Expectation} from './expectation';
import {ElementUtil} from './element-util';

/**
 * Base DSL actions created with JQuery
 */
export class JQueryAction {
    /**
     * Clicks on element with an extra parameters.
     * This function can be used for example to perform Ctrl, Shift clicks.
     *
     * @param selector
     * @param clickEvent
     */
    static click(selector, clickEvent) {
        Expectation.displayed(selector);
        const code = (element, codeEvent) =>
            $(element).trigger($.Event('click', codeEvent)); // eslint-disable-line new-cap
        return Action.executeVoidScript(code, ElementUtil.elementFinder(selector), clickEvent);
    }

    /**
     * Performs a custom keydown event on a certain element.
     *
     * @param selector
     * @param keyCode
     */
    static keyDown(selector, keyCode) {
        Expectation.displayed(selector);
        const code = (element, codeEvent) =>
            $(element).trigger($.Event('keydown', {keyCode: codeEvent})); // eslint-disable-line new-cap
        return Action.executeVoidScript(code, ElementUtil.elementFinder(selector), keyCode);
    }

    /**
     * Performs right click on a certain element.
     */
    static rightClick(selector) {
        Expectation.clickable(selector);
        const code = (element) => {
            const elem = $(element)[0];
            const clientRect = elem.getBoundingClientRect();
            const coordinates = {pageX: clientRect.left, pageY: clientRect.top};
            const event = $.Event('contextmenu', coordinates); // eslint-disable-line new-cap
            $(element).trigger(event);
        };
        return Action.executeVoidScript(code, selector);
    }
}