RSpec/Capybara 没有 Rails 页 Objects/Support 文件设置?

RSpec/Capybara without Rails Setup for Page Objects/Support Files?

所以我要编写一个框架,使用 Rspec/Capybara 和 Selenium 在应用程序上进行一些自动化测试。我纯粹使用 RSpec(没有 rails)并且我在正确设置所有内容时遇到了一些困难。

我 运行 遇到的问题是当我试图将页面对象文件包含到我的规范中时。现在我的目录如下所示:

spec(实际的 .spec 文件在这里,spec_helper 也在这里) spec/support(页面对象文件在此处)

在我的页面对象文件中,我的第一个问题是它找不到 Capybara DSL,除非我这样做:include Capybara::DSL 在每个页面对象文件的顶部(这显然不是一个好主意,根据它给我的警告信息)

另一个问题是在我的测试中包含我的页面对象文件我需要对特定文件执行 require_relative(这有点痛苦)否则它找不到 class.

spec_helper 中有什么东西可以解决这个问题吗?我不是 ruby 方面的专家,所以我想我遗漏了什么。水豚 DSL 问题我也搞不清楚,例如要求 require 'capybara/rspec' 似乎也无济于事。

你有几个选项 Capybara::DSL -

  1. 将 Capybara::DSL 包含到您用于 PageObjects 的任何基础 class 中,以便水豚方法在 class 中可用(相对于全局对象) - 即。 include Capybara::DSL 进入 class 定义 - 不在文件的顶部。

  2. 在您的页面对象实例中保留一个 Capybara::Session 的实例,并在该会话实例上调用所有水豚方法 - @my_session.find(...),等等

  3. 在调用 Capybara 方法时始终使用 Capybara.current_session - Capybara.current_session.find(...),等等

至于 require 问题 -- 您可以使用 require_relative 从当前文件中指定需要的文件,或者使用 require 并从项目根目录(当前工作目录)。如果你有一个你想要加载的文件目录,你可以在你的spec_helper.rb中添加类似下面的内容来告诉它加载所有文件

Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f }