将水豚会话传递给页面对象

Passing Capybara session to an page object

我正在尝试使用水豚和 rspec 来简单实现页面对象模式。我正处于需要从不同页面对象实例方法初始化新页面对象的地步。但是在初始化新页面对象后,系统会抱怨

undefined local variable or method `page'

我想我应该以某种方式将驱动程序会话传递给新对象,但我不知道如何 这是我的第一个 class:

  class DashBoardLoginPage
  include Dashboard
  include Logging
  include Locator
  include Capybara::DSL

  def initialize
    super
    @locator = locators_for :dashboard_login_page_selectors
    log.info "Dashboard Login page initialized"
  end 

  #param user is a hash with name and pass keys 
  def login_user user
    visit '/'

    fill_in user_name_field, with: user[:name]
    fill_in user_password_field, with: user[:password]
    click_button login_button
    page.save_screenshot "#{Time.now.getutc}_screenshot.png"

    dashboard_landing_page = DashboardLandingPage.new
  end
end

和我的第二个对象:

require_relative "dashboard_base"

class DashboardLandingPage < DashboardBasePage

  def initialize
    super
    @locator = locators_for :dashboard_login_page_selectors
    log.info "Dashboard Landing page initialized"
  end

  def is_open?
    page.has_title? "Apps - Fyber Ad Monetization Dashboard"
  end
end

欢迎使用计算器!

您也许可以通过 Capybara.current_session 访问 page

此外,您是否考虑过使用一种已经可用的页面对象 gem?它们可以简化您正在做的很多事情。

https://github.com/natritmeyer/site_prism https://github.com/andyw8/capybara-page-object

您需要在 DashboardLandingPage

中包含 Capybara::DSL