最近遇到一个用 HBuilder 编写的 app,遇到 chromedriver 无法触发 webview 中的 tap 事件,经过查看 HBuilder 中的 mui.js 终于把问题解决了
看解决方法:
解读 mui.js

/**
     * trigger event
     * @param {type} element
     * @param {type} eventType
     * @param {type} eventData
     * @returns {_L8.$}
     */
    $.trigger = function(element, eventType, eventData) {
        element.dispatchEvent(new CustomEvent(eventType, {
            detail: eventData,
            bubbles: true,
            cancelable: true
        }));
        return this;
    };
    var dispatchEvent = function(event) {
        var targetElement = $.targets.click;
        if (targetElement) {
            var clickEvent, touch;
            // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect
            if (document.activeElement && document.activeElement !== targetElement) {
                document.activeElement.blur();
            }
            touch = event.detail.gesture.changedTouches[0];
            // Synthesise a click event, with an extra attribute so it can be tracked
            clickEvent = document.createEvent('MouseEvents');
            clickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
            clickEvent.forwardedTouchEvent = true;
            targetElement.dispatchEvent(clickEvent);
        }
    };
    window.addEventListener('tap', dispatchEvent);

在 mui.js 中,tap 事件在这里做了二次封装,这样我们直接用 mui.js 的 tap 就可以
写法为:
java 中调用 js,找到元素

((JavascriptExecutor)driver).executeScript("找到元素.dispatchEvent(new CustomEvent('tap', {detail: {},bubbles: true,cancelable: true}));");

chromedriver 触发 webview 中的 tap 事件就可以实现了。
解释:

找到元素.dispatchEvent(new CustomEvent('tap', {detail: {},bubbles: true,cancelable: true}));

这里的 element 就是要找的元素,eventType 就是 tap

element.dispatchEvent(new CustomEvent(eventType, {
            detail: eventData,
            bubbles: true,
            cancelable: true
        }

写的有点水,仅供参考吧!


↙↙↙阅读原文可查看相关链接,并与作者交流