【问题标题】:Capybara and Select2 Version 4Capybara 和 Select2 第 4 版
【发布时间】:2015-04-29 22:15:12
【问题描述】:

如何使用 capybara 填写/选择 select2 搜索框(通过 ajax 获取结果)。

在 Rails 项目中使用最新的 version 4 和 select2 和最新的 capybara/rspec。

SO 和其他地方有很多关于如何将 Capybara 与 Select2 3.x 一起使用但不是 version 4 的示例,这是一个重写。

【问题讨论】:

    标签: ruby-on-rails capybara jquery-select2-4


    【解决方案1】:

    为此,您需要创建自己的支持功能(如果您想多次使用它。)

    我有一个 select2 版本 3.x.x 的解决方案。这也应该适用于 4。

    为此,您需要创建帮助程序spec/support/feature/xyz.helper.rb,该文件应如下所示:

    module Feature
      module XYZHelper
        def select2(value, element_selector)
          first("##{element_selector}").find(".select2-choice").click
          find(:xpath, "//body").find(".select2-results li", text: value).click
        end
      end
    end
    

    并且来自呼叫规范包括include Feature::XYZHelper。你可以像这样使用它:

    select2("Text value here", "Id of selector")
    

    【讨论】:

    • 版本 4 完全重写,因此您的代码中的某些 css 选择器不再存在。
    • 我只是给一个完成任务的方法
    • 欣赏它。谢谢。
    • @RobZolkos 你是怎么解决这个问题的?
    【解决方案2】:

    对于 4.0,看起来它们实际上简化了很多。对于单个选择,您可以只包含此辅助方法:

    def select2(value, **options)
      first("#select2-#{options[:from]}-container").click
      find(".select2-results__option", text: value).click
    end
    

    到目前为止对我有用,但我还没有尝试过更多自定义版本的选择器。

    【讨论】:

    • 你能举一些关于如何使用这个助手的例子吗?我无法让它工作:(
    • @FabianoArruda 检查this link.
    • @a.barbieri 我知道如何包含自定义方法。抱歉,如果我不清楚我的问题,但我想看到的是水豚的一些使用示例(例如,您如何在规范示例中调用此方法,您将什么作为值传递等等)。由于它对我不起作用,我想知道我的规格是否有问题。
    • 如果您提出新问题,我很乐意回答。
    【解决方案3】:

    我知道这是旧的,但这里的大多数答案(以及许多其他帖子)对于 select2 版本 4 及更高版本对我来说都不起作用。我为它编写了自己的函数,该函数也适用于页面上的多选和多个 select2 输入。但是,您需要将 select2 包装在具有特定 id 的 div 中,以便找到正确的。

    def select2(values, id)
        values.each do |val|
            if page.has_no_css? ".select2-dropdown"
                within(id) do 
                    find('span.select2').click 
                end
            end
            within ".select2-dropdown" do
                find('li', text: val).click
            end
        end
    end
    

    使用示例:

    select2([value_to_select], "id of div containing desired select2")
    

    您必须传递一个值数组以供选择,即使它是单个选择。对于其中的每一个,它将打开所需 select2 的下拉列表,然后选择值。

    【讨论】:

      【解决方案4】:

      capybara-select-2 gem 支持 select2 的 2/3/4 版本。默认情况下,它需要 select2 版本 4。如果您使用 select2 版本 2 或 3,您可以configure 其他版本

      只需将 gem 添加到 Gemfile 中的测试组

      group :test do
        gem 'capybara-select-2'
      end
      

      现在您可以在 Cucumber 或 RSpec 中使用 select2 测试助手:

      select2 'Buy Milk', css: '#todo'
      
      # Search options
      select2 'Buy Milk', from: 'Things to do', search: true
      
      # Create new options
      select2 'Millennials', from: 'Generations', tag: true
      

      更新: 从版本0.3.0CapybaraSelect2开始自动检测select2版本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多