Canvas программный клик вдруг игнорируется - PullRequest
0 голосов
/ 05 ноября 2019

Вот проблема:

До недавнего времени один из моих WebDriver (ChromeDriver) веб-ботов работал без сбоев в веб-игре, которая отображается в элементе HTML <canvas>, но внезапно перестала работать,Я пытаюсь щелкнуть по элементу программно, но в API WebDriver или консоли браузера не сообщается об ошибке - он просто игнорируется.

Холст, с которым у меня возникла проблема, имеет такую ​​структуру:

<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()" height="640px" width="1120px"></canvas>

Метод очень прост, нажмите на элемент HTML с заданным (x, y) смещением:

Версия Javascript:

function clickOnElem(elem, offsetX, offsetY) {
    var rect = elem.getBoundingClientRect(),
        posX = rect.left, posY = rect.top; // get elems coordinates
    // calculate position of click
    if (typeof offsetX == 'number') posX += offsetX;
    else if (offsetX == 'center') {
        posX += rect.width / 2;
        if (offsetY == null) posY += rect.height / 2;
    }
    if (typeof offsetY == 'number') posY += offsetY;
    // create event-object with calculated position
    var evt = new MouseEvent('click', {bubbles: true, clientX: posX, clientY: posY});    
    elem.dispatchEvent(evt); // trigger the event on elem
}

Вызов:

var el = document.getElementById("myElem");
clickOnElem(el, 30, 40);

Версия Webdriver (на языке Kotlin):

Actions(webDriver).moveToElement(element, offsetX, offsetY).click().perform()

И версии Javascript, и версия WebDriver в основном выполняют одно и то же действие, и обе они работают в обычных условиях для других моих ботов-холстов, нодля этого конкретного бота больше нет.

Когда я щелкаю мышью по холсту, щелчок срабатывает (анимация щелчка), но когда я делаю это программно, реакции не происходит.

Я нашел возможный ответ на эту ситуацию: разработчики могут проверить, является ли свойство события click isTrusted истинным. Это правда, если щелчок был выполнен человеком, и ложь, если он вызывается программно.


Вопрос : Есть ли у кого-нибудь еще возможные ответы, он оказался в такой ситуации или имелрешения / обходные пути?

...