Capybara Element not found 错误,即使元素存在

Posted

技术标签:

【中文标题】Capybara Element not found 错误,即使元素存在【英文标题】:Capybara Element not found error even though the element exists 【发布时间】:2014-07-23 01:52:36 【问题描述】:

我正在用 capybara 编写一个 selenium 测试并尝试填写一个弹出框。我无法在水豚中使用 fill_in 方法填写元素的名称。这适用于其他页面中的其他表单,但不适用于此页面。

这是我的测试代码:

describe "Jobs" do
  before do
    login(users(:admin))
  end

  it "creates a job on a workspace" do
    visit('#/workspaces')
    click_button "Create Workspace"
    within_modal do
      fill_in 'name', :with => "testing-jobs"
      click_button "Create Workspace"
    end
    click_link "Dismiss the workspace quick start guide"
    page.should have_content('All Activity')
    Workspace.find_by_name("testing-jobs").should_not be_nil

    click_link "Jobs"
    click_button "Create"
    within('#facebox') do
      find(".name").click
      fill_in '. name', :with => "real job"
      choose "onDemand"
      click_button "Create"
    end
    page.should have_content "real job"
  end
end

关于工作空间的第一个填充工作非常好,但是当我开始工作时,它就搞砸了。

这是来自 firebug 的实际开发代码:

<div id="facebox" class="dialog_facebox" style="top: 30px; left: 424.5px;">
<div class="popup" style="max-height: 626px;">
<div class="content">
<div class="configure_job_dialog dialog">
<div class="dialog_header">
<div class="errors"></div>
<div class="dialog_content" data-template="configure_job_dialog">
<form action="#">
<label class="required">Name</label>
<input class="name" type="text" value="">

我在 fill_in 方法中使用名称类,但水豚没有捕捉到它。我尝试进行更多调试,以了解为什么创建了我的工作区而不是工作。工作区代码如下。

<input type="text" maxlength="256" tabindex="1" placeholder="Name this workspace" name="name">

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

问题

根据给出的 html,您将无法使用 fill_in 方法。原因是:

fill_in 方法根据元素的 id 属性、名称属性或标签文本定位元素。它不支持通过 CSS 选择器定位元素,.name 就是这样。 该元素没有 id 或 name 属性,因此fill_in 不能使用。同样,标签不通过forid 属性与输入直接关联。我相信fill_in 只检查显式标签(而不是隐式标签)。

请注意,fill_in 适用于工作区,因为该输入具有指定的名称属性。

解决方案

理想的解决方案是将输入更新为具有 id 属性、name 属性或显式标签。但是,如果这不可能,或者如果您需要使用 CSS 选择器,您可以find 元素,然后set 值:

find('.name').set("real job")

【讨论】:

工作如梦。谢谢你的建议!

以上是关于Capybara Element not found 错误,即使元素存在的主要内容,如果未能解决你的问题,请参考以下文章

DevTools failed to load source map: Could not load content for…System error: net::ERR_FILE_NOT_FOUN

DevTools failed to load source map: Could not load content for…System error: net::ERR_FILE_NOT_FOUN

springboot整合mybatis 异常 org.apache.ibatis.binding.BindingException: Invalid bound statement (not foun

Capybara/Cucumber In Ruby:当不再存在元素时停止搜索

“page.should_not have_content”和“page.should have_no_content”之间的区别

Capybara -> 如何使用本地方法的结果