2016-02-12 3 views
0

Я читал подобные вопросы к этому, но они не решают мою проблему. Я новичок в тестировании js, поэтому я думаю, что я могу сделать что-то неправильно.Capybara :: ElementNotFound: Не удалось найти поле "Key name"

форма производит этот HTML

<form class="new_category_item_key" id="new_category_item_key" action="/guides/dungeon-boss/categories?category_id=heroes" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="b7wiF07zYh/Nl727M3y0Uk1TbroMJFuGqTK6fYNlNted/5G4Wmz4BZLb7IazzyP5md/wWRb1D28ePhrzt2uMSA==" /> 


    <label for="category_item_key_name">Key name</label> 
    <input type="text" name="category_item_key[name]" id="category_item_key_name" /> 

<select name="category_item_key[key_type]" id="category_item_key_key_type"><option value="1">Value</option> 
<option value="2">Text</option> 
<option value="3">Image</option></select> 

    <input type="submit" name="commit" value="Add New Key" /> 
</form> 

и у меня есть следующий интеграционный тест на форме

setup do 
    @user = users(:michael) 
    @user1 = users(:archer) 
    @guide = Guide.find(1) 
    @mod_relationship = game_mods_relationships(:mod1) 
    @category = Category.find(1) 
    Capybara.current_driver = Capybara.javascript_driver # :selenium by default 
    end 

test "adding keys mod success then fail" do 
    log_in_as(@user) 
    get edit_guide_category_path(@guide, @category) 
    assert_template 'categories/edit' 
    assert_difference 'CategoryItemKey.count', 1 do 
    fill_in 'Key name', with: "diablo" 
    click_button "commit" 
    end 

end 

при запуске теста я получаю следующую ошибку

Capybara::ElementNotFound: Capybara::ElementNotFound: Unable to find field "Key name"

Глядя на HTML, я вижу, что поле t Вот. Если я попытаюсь использовать входы id, это все равно не удастся, если я удалю заливку в строке, тогда он говорит, что не может найти кнопку для клика, которая также есть. Я предполагаю, что он получил правильную страницу, потому что get edit_guide_category_path(@guide, @category) работает для других тестов (но они не являются js-тестами и не используют селен).

Возможно, что-то простое, но я не могу его получить.

ответ

2

Вы смешиваете две разные библиотеки - вы не можете использовать get с Capybara, вы используете visit(url), чтобы перейти на страницу. Вы также не должны обычно утверждать шаблоны в тесте функции, то есть для тестов более низкого уровня.

+0

Спасибо, что сработал. Также, что я должен использовать вместо шаблона assert? Я хочу, чтобы сайт загрузился на нужную страницу – Rob

+1

В тестовых функциях вы проверяете содержимое страницы - 'assert_text ('некоторый текстовый контент на странице')' и т. Д. –

+0

Отлично. Спасибо за подсказку – Rob

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