如何使用Capybara,Rails,MiniTest规范fill_in datepicker

Mar*_*lar 14 minitest capybara ruby-on-rails-3

我有一个form_tag,生成以下HTML:

<form accept-charset="UTF-8" action="http://www.example.com/product_page" id="dates_form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
  Min date: <input id="datepicker_mini" name="datepicker_mini" type="text" />
  Max date: <input id="datepicker_maxi" name="datepicker_maxi" type="text" />
</form>
Run Code Online (Sandbox Code Playgroud)

以上是所有生成的HTML.我已经删除了任何部分和布局,以尽可能简单地调试此问题.

datepicker字段调用jquery UI datepicker.

我想避免我的测试javascript,只需用文本日期填写日期字段.我已经尝试了fill_in "datepicker_mini", :with => "01/01/2010"但是虽然它不会导致测试失败但是当我save_and_open_page用来测试时它也没有填写该字段.

更新:测试代码

it "runs report" do
  login_test_user
  within("#dates_form") do
    fill_in "datepicker_mini", :with => "01/01/2010"
    fill_in "datepicker_maxi", :with => "01/01/2020"
  end
  save_and_open_page
end
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

谢谢.

Arm*_*ndo 23

我有同样的问题.在阅读了capybara的文档后,我的解决方案是使用page.execute_script()直接为输入设置一个值.

## fill_in "person_birthdate, with: "21/12/1980"
page.execute_script("$('#person_birthdate').val('21/12/1980')")
Run Code Online (Sandbox Code Playgroud)

我认为这有点脏,但对我有用.

陷阱:

  • 我用过Selenium驱动器.
  • 我用js:true运行示例
  • 我使用了一个名为zebra的插件来生成日期选择器,但原理是一样的.

编辑:这也适用于Poltergeist


fre*_*oid 6

我喜欢这个解决方案:

page.execute_script("$('#show_sale_date').datepicker('setDate', '01/01/2010')")
Run Code Online (Sandbox Code Playgroud)

摘自http://api.jqueryui.com/datepicker/#method-setDate


Sea*_*lls 6

如果你想模拟UI点击,这对我有用(使用javascript驱动程序).

当我的datepicker的ID是'target_date'时,导航到下个月,然后选择第15个.

page.execute_script %Q{ $('#target_date').trigger('focus') }
page.execute_script %Q{ $('a.ui-datepicker-next').trigger('click') }
page.execute_script %Q{ $('a.ui-state-default:contains("15")').trigger('click') }
Run Code Online (Sandbox Code Playgroud)