jquery ui datepicker的xpath选择器

时间:2010-11-11 20:36:51

标签: jquery-ui cucumber capybara

我的页面在输入字段上有一个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;">

3 个答案:

答案 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

希望这有帮助