Проблема с указателем даты в тесте на капибару - PullRequest
7 голосов
/ 19 июля 2011

Я использую Capybara 1.0.0 для моего приемочного теста, и мне очень понравилось, пока я не застрял в одном месте. Моя проблема в том, что я использовал jQuery datepicker, и сейчас я не понимаю, как выбрать дату из datepicker в моей тестовой спецификации.

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

24 голосов
/ 28 февраля 2012

Может быть, это хорошая идея, чтобы проверить это, потому что форматы даты могут вызвать проблемы при сохранении в базу данных.Вот как я это сделал:

page.execute_script %Q{ $('#auction_event_date').trigger("focus") } # activate datetime picker
page.execute_script %Q{ $('a.ui-datepicker-next').trigger("click") } # move one month forward
page.execute_script %Q{ $("a.ui-state-default:contains('15')").trigger("click") } # click on day 15

Тест должен выполняться с драйвером javascript.

2 голосов
/ 14 июня 2014

Мне не нравится использовать JavaScript.Я просто выставляю поле alt, если Rails.env.test?и нацелиться на альт напрямую с помощью Capybara.

Я создаю вспомогательный метод, который генерирует ввод даты и скрытые поля (это немного длинно, и я считаю ненужным показывать все это).В этом методе я использую:

 def date_picker(options={})

    alt_field = Rails.env.test? ? "string" : "hidden"
    input = "#{ options[:f].input options[:field], as: alt_field.to_sym, input_html: {id: "#{options[

«as: alt_field.to_sym» - это то, что раскрывает скрытое поле date_picker alt.Затем я могу нацелиться на поле ввода alt (которое обрабатывается моделью) в Capybara с помощью:

  fill_in 'userdoc[issued_date]', with: "2013-05-02

Легко, довольно чисто, без JavaScript ...

0 голосов
/ 15 ноября 2015

По какой-то причине page.execute_script ответ сверху не сработал для меня. Тем не менее, это хакерский способ открыть календарь.

#trigger opening of calendar    
fill_in('#auction_event_date', with: "2013-05-01) 
#select specific day
click_link("27")
0 голосов
/ 19 октября 2015

Посмотрите мой пример, может быть, он вам поможет

  find("input.form-control.date-mask[ng-model='scope.values.created_at.start']").set(Date.yesterday)
...