Protractor — это инструмент для автоматизированного тестирования
Angular-приложений, который базируется на WebDriverJS. Среди множества
действий с элементами веб-страницы важное место занимают двойной
клик и контекстное меню, поскольку они часто
используются для взаимодействия с элементами, недоступными через
стандартный click().
Для выполнения двойного клика в Protractor используется класс
browser.actions(), предоставляющий возможность эмулировать
сложные действия пользователя.
Пример выполнения двойного клика:
const elem = element(by.css('.double-click-target'));
browser.actions().doubleClick(elem).perform();
Пояснения:
element(by.css('.double-click-target')) — локатор
элемента, с которым будет произведён двойной клик.browser.actions() создаёт цепочку действий
пользователя.doubleClick(elem) инициирует двойное нажатие на
выбранный элемент.perform() завершает и выполняет все накопленные
действия.В случаях, когда требуется двойной клик в конкретной точке элемента:
const elem = element(by.css('.double-click-target'));
browser.actions()
.mouseMove(elem, {x: 10, y: 5}) // смещение относительно верхнего левого угла элемента
.doubleClick()
.perform();
Особенности:
click() дважды подряд не всегда
срабатывает как настоящий двойной клик, особенно если на сайте есть
обработчики событий dblclick.Контекстное меню активируется через правый клик на
элементе. В Protractor это также реализуется через
browser.actions():
const elem = element(by.css('.context-menu-target'));
browser.actions().click(elem, protractor.Button.RIGHT).perform();
Разбор кода:
click(elem, protractor.Button.RIGHT) указывает нажатие
правой кнопкой мыши.protractor.Button.RIGHT — константа, определяющая
именно правый клик.perform() браузер инициирует открытие
контекстного меню.Если требуется выбрать пункт меню после открытия:
const menuItem = element(by.cssContainingText('.context-menu-item', 'Удалить'));
browser.actions()
.click(elem, protractor.Button.RIGHT) // открываем меню
.click(menuItem) // выбираем пункт
.perform();
Особенности работы с контекстным меню:
ExpectedConditions:const EC = protractor.ExpectedConditions;
browser.wait(EC.visibilityOf(menuItem), 5000, 'Пункт меню не появился');
browser.actions().click(menuItem).perform();
Иногда требуется комбинация действий, например, двойной клик по
элементу с последующим открытием контекстного меню. Для этого
browser.actions() поддерживает цепочки:
const target = element(by.css('.target'));
browser.actions()
.doubleClick(target)
.click(target, protractor.Button.RIGHT)
.perform();
Такой подход обеспечивает воспроизведение сложных пользовательских сценариев в автоматических тестах.
Явные ожидания Для двойного клика и правого клика рекомендуется использовать ожидания, чтобы элемент был доступен и видим:
const EC = protractor.ExpectedConditions;
browser.wait(EC.elementToBeClickable(elem), 5000);Проверка реакции на события После двойного клика или вызова контекстного меню важно проверять изменение состояния страницы или появление элементов:
const popup = element(by.css('.popup'));
browser.wait(EC.visibilityOf(popup), 3000);Смещения при кликах Иногда элемент может быть
частично перекрыт. В этом случае помогает указание смещения в
mouseMove перед действием.
Кастомные меню и динамические элементы Всегда использовать локаторы, учитывающие уникальность пунктов меню, чтобы не было случайного клика по неправильному элементу.
Protractor предоставляет гибкие средства для моделирования реального поведения пользователя, включая двойной клик и контекстные действия, что делает тесты более надежными и приближенными к реальной работе приложения.