我的页面在输入字段上有一个jquery ui datepicker #graph_start_date
我正在尝试编写以下黄瓜步骤
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;">
答案 0 :(得分:3)
: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的selenium驱动程序支持,并且当你触发点击但浏览器没有焦点时它不会触发。
触发焦点的正确方法是:
find(".//div[@id='ui-datepicker-div']").trigger('focus')
但是提出Capybara::NotSupportedByDriverError
:(
要解决此问题,您可以使用 hackish :
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)
Google网上论坛中有各种各样的讨论和相关问题:
答案 1 :(得分:0)
我会运行一些javascript,其中#focuses字段,点击1个锚点...然后让capybara确保正确的值在字段中。
答案 2 :(得分:0)
今天早上我遇到了同样的问题,这就是我修复它的方法。
在我的专题文件中
@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
希望这有帮助