watir-webdriver element.hover на окнах активирует наведение, но только на долю секунды - PullRequest
2 голосов
/ 12 января 2012

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

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

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

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

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

Итак, мой вопрос таков:

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

1 Ответ

3 голосов
/ 14 января 2012

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

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

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

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

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

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

...