Rob
Rob

Reputation: 1855

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

I've read the similar questions to this but they don't solve my issue. I'm new with js testing so I think I might be doing something wrong.

The form produces this 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>

and I have the following integration test on the 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

when I run the test I get the following error

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

Looking at the HTML I can see the field is there. If I try using the inputs id it still fails, if I remove the fill in line then it says it cant find the button to click which is also there. I assume its getting the right page because get edit_guide_category_path(@guide, @category) works for the other tests (but they are non js tests and don't use selenium).

Its probably something simple but I cant get it.

Upvotes: 0

Views: 500

Answers (1)

Thomas Walpole
Thomas Walpole

Reputation: 49890

You're mixing up two different libraries -- You can't use get with Capybara, you use visit(url) to go to the page. You also shouldn't normally be asserting templates in a feature test, thats for lower level tests.

Upvotes: 2

Related Questions