質問

私のページには、入力フィールド#graph_start_dateにjqueryui datepickerがあります

次のキュウリの手順を書き込もうとしています

When I click the graph start date
Then I should see a datepicker

ステップ定義のために私が持っているものは次のとおりです。

When /I click the graph start date/ do
  find(".//*[@id='graph_start_date']").click
end

Then /^I should see a datepicker$/ do
  page.should have_xpath(".//div[@id='ui-datepicker-div' and ?????????]")
end

jQuery ui datepickerは最初にDOMに挿入されます

<div class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible" id="ui-datepicker-div"></div>

DOMがポップアップすると、含まれています

<div class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible" id="ui-datepicker-div" style="position: absolute; top: 523px; left: 167.5px; z-index: 1;">

却下された後、DOMが含まれます

<div class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible" id="ui-datepicker-div" style="position: absolute; top: 523px; left: 167.5px; z-index: 1; display: none;">
役に立ちましたか?

解決

そこには :visible => true で文書化されたオプション Capybara::Node::Matchers#has_xpath? それで:

Then /^I should see a datepicker$/ do
  page.should have_xpath(".//div[@id='ui-datepicker-div']", :visible => true)
end

ただし、これは別の問題かもしれませんが、私にとっては、Capybara駆動ブラウザに焦点が合わない場合、DatePickerはまったく表示されないため、テストに失敗します。 (時折)!

編集:

まず第一に、DatePickerは実際にはフィールドをクリックしてトリガーしたいのではなく、残念ながらCapybaraのSeleniumドライバーによってサポートされていないフォーカスであり、クリックをトリガーしたときにトリガーしませんが、ブラウザには焦点がありません。

焦点をトリガーする正しい方法は次のとおりです。

find(".//div[@id='ui-datepicker-div']").trigger('focus')

しかし、それはaを引き起こします Capybara::NotSupportedByDriverError :(

回避策には、を使用できます ハッキッシュ:

When /I focus the graph start date/ do
  page.execute_script("$('#graph_start_date').focus()")
end

(ありがとう: http://groups.google.com/group/ruby-capybara/msg/af6caeef01d978b0)

これについては、さまざまな議論や関連する問題があります。

他のヒント

#FOCUSESをフィールドに焦点を合わせ、アンカーの1つをクリックするJavaScriptを実行するだけです。その後、Capybaraに適切な値がフィールドにあることを確認します。

私は今朝同じ問題に遭遇していましたが、これが私がそれを修正した方法です。

私の機能ファイルで

@javascript # You need this javascript tag 
Scenario:Adding a date to a job 
  When I go to enter a date 
  Then I should see a date picker appear

私のステップ定義で:

When /^ I go to enter a date$/ do 
  element = find_by_id("you_date_field_id") 
  element.click 
end

The /^I should see a date picker appear$/ do 
  date = find(:xpath, "//div[@id='ui-datepicker-div']") 
end

お役に立てれば

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top