watir-webdriver element.hover в Windows активирует наведение, но только на долю секунды

Я использую Ruby и Cucumber для функционального тестирования веб-приложения. Я использую watir-webdriver для управления веб-браузером.

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

Я пытаюсь использовать метод element.hover watir-webdriver для запуска события наведения. Версия watir-webdriver в Ruby gems в настоящее время не содержит этот коммит однако, чтобы добавить событие наведения к элементу, я исправил класс элемента, чтобы добавить эту функциональность.

При выполнении моих тестов на моем Mac с использованием Chrome все в порядке. Наведение даже срабатывает, и я могу щелкнуть ссылку в отображаемом меню.

Однако, когда я устанавливаю среду Ruby на компьютере коллеги с Windows, мы не получаем таких же результатов. Однако при использовании Firefox событие наведения действительно срабатывает только на долю секунды, а затем раскрывающееся меню исчезает. Это приводит к сбою теста, так как следующий шаг с огурцом пытается щелкнуть ссылку, существующую в раскрывающемся меню, которого больше не существует.

Итак, мой вопрос заключается в следующем:

Кто-нибудь знает, как в Windows при использовании Cucumber и watir-webdriver обеспечить сохранение состояния наведения после вызова element.hover?


person Aaron Chambers    schedule 12.01.2012    source источник
comment
Нет, но вместо этого вы можете запустить событие клика. Раньше у меня была проблема с этим, связанная с тем, как мышь двигалась в открытых меню. Решение состояло в том, чтобы просто щелкнуть их. Вообще (мое здесь мнение) навигация и тесты меню малоценны. Вы можете либо пропустить их, запустить на ограниченном количестве наборов ОС/браузеров, либо сохранить их для ручного тестирования. Удачи.   -  person Dave McNulla    schedule 12.01.2012
comment
Правда, можно спорить о том, добавляет ли этот тест большую ценность. Но я пытаюсь внедрить подход BDD к существующему приложению, которое практически не имеет функциональных тестов. И одна из первых и самых простых историй — меню навигации при наведении. Так что мы просто пытаемся сделать все правильно. Спасибо за ваши комментарии, приятель.   -  person Aaron Chambers    schedule 13.01.2012


Ответы (1)


Я видел это (до появления метода .hover), где реакция состояния «зависания» осуществляется через псевдокласс CSS. .hover был введен, чтобы попытаться обойти это. Если это ваше обстоятельство, и это не работает для вас, возможно, было бы хорошо создать проблему с проект watir-webdriver на Github.

Для большинства вещей, которые использовали события «onhover» в HTML/Javascript, было достаточно запустить событие «onhover» для объекта, и я в порядке. Это то, что большинство из нас делали до того, как недавно был добавлен .hover. Но при работе с элементами, основанными на CSS, проклятый браузер, казалось, почти мгновенно «видел», что фактическая мышь не находится над объектом, и подтверждал настройку отображения базового класса CSS.

Таким образом, вы можете найти элемент в DOM, вы просто не можете щелкнуть по нему, потому что он не отображается. (что является разумным ограничением, поскольку ни один пользователь не может щелкнуть по нему в этом состоянии)

Мы обсудили способы решения этой проблемы, , из-за которой element#hover добавлялся в watir- webdriver. Вы можете попробовать некоторые из предложенных там предложений, возможно, переместив мышь на объект, но такие методы немного экспериментальны.

Еще одно решение, которое я использовал ранее, — это использовать execute_script для выполнения вызова jquery, который изменил CSS для класса «не наведения» объекта, чтобы сделать его видимым, что затем позволяет щелкнуть его органически. Это хорошее решение, когда действие щелчка не приводит к переходу системы на новую страницу.

Для случаев, когда пункт меню представляет собой простую ссылку, я бы предложил получить значение HREF из ссылки, а затем просто использовать «browser.goto», чтобы отправить туда браузер. Вы можете идентифицировать ссылку так же, как если бы вы щелкали по ней, и, таким образом, вам не нужно жестко кодировать место назначения ссылки в своем коде, вы просто работаете над тем фактом, что мы не позволим вам щелкнуть скрытый элемент. (по уважительной причине) Если .hover не работает, это был бы мой первый выбор, если это простая ссылка, ведущая на href, а не причудливые вещи на стороне клиента.

person Chuck van der Linden    schedule 14.01.2012
comment
в проблеме, вызвавшей element#hover... Ссылка не работает. - person Danyal Aytekin; 13.08.2014