2013-11-29 2 views
1

Существует следующая RSpec код:Невозможно выбрать флажок, используя идентификатор в Капибара

describe 'with valid information' do 
    it 'should create a new restaurant' do 
     visit new_restaurant_path 

    fill_in I18n.translate(:name),   with: "Some restaurant" 
     fill_in I18n.translate(:address),  with: "Some address of the restaurant" 
     fill_in I18n.translate(:average_check), with: 100 

    check('place_restaurant_food_types_1') 

    expect { click_button :submit }.to change(Restaurant, :count).by(1) 
    end 
end 

Но я всегда получаю ошибку «не удается проверить поле, ни флажок с ид, имя, или этикетки„place_restaurant_food_types_1“найдено» , Я попытался заменить id на имя, но он все тот же. Я абсолютно уверен, что есть элемент с нужным идентификатором! (Я скопировал его из источника страницы). Как я могу это исправить?

HTML:

<form accept-charset="UTF-8" action="/restaurants" class="new_place_restaurant" id="new_place_restaurant" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="7yQCirO7MLO6e+Nj46eCSNUjQWd67MJVDIHmUV6/5Y0=" /></div> 
     <div class="row"> 
    <label for="place_restaurant_name">Название</label> 
    <input id="place_restaurant_name" name="place_restaurant[name]" size="30" type="text" /> 
</div> 
<div class="row"> 
    <label for="place_restaurant_address">Адрес</label> 
    <input id="place_restaurant_address" name="place_restaurant[address]" size="30" type="text" /> 
</div> 

     <div class="row"> 
      <label for="place_restaurant_average_check">Средний чек</label> 
      <input id="place_restaurant_average_check" name="place_restaurant[average_check]" size="30" type="text" /> 
     </div> 
      <div class="row"> 
       <input id="place_restaurant_food_types_1" name="place_restaurant[food_types][1]" type="checkbox" value="1" /> 
       <label for="place_restaurant_food_types_1">Восточная кухня</label>  
      </div> 
      <div class="row"> 
       <input id="place_restaurant_food_types_2" name="place_restaurant[food_types][2]" type="checkbox" value="1" /> 
       <label for="place_restaurant_food_types_2">Национальная кухня</label>  
      </div> 
      <div class="row"> 
       <input id="place_restaurant_food_types_3" name="place_restaurant[food_types][3]" type="checkbox" value="1" /> 
       <label for="place_restaurant_food_types_3">Японская кухня</label>  
      </div> 
      <div class="row"> 
       <input id="place_restaurant_food_types_4" name="place_restaurant[food_types][4]" type="checkbox" value="1" /> 
       <label for="place_restaurant_food_types_4">Китайская кухня</label>  
      </div> 
      <div class="row"> 
       <input id="place_restaurant_food_types_5" name="place_restaurant[food_types][5]" type="checkbox" value="1" /> 
       <label for="place_restaurant_food_types_5">Европейская кухня</label>   
      </div> 
      <div class="row"> 
       <input id="place_restaurant_food_types_6" name="place_restaurant[food_types][6]" type="checkbox" value="1" /> 
       <label for="place_restaurant_food_types_6">Кавказская кухня</label>  
      </div> 
     <div id="map_canvas"></div> 
<input id="latitude" name="place_restaurant[latitude]" type="hidden" value="54.352271" /> 
<input id="longitude" name="place_restaurant[longitude]" type="hidden" value="48.52652" /> 


     <div class="row"> 
      <input id="submit" name="commit" type="submit" value="Сохранить" /> 
     </div> 
</form> 
+0

Вы можете добавить фрагмент исходного кода (html) здесь? Это поможет –

+0

См. Обновления, пожалуйста – malcoauri

+0

Как вы получили этот источник? Я бы посоветовал посмотреть, что видит Капибара - сразу перед вашим тестовым утверждением добавьте 'puts page.html' и исправьте свой вопрос. – Shepmaster

ответ

0

Try По Xpath как этого

find(:xpath, "//*[@id='place_restaurant_food_types_1']").click 
+0

Не работает. Может быть, xpath ошибочен? – malcoauri

0

Вы можете использовать как этот

find(:css,"input[id='place_restaurant_food_types_1']").set true 
1

Вы могли бы просто использовать

check("place_restaurant_food_types_1")

, как показано на docs:

Флажок можно найти по имени, идентификатору или текст метки.

Смежные вопросы