2015-04-24 2 views
0

Я пытаюсь написать тест огурца на страницу, содержащую датупик. Клянусь, вчера это работало, но не так много сегодня.cucumber capybara test date picker выбирает неправильный день

Then(/^select date (\d+) day(?:s|) prior to today$/) do |n| 
    day=Date.today-(n.to_i) 
    target = Date.strptime("#{day}",'%Y-%m-%d') 
    target_month_year = target.strftime('%B %Y') 
    selected_month_year = (find('.datepicker-switch').native.text) 
     unless target_month_year == selected_month_year 
      find('.prev').click 
      sleep 1 
     end 
    find('.day', :text => "#{day.day}", match: :prefer_exact).click 
    sleep 2 
end 

Затем у меня есть отдельный тест, который проверяет правильность даты после выбора. Я проверил, что day.day дает мне правильный результат, включая puts (day.day), а также все остальные переменные. Я думаю, проблема связана с совпадающей проблемой, сегодняшняя дата - 04/24/2015, и я выбираю 15 дней назад. Таким образом, datepicker, который отображает месяц и год выше и позволяет вам выбрать предыдущий или следующий, то показанные дни соответствуют количеству дней в этом конкретном месяце. и несколько дней до и после. дни за предыдущий месяц - это класс = «старый день», а те, которые отображаются за месяц, - class = «day», а для следующего месяца class = «новый день». поэтому месяц, который я хочу, - апрель, а день - девятый. он продолжает выбирать 29 марта. который является первым днем, указанным на странице, содержащей «9». но класс неправильный, так как я хочу «день» не «старый день», а день неправильный, потому что я хочу «9», а не «29», я даже поставил a: prefer_exact, потому что он зафиксировал сопоставление неправильного элемента в прошлом для меня.

Не уверен, что попробовать дальше. Любые советы очень оценили.

огурец 1.3.10

Капибара 2.4.1

рубин 1.9.3p551

ответ

1

В идеале, не выбирайте по тексту, если вы можете избежать этого.

Но в этом случае попробуйте использовать регулярное выражение вместо простого текста.

find('.day', :text => Regexp.new("^#{day.day}$"), match: :prefer_exact).click 

Там немного родственное чтение в конце этого (в настоящее время нереализованного) выпуска: https://github.com/jnicklas/capybara/issues/1256

+0

Спасибо! Я пробовал то, что вы изначально разместили, и по какой-то причине формат 'find ('. Day', текст: Regexp.new ("^# {day.day} $ "), match:: prefer_exact) .click' дал мне ошибку не нашел css с текстом/^ 9 $/ , но когда вы обновили ответ, и я попробовал ': text =>' он работал. спасибо! –

+0

Жаль об этом; Я перечислил неправильный селектор CSS изначально. Рад, что это сработало для вас! Я надеюсь, что у нас будет лучшее решение для точного соответствия текста в capybara, но регулярное выражение должно работать до тех пор. – tgf

+0

У меня была другая, но подобная проблема, и я нашел этот вопрос/ответ, и это тоже сработало! вы помогли мне дважды. Для всех, у кого есть аналогичная проблема: во втором случае я пытался сопоставить переключатель с меткой «Одно событие за», а затем рядом с ним есть текстовое поле для ввода вашего значения и единиц. Но есть также два дополнительных переключателя с надписью «Одно событие на всю жизнь» и «Одно событие в месяц». Я продолжал получать двусмысленный матч, даже с совпадением:: prefer_exact. Я использовал Regexp.new, и он выбрал правильный. –