Как подружить (WebDriver + Java) и Canvas?

Доброго всем дня!
Такая ситуация, делаем автоматизацию на проекте, работа с графиками. Раньше все рисовалось в html и не было никаких проблем) Сейчас все перевели на Canvas, что дало значимый прирост в производительности приложения но добавило проблем с автоматизацией))

Вот так выглядит сейчас наш DOM:

Посоветуйте как работать с ним ? Нужно кликать по секторам графика, брать список лейблов (CEO, HR Manager etc). узнать количество секторов.
Пробовали Sikuli он он не подходит, уж очень не стабильный(

1 лайк

а по человечески - что бы можно было работать с частями графика как с отдельыми веб элементами - на сколько мне известно, никак.
мы оставили идею автоматизировать функционал в котором используется канвас.
имхо. проще и удобнее - проверять такие вещи руками.

так просто не можем оставить)))) у нас весь функционал на это завязан)

Если не угодил sikuli, используйте JS, как нибудь так:

$(document.elementFromPoint(x, y)).click();

Ну или средствами самого webdriver’а (как у вас в java’х не знаю):

ActionChains(self._current_browser()).move_to_element(element).move_by_offset(xoffset, yoffset).click().perform()

а как получить координаты секторов??? можно получить только координаты канваса

Получаете координаты канваса и по оффсету смещаете курсор. Еще как вариант можно перед кликом узнать размер канваса и каким либо образом подогнать координаты, на случай если тестирование будет идти при разных резолюшенах экрана. Но это уже изврат :smile:

можно) но это по сути “пальцем в небо” так как мы ж не знаем на какой координате что находится)

Тогда sikuli :smiley:

А в чем проявлялась нестабильность sikuli? Каков был ваш алгоритм распознавания?

малейшие изменения картинки фейлили тест, плюс нужно всегда иметь огромную пачку скриншотов актуальными

А что если брать текст относительно цвета со смещением? Находим зону по цвету, смещаемся при помощи above / below / right / left API, берем текст, сравниваем с expected.

Дополню автора, так как вместе работаем над этой задачей:)

Есть кейсы в которых надо вычитывать значения которые отображаются (текст), распознавание текста у Sikuli храмает, пробывали прикрутить другие библиотеки, но сервер CentOS, а либы которые могли бы помочь работают нормально на Windows (хотя может плохо искал).

Есть кейс на определение количества сегментов. Это можно сделать через вычетку текста, но опять таки Sikuli плохо с этим справляется.

Cross-browsing. Тесты должны проганяться на Chrome (on CentOS), FF(Windows), Safari, IE10, IE 11. Рендеринг вносит свои коррективы и соответственно один скриншот для всех браузеров не работает, а это +100 к суппорту скриншотов.

в сторону OpenCV не смотрели?

та от думал, но там выйдет ацки много всего надо будет делать( сроки не сильно позволяют

Так SikuliX итак построен на базе OpenCV. А распознавание текста реализовано через Tesseract.

Почему бы не повесить unit-тесты на javascript код, который выводит графики и сверять текст на графике именно там, а не в браузере?

3 лайка