我正在与capybara一起进行硒测试并试图填写一个弹出框。我无法使用capybara中的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
关于工作空间的第一个fill_in工作得很好但是当我到达工作时它只是搞砸了。
以下是来自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方法中使用了name类,但是capybara没有捕获它。我尝试调试一点,看看为什么我的工作区被创建但不是工作。工作区代码如下。
<input type="text" maxlength="256" tabindex="1" placeholder="Name this workspace" name="name">
非常感谢任何帮助。
答案 0 :(得分:5)
<强>问题强>
根据给出的html,您将无法使用fill_in
方法。原因是:
fill_in
方法根据id属性,name属性或标签文本定位元素。它不支持通过.name
的CSS选择器定位元素。 fill_in
无法使用。同样,标签不会通过for
和id
属性直接与输入相关联。我相信fill_in
只检查显式标签(而不是隐式标签)。请注意,fill_in
适用于工作空间,因为该输入具有指定的名称属性。
<强>解决方案强>
理想的解决方案是更新输入以具有id属性,name属性或显式标签。但是,如果这不可能或者您需要使用CSS选择器,则可以find
元素,然后set
值:
find('.name').set("real job")