WebdriverIO предоставляет богатый набор возможностей для взаимодействия с элементами веб-страницы, включая наведение мыши и работу с контекстными меню. Эти действия часто используются при тестировании сложных интерфейсов, где элементы отображаются только при наведении или требуют правого клика для вызова дополнительных опций.
Наведение мыши позволяет имитировать перемещение курсора на элемент,
что может вызывать всплывающие подсказки, раскрытие выпадающих меню или
изменение состояния элемента. В WebdriverIO для этого используется метод
moveTo.
const menuItem = await $('#menu-item');
await menuItem.moveTo();
Особенности метода moveTo:
await menuItem.moveTo({ xOffset: 10, yOffset: 20 });
Наведение мыши не вызывает клика и не изменяет фокус элемента. Это важно при тестировании интерфейсов, где визуальные эффекты зависят от именно наведения, а не от клика.
Метод автоматически учитывает текущую прокрутку страницы, но если элемент скрыт за пределами видимой области, может потребоваться предварительное скроллирование:
await menuItem.scrollIntoView();
await menuItem.moveTo();
moveTo с
ожиданиями (waitForDisplayed) для надежного выполнения
теста:await menuItem.waitForDisplayed({ timeout: 5000 });
await menuItem.moveTo();
Контекстное меню обычно вызывается правым кликом мыши. В WebdriverIO
для этого используется метод click с опцией
{ button: 'right' }.
const element = await $('#context-menu');
await element.click({ button: 'right' });
После вызова контекстного меню можно работать с его пунктами так же, как с обычными элементами страницы:
const deleteOption = await $('#delete-option');
await deleteOption.click();
Особенности работы с контекстным меню:
waitForDisplayed.browser.performActions для имитации
сложных событий мыши.performActions для сложных сценариевМетод performActions позволяет имитировать
последовательность действий мыши и клавиатуры, включая:
Пример: навести мышь на элемент, удерживать правую кнопку, переместить курсор и отпустить:
await browser.performActions([{
type: 'pointer',
id: 'mouse',
parameters: { pointerType: 'mouse' },
actions: [
{ type: 'pointerMove', origin: await $('#menu-item'), x: 10, y: 10 },
{ type: 'pointerDown', button: 2 },
{ type: 'pointerMove', origin: 'pointer', x: 50, y: 0 },
{ type: 'pointerUp', button: 2 }
]
}]);
Этот подход особенно полезен для тестирования сложных drag-and-drop или контекстных меню, которые зависят от точного положения курсора.
Комбинирование наведения и правого клика позволяет тестировать сценарии, где элементы становятся доступными только при наведении:
const parent = await $('#parent-menu');
await parent.moveTo();
const child = await $('#child-option');
await child.click({ button: 'right' });
Важно помнить, что последовательность действий и ожиданий напрямую
влияет на стабильность теста. Любые динамические эффекты на странице
требуют использования методов waitForDisplayed или
waitUntil.
moveTo и click сработали
корректно.xOffset и
yOffset.Наведение мыши и работа с контекстными меню в WebdriverIO позволяют создавать тесты, максимально приближенные к реальному пользовательскому взаимодействию, обеспечивая высокую точность и надежность автоматизации.