【问题标题】:Capybara::ElementNotFound: Unable to find field "Key name"Capybara::ElementNotFound:找不到字段“键名”
【发布时间】:2016-02-13 09:33:34
【问题描述】:

我已经阅读了与此类似的问题,但它们并没有解决我的问题。我是 js 测试的新手,所以我想我可能做错了什么。

表单生成此 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,我可以看到该字段在那里。如果我尝试使用输入 id 它仍然失败,如果我删除填充行然后它说它找不到按钮来点击也在那里。我认为它获得了正确的页面,因为get edit_guide_category_path(@guide, @category) 适用于其他测试(但它们是非 js 测试并且不使用 selenium)。

它可能很简单,但我无法理解。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 capybara


    【解决方案1】:

    您混合了两个不同的库 -- 您不能将 get 与 Capybara 一起使用,您可以使用 visit(url) 转到页面。您通常也不应该在功能测试中断言模板,那是用于较低级别的测试。

    【讨论】:

    • 感谢工作。另外我应该使用什么来代替断言模板?我想让网站加载正确的页面
    • 在功能测试中,您检查页面的内容 - assert_text('some text content on the page')
    • 太棒了。感谢您的提示
    • assert_text 不起作用 undefined method assert_text'` 也是因为 2 个不同的库问题吗?
    • assert_text 只要您将 Capybara::DSL 包含到您正在使用的任何测试类中,它就应该存在,因为您可以调用 visit、fill_in 和 click_button - 是你出于某种原因使用了一只非常老的水豚?? assert_text 是在 2014 年添加的 - 2.4 版本
    猜你喜欢
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多