jquery ui datepickerのxpathセレクター
質問
私のページには、入力フィールド#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)
これについては、さまざまな議論や関連する問題があります。
- http://groups.google.com/group/ruby-capybara/browse_thread/thread/64b96cb15cda3f36
- http://groups.google.com/group/ruby-capybara/browse_thread/thread/e7e88b2d8ab3b61e
- http://groups.google.com/group/ruby-capybara/browse_thread/thread/ebcdad1a084f57a8
- http://code.google.com/p/selenium/issues/detail?id=543
- http://code.google.com/p/selenium/issues/detail?id=157
他のヒント
#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
お役に立てれば