Основные понятия
Actions
Actions builder = new Actions(driver);
- Это билдер сложных пользовательских взаимодействий
- Позволяет создавать цепочки действий (action chains)
- Не выполняет действия сразу - только строит последовательность
- Методы возвращают объект Actions (fluent interface)
Action
Action complexAction = builder.build();
- Это единое действие, собранное из последовательности
- Выполняется при вызове perform()
- Реализует метод perform() для выполнения
Ключевые различия
Характеристика | Actions | Action |
Тип | Класс-билдер | Интерфейс |
Назначение | Построение цепочек действий | Выполнение собранных действий |
Методы | click(), sendKeys(), dragAndDrop() | perform() |
Выполнение | Требует вызова build() и perform() | Выполняется сразу через perform() |
Fluent interface | Да (возвращает this) | Нет |
Примеры использования
1. Простая цепочка с Actions
new Actions(driver)
.moveToElement(menu)
.pause(500)
.click(hiddenSubmenu)
.perform();
2. Создание и выполнение Action
Actions builder = new Actions(driver);
Action series = builder
.moveToElement(element)
.click()
.sendKeys("text")
.build(); // Создает Action
series.perform(); // Выполняет
3. Комплексный пример
Action dragAndDrop = new Actions(driver)
.clickAndHold(source)
.moveToElement(target)
.release()
.build();
dragAndDrop.perform();
Когда что использовать
Actions лучше для:
- Простых последовательностей
- Быстрых операций без сохранения
- Fluent-стиля программирования
Action лучше для:
- Повторного использования сложных действий
- Когда нужно отделить построение от выполнения
- Для передачи действий как параметров
Особенности реализации
Actions содержит:
- Ссылку на драйвер
- Коллекцию действий (ActionSequence)
- Методы-билдеры для добавления действий
Action представляет:
- Единицу поведения
- Метод perform() для выполнения
- Может быть составным (CompositeAction)
Распространенные ошибки
-
Забывают вызвать perform():
new Actions(driver).click(button); // Не выполнится!
-
Путают порядок методов:
// Неправильно:
new Actions(driver).perform().click(button);
-
Используют без build() когда нужно:
Action action = new Actions(driver).click(button); // Ошибка!
Производительность
- Actions + perform() немного быстрее для разовых операций
- Action выгоднее при многократном использовании
- Разница обычно незначительна для простых сценариев
Резюмируем
- Actions - это "конструктор" для создания цепочек действий
- Action - это собранная последовательность, готовая к выполнению
- В большинстве случаев используют Actions с perform()
- Action полезен для сложных, повторно используемых сценариев
- Всегда завершайте цепочку вызовом perform()
Профессиональный совет: Для часто используемых сложных взаимодействий (например, кастомный drag-and-drop) создавайте отдельные методы, возвращающие Action, чтобы улучшить читаемость и повторное использование кода.