1

背景: 我正在使用 Cucumber/Capybara/PhantomJS/Poltergeist 测试一个 Rails 应用程序。我的黄瓜步骤定义文件之一中有一个 click_link 调用。然后这个 click_link 调用会导致 Rails 调用控制器的 show 方法。控制器通过特定 id 查找对象并以 javascript 格式 (format.js) 响应。show.js.erb 文件给出的响应然后在 Twitter Bootstrap 模式对话框上执行一些文本字符串替换,以在框中显示自定义状态消息。然后显示模态对话框。

这一切都在生产中起作用。但它似乎在测试中不起作用。我收到一条错误消息“找不到带有值或 id 或文本‘关闭’的按钮 (Capybara::ElementNotFound)”。此外, puts page.html 仅显示以下内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

这让我觉得模态对话框根本没有显示出来。有人对发生了什么有任何想法吗?

cucumber_steps.rb

When /^I click this link$/ do

  click_link "Some link to call show method"

  puts page.html

end

And /^I click close button in the modal box$/ do

   click_button 'Close'

end

Twitter Bootstrap 模式框页面中的 HTML:

<ul>
  <li><a href="/kites/24" data-remote="true">Some link to call show method</a></li>
</ul>
 :
 :
    <form>

<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">

  <div class="modal-header">

    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>

    <h3 id="myModalLabel">Modal header</h3>

  </div>

  <div class="modal-body">

    <p>One fine body…&lt;/p>

  </div>

  <div class="modal-footer">

    <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>

    <button class="btn btn-primary">Save changes</button>

  </div>

</div>

</form>

Rails 显示方法

def show

    @kite = Kite.find(params[:id])

    respond_to do |format|

      format.js

    end

  end
4

1 回答 1

2

关闭按钮错误

您收到错误是因为您正在使用click_button "Close"并且单击按钮未使用“关闭”作为其 ID 或文本: <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>

为了解决你要回来的错误,我会执行以下操作:

close_button = page.find('button.close')
click_button close_button

一般问题

你遗漏了很多关于你的实现的细节,所以很难指出你哪里出错了。我要检查的第一件事是确保您在文件中设置了 poltergeistenv.rb

于 2013-02-16T23:26:28.900 回答