xpath-селектор jquery ui datepicker - PullRequest
1 голос
/ 11 ноября 2010

На моей странице есть поле выбора даты jquery ui в поле ввода # 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>

Когда он выскочил, дом содержит

<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;">

После того, как его уволили, дом содержит

<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 ]

3 голосов
/ 21 декабря 2011

Существует опция :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

Однако это может быть другой проблемой, но для меня средство выбора даты вообще не появляется, когда водится капибара.браузер не имеет фокуса, и поэтому мой тест не пройден (иногда) !

РЕДАКТИРОВАТЬ:

Прежде всего кажется, что DatePicker делаетна самом деле не нужно, чтобы щелчок по полю вызывал срабатывание, но фокус, который, к сожалению, не поддерживается драйвером селена capybara, и он не срабатывает при щелчке, но в браузере нет фокуса.

Правильный способ активироватьфокус будет:

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 существуют различные обсуждения и актуальные вопросы:

0 голосов
/ 19 марта 2012

Сегодня утром я столкнулся с той же проблемой, и вот как я ее исправил.

В моем файле функций

@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

Надеюсь, это поможет

0 голосов
/ 17 ноября 2010

Я бы просто запустил какой-нибудь javascript, который # фокусирует поле, щелкнул 1 из якорей ... и затем позволил капибаре убедиться, что в поле верное значение.

...