-
Notifications
You must be signed in to change notification settings - Fork 96
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add actions support #103
Comments
Разобраться с actions:
|
начать с w3c-спеки https://www.w3.org/TR/webdriver/#actions |
пока ответ на первые 3 пункта
|
Предположу, что можно будет сделать макросы |
Общий подход такой: сперва делаем низкоуровневое апи, которое буквально принимает все параметры. Затем на базе их колбасим наиболее нужные обертки и макросы. |
Экшены в результате это массив, каждый элемент которого описывает виртуальный источник ввода.
В стандарте есть понятие Пример единичного действия: Насколько я понял, перечисленные источники, начинают выполнять действия одновременно. во второй: Длина тика определяется временем, которое занимает самое долгое действие. Пример карты:
|
Теперь основная задача в том, как выразить это в коде. Для начала будет низкоуровневая функция, которая принимает уже готовый словарь. Так мы предоставим доступ для прошаренных пользователей и сложных случаев. Кроме того, должны быть функции или макросы, чтобы выразить эту структуру в коде. Многие действия работают по принципу вкл\выкл, поэтому они могут быть обертками вокруг чего-то еще. Например, условная Или это может быть макрос, который работает на динамической переменной. В момент байдинга в нее что-то аккумулируется как в список или вектор. Я предлагаю следующее: начать не с функций, а представить, как будто у нас все готово, и нужно только описать структуру. Дальше будем смотеть: если ложится на синтаксис кложи, сделаем функции, а если нет -- макрос. |
Получается, у нас два уровня: источник ввода и действия к нему. Напрашивается что-то такое, например чтобы с нажатым ctrl нажать А, или сдвинуть мышку с зажатой кнопкой (with-key
(with-key-down Ctrl
(key-press A)))
(with-pointer
(with-pointer-down
(pointer-move ...))) |
У макросов должны быть динамические переменные, куда они будут сваливать все добро. Рассмотреть вариант с функцией и стрелочными оператором: (-> (make-pointer)
(add-key-down ...)
(add-key-up ...))
(-> (make-pointer)
(add-key-down A)
(add-key-up A)
(wrap-key-press Ctrl)) |
Функция |
Стрелочный вариант хорош тем, что без состояния. По аналогии, сначала делаем общую функцию, например make-action-input, а потом помогаторы make-pointer, make-pen и так далее. То же самое для добавления действий. |
И подчеркну: перед тем, как писать код, было бы неплохо составить воображаемую версию и скинуть ее сюда или в гист. |
Еще уточню что может быть параметром
Из доки ниже я не понял, что такое "Object that represents a web element". Как-то можно передать элемент? |
да, можно добавить id-шник элемента |
Текущий PR хороший, можно смерджить. Разве что тесты упали, но я не смотрел почему. Осталось сделать:
|
https://github.com/SeleniumHQ/selenium/tree/88cd74cb4ec47552a4f8feb591d9af94fe030581/py/selenium/webdriver/common/actions
https://github.com/SeleniumHQ/selenium/blob/88cd74cb4ec47552a4f8feb591d9af94fe030581/py/selenium/webdriver/common/actions/key_actions.py#L30
https://github.com/SeleniumHQ/selenium/blob/88cd74cb4ec47552a4f8feb591d9af94fe030581/py/selenium/webdriver/common/actions/interaction.py
https://github.com/SeleniumHQ/selenium/blob/88cd74cb4ec47552a4f8feb591d9af94fe030581/py/selenium/webdriver/common/actions/key_input.py
The text was updated successfully, but these errors were encountered: