Как использовать Selenium :: WebDriver :: Element # click для выбора опции из элемента SELECT? - PullRequest
4 голосов
/ 29 июня 2011

Используя capybara 1.0.0 и selenium-webdriver 0.2.0 и в тесте у меня есть что-то вроде следующего, чтобы выбрать из выпадающего списка.

select 'Food & Dining', :from => 'category_id'

Тест пройден, но я получил следующую жалобу:

Selenium::WebDriver::Element#select is deprecated. Please use Selenium::WebDriver::Element#click ...

Я искал в Интернете, документы редки, кто-нибудь знает, как использовать щелчок, чтобы выбрать опцию элемента select?

Ответы [ 3 ]

10 голосов
/ 30 июня 2011

Из взгляда на источник capybara-1.0.0:

# File 'lib/capybara/node/actions.rb', line 110
def select(value, options={})
  if options.has_key?(:from)
    no_select_msg = "cannot select option, no select box with id, name, or label '#{options[:from]}' found"
    no_option_msg = "cannot select option, no option with text '#{value}' in select box '#{options[:from]}'"
    select = find(:xpath, XPath::HTML.select(options[:from]), :message => no_select_msg)
    select.find(:xpath, XPath::HTML.option(value), :message => no_option_msg).select_option
  else
    no_option_msg = "cannot select option, no option with text '#{value}'"
    find(:xpath, XPath::HTML.option(value), :message => no_option_msg).select_option
  end
end

Из взгляда на код selenium-webdriver 0.2.2, где генерируется предупреждение:

  # File 'rb/lib/selenium/webdriver/common/element.rb', line 175
  # Select this element
  #

  def select
    warn "#{self.class}#select is deprecated. Please use #{self.class}#click and determine the current state with #{self.class}#selected?"

    unless displayed?
      raise Error::ElementNotDisplayedError, "you may not select an element that is not displayed"
    end

    unless enabled?
      raise Error::InvalidElementStateError, "cannot select a disabled element"
    end

    unless selectable?
      raise Error::InvalidElementStateError, "you may only select options, radios or checkboxes"
    end

    click unless selected?
  end

так что как временное решение для надоедливого сообщения, и пока ребята-капибары не исправят его на своем конце, я добавил этот блок кода в свой файл огуречных функций / support / env.rb, вы также можете добавить его в свой spec_helper.rb илилюбой файл инфраструктуры тестирования, который загружается перед запуском теста. По сути, я открываю класс и переопределяю метод выбора и отключаю предупреждение ... просто временный взлом ... не горжусь этим ...

# June 30th, 2011
# a temporary hack to disable the annoying upstream warnings capybara > selenium-webdriver 0.2.2
# capybara folks know about this and are working on it. See:
# http://groups.google.com/group/ruby-capybara/browse_thread/thread/2cd042848332537a/7edb1699cb314862?show_docid=7edb1699cb314862
# Remove this whole block when Capybara 1.0.1 or greater are used
module Selenium
  module WebDriver
    class Element
      #
      # Select this element
      #

      def select
        #warn "#{self.class}#select is deprecated. Please use #{self.class}#click and determine the current state with #{self.class}#selected?"

        unless displayed?
          raise Error::ElementNotDisplayedError, "you may not select an element that is not displayed"
        end

        unless enabled?
          raise Error::InvalidElementStateError, "cannot select a disabled element"
        end

        unless selectable?
          raise Error::InvalidElementStateError, "you may only select options, radios or checkboxes"
        end

        click unless selected?
      end
    end
  end
end
4 голосов
/ 20 июля 2011

для тех из вас, у кого все еще есть проблемы, вы можете просто использовать последнюю капибару из основной ветки, которая должна исправить все, включая последние проблемы с Launchy.

Просто измените:

gem 'capybara'

до

gem 'capybara', :git => 'git://github.com/jnicklas/capybara.git'

тогда

bundle update

и ты хороший ^ _ ^

1 голос
/ 08 июля 2011

Вы также можете просто добавить следующее в свой Gemfile

gem 'selenium-webdriver', '0.2.1'
...