Capybara селен водитель, парящий элемент - PullRequest
4 голосов
/ 19 декабря 2011

В тестируемом приложении изначально скрыты некоторые элементы. Они будут отображаться через CSS при наведении на отдельный элемент:

.thread_options{
  display: none;
}
.btn_thread_options:hover .thread_options{
  display: inline;
}

Когда вы наводите курсор на элемент .btn_thread_options, отображаются некоторые ссылки, по которым я хочу, чтобы Капибара щелкала. Попытка щелкнуть по ним без каких-либо действий с помощью click_link "Send Response" выдает ошибку:

Failure/Error: click_link("Send Response")
Selenium::WebDriver::Error::ElementNotVisibleError:
  Element is not currently visible and so may not be interacted with

Попытка использовать другие способы нажатия, например

page.execute_script("$('.btn_thread_options').trigger('mouseover')")

Также не работает (тот же результат).

Также не щелкает элемент первым, чтобы попытаться заставить его навести курсор мыши:

page.find(".btn_thread_options").click

Есть ли способ заставить это работать правильно?

Ответы [ 3 ]

6 голосов
/ 16 ноября 2013

Это было добавлено к Капибаре:

find(:css, "#menu").hover
3 голосов
/ 21 декабря 2011

Вы можете попробовать отобразить элемент напрямую, а не наводить мышью.

page.execute_script("$('.thread_options').css('display','inline')")

Возможно, также проверьте настройку ignore_hidden_elements. По умолчанию используется значение false, но, возможно, у вас установлено значение true.

Или вместо отображения ни одного установите для поля большое отрицательное значение.

/* Move the element off the screen */
.thread_options{
  margin: -9999px 0 -9999px 0;
}
/* Set the desired display margins
.btn_thread_options:hover .thread_options{
  margin: 10px 0 10px 0;
}
1 голос
/ 24 декабря 2012

Я нашел способ имитировать "зависание мыши" с помощью Capybara + драйвер Selenium.Этот код работает для меня:

module Capybara
  module Node
    class Element
      def hover
        @session.driver.browser.action.move_to(self.native).perform
      end
    end
  end
end
...