Как заполнить поле выбора времени с помощью capybara

#xpath #capybara #contains #timepicker

#xpath #capybara #содержит #timepicker

Вопрос:

Я новичок в capybara, и у меня возникли некоторые проблемы с текстовым полем, Capybara не может найти поле.

Мне нужно создать автоматические тесты, и один из них должен заполнять поля, которые постоянно меняются (id и name меняются, они такие: id=»patternDailyStart_146d7547140″, и это число всегда разное).

Html-часть выглядит так:

     <div class="timepicker">
    <input value="" id="patternDailyStart_146d7547140" 
        name="patternDailyStart_146d7547140" 
        class="timepicker-input patternDailyStart hasDatepicker" 
        type="text">
    <img class="ui-datepicker-trigger"      
        src="/mpromoter/assets/4716a6a0a357181/app/components/timefield/clock.png" 
        alt="..." 
        title="...">
    </div>
  

Это поле выбора времени. И проблема в том, что capybara не может найти поле.. однако я пытаюсь найти его для заполнения.

Когда я пытаюсь найти этот xpath, он найден, но когда я хочу заполнить его временем ($ starttime = 17:00), тогда он говорит, что элемент не найден или он не существует.

Эти xpath найдены:

 page.has_xpath?('//tbody/tr/div/input[contains(., "patternDailyStart")]')
page.has_xpath?(:xpath, "//*[@class='timepicker-input patternDailyStart hasDatepicker']")
  

Я пытался заполнить так:

 And(/^fill up the fields$/) do
field = find("//*[@class='timepicker-input patternDailyStart hasDatepicker'")
field.set $starttime
end
  

И вот так:

 fill_in('timepicker-input.patternDailyStart.hasDatepicker', :with => $starttime)
  

И вот так:

 within(:xpath,'//tbody/tr/div/input[contains(., "patternDailyStart")]'){ fill_in("#patternDailyStart", with: $starttime)}
  

И многие другие способы, но все равно ничего не заполняет эти поля..

Итак, я прошу некоторой помощи. Что я должен сделать, какие-либо предложения?

Спасибо … 🙂

Ответ №1:

Я думаю, что проще всего было бы найти входные данные по его классу patternDailyStart:

 find(:css, '.patternDailyStart').set($starttime)