Есть задача автоматического измерения времени выполнения JS по отрисовке сложного интерфейса в браузере, после клика пользователя на определенных кнопках. Selenium служит для автоматической подготовке к измерению и его запуску. Окончание работы по отрисовке заданного элемента засекается по его появлению на экране через sikuli (т.к. появление элемента в DOM-дереве браузере, совершенно не означает, что он отрисован в браузере и пользователь его видит).
Но не понятно как засекать начальное время выполнение клика при запуске автотеста на IE. Оказалось, что стандартный метод клика селениума по вебэлементу в этом случае может отрабатывать 1 секунду (и это на Core i7). И непонятно в какой именно момент времени в течении этого периода был совершен клик в браузере. Это вносит огромную погрешность в измерении времени по отображению простых элементов, которые появляются за 1-2 сек.
Можно сделать запись видео и потом определить время реального клика, и внести поправку. Но тесты будут гоняться на совершенно разном железе - так что это не вариант.
Пробовал задержку работы вебдрайвера обойти через sikuli - сделал метод, в который передается вебэлемент. Из него делается скриншот и передается в sikuli как паттерн. Потом происходит клик по нему. Но столкнулся со странной особенностью - скриншот делается в правильных размерах элемента, но т.к. его координаты смещены на 100-200 пикс по вертикали, то в скриншоте оказывается не то что нужно. Применял библиотку от Яндекса - AShot, потом применил средства Selenium - все равно скриншот делается со смещением (но уже другим). Я думаю это из-за особенности очень навороченного и перегруженного интерфейса.
Подскажите, как можно засечь время клика в IE c погрешностью примерно в 100-200 мс.?
У IEDriverServer_x64 возможны проблемы с производительностью. Попробуйте IEDriverServer_Win32.
- Можете выполнить клик джаваскриптом: java - How to click an element in Selenium WebDriver using JavaScript? - Stack Overflow
- Может попробовать выполнить замер производительности на чистом JS. Отображение элемента проверять через document.elementFromPoint(x,y)
1 лайк
в селениуме есть WebDriverEventListener интерфейс, там есть beforeClickOn() и afterClickOn(). думаю, на основание этого листенера можно считать время выполнения
1 лайк
спасибо, клик через JS хорошо себя показал, длится в разных браузерах от 20 до 100 мс - это достаточно малая погрешность для моей задачи