RSpec / Capybara没有Rails设置页面对象/支持文件?

问题描述 投票:0回答:1

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

我遇到的问题是当我试图将页面对象文件包含到我的规范中时。现在我的目录看起来像:

spec(实际的.spec文件在这里,spec_helper也在这里)规范/支持(页面对象文件到这里)

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

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

spec_helper有什么东西可以解决这个问题吗?我不是红宝石的专家所以我认为我错过了一些东西。我无法弄清楚的Capybara DSL问题,例如需要require 'capybara/rspec'似乎也没有帮助。

ruby rspec capybara ui-automation pageobjects
1个回答
1
投票

你有一些选择Capybara :: DSL -

  1. 将Capybara :: DSL包含在您为PageObjects使用的任何基类中,以便Capybara方法在该类中可用(而不是在全局对象上) - 即。 include Capybara::DSL进入类定义 - 而不是在文件的顶部。
  2. 在您的页面对象实例中保留一个Capybara :: Session实例,并在该会话实例上调用所有capybara方法 - @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 }
© www.soinside.com 2019 - 2024. All rights reserved.