ruby-on-rails - Capybara + Selenium : How to select second item in Chosen. js 多选列表?

标签 ruby-on-rails ruby-on-rails-3 selenium capybara jquery-chosen

我正在尝试使用 Capybara + Selenium 选择 Chosen.js 多选列表中初始空白后的第一项。

我有两半,但我正在努力将它们拼凑在一起。也就是说,我已经成功使用以下代码片段select an item from a select box based on its index :

def select_second_option(id)
  second_option_xpath = "//*[@id='#{id}']/option[2]"
  second_option = find(:xpath, second_option_xpath).text
  select(second_option, :from => id)
end

...下面是said to work用于选择所选字段:

def select_from_chosen(item_text, options)
  field = find_field(options[:from], visible: false)
  option_value = page.evaluate_script("$(\"##{field[:id]} option:contains('#{item_text}')\").val()")
  page.execute_script("value = ['#{option_value}']\; if ($('##{field[:id]}').val()) {$.merge(value, $('##{field[:id]}').val())}")
  option_value = page.evaluate_script("value")
  page.execute_script("$('##{field[:id]}').val(#{option_value})")
  page.execute_script("$('##{field[:id]}').trigger('liszt:updated').trigger('change')")
end

但我似乎无法让这两个概念很好地发挥作用。

如何将这些想法结合起来,使我具有 select_second_option_from_chosen(id) 形式的函数?

最佳答案

在您的支持文件夹中创建模块

module Utilities
  def select_from_chosen(item_text, options)
    field = find_field(options[:from])
    option_value = page.evaluate_script("$(\"##{field[:id]} option:contains('#{item_text}')\").val()")
    page.execute_script("$('##{field[:id]}').val('#{option_value}')")
    page.execute_script("$('##{field[:id]}').trigger('liszt:updated').trigger('change')")
  end
end

在您的spec_helper中添加

config.include(Utilities)

然后您可以在 capybara 测试中调用该函数

select_from_chosen("User", :from => "user_role_ids")

HTML

<%= f.collection_select :role_ids, [[:admin, 'Admin'],[:sonar, 'User']], :first, :last, {}, { :class => 'chzn-select' } %>

关于ruby-on-rails - Capybara + Selenium : How to select second item in Chosen. js 多选列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18706812/

相关文章:

ruby-on-rails - gon 未在 javascript 中定义错误

java - 面向 BOLDWEIGHT_BOLD 无法解析或不是字段,SOLID_FOREGROUND 无法解析或不是字段

javascript - 使用 Selenium 测试由 javascript 生成的 html

ruby-on-rails - 警告 : already initialized constant within config/routes. rb

ruby-on-rails - capybara rspec 匹配器相当于 response.should have_selector "form", :action => some_path

ruby-on-rails - 引用 has_many (Rails) 中的实例

python - Selenium webdriver driver.get(url) 挂起...有时

ruby-on-rails - 类型错误 : expected numeric

ruby-on-rails - 知道@vendor.name 后如何使 Ruby on Rails 中的 URL 对 SEO 友好?

ruby-on-rails - 轨attr_accessible rspec的检查