【问题标题】:RSpec/Capybara without Rails Setup for Page Objects/Support Files?没有为页面对象/支持文件设置 Rails 的 RSpec/Capybara?
【发布时间】:2019-08-25 11:09:36
【问题描述】:

所以我打算编写一个使用 Rspec/Capybara 和 Selenium 对应用程序进行自动化测试的框架。我使用的是纯 RSpec(无导轨),并且在正确设置所有内容时遇到了一些困难。

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

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】:

    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 }
    

    【讨论】:

    • 你能详细介绍一下#2 和#3 吗?我已经看到在人们做session.click_button('something')page.click_button('something') 之前使用水豚时,做这些与仅仅说click_button('something') 有什么区别。似乎做 #1 会是最简单的?
    • @msmith1114 这完全取决于您的目标。如果您想拥有多个独立可用的会话,那么您可能希望管理自己的会话,您将更像#2。 #3 如果您出于某种原因不想将 Capybara::DSL 包含到一个类中(页面只是 Capybara.current_session 的别名)。 click_button('something')Capybara.current_session.click_button('something') 之间没有区别,如果您将 Capybara::DSL 包含在您的课程中,因为 DSL 只是将所有内容代理到 Capybara.current_session
    • 我不认为我有做多个会话的愿望(无法想象我为什么会这样做)。所以我想我会坚持第一。旁注 page.click_buttonclick_button 相比代表什么
    • 它们是相同的 - 假设 page 是 Capybara 定义的 page 方法,来自 Capybara::DSL - click_button => page.click_button => Capybara.current_session.click_button
    • 啊,明白了。我想如果我尝试做一些多线程测试或类似的事情,我只会做多个会话?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多