页面对象可以在Cucumber之外使用吗?

时间:2016-07-25 15:45:08

标签: page-object-gem

我试图理解将页面对象gem与Cucumber完全联系起来。

页面工厂暴露在Cucumbers world中,允许在步骤中使用on / visit,但这似乎可以在没有Cucumber的情况下暴露。

页面对象所依赖的@browser变量是在Cucumber的before_suite或before_scenario上下文中创建的,但也可以在没有Cucumber的情况下创建。

有没有什么东西真的把这个宝石绑在黄瓜身上?

2 个答案:

答案 0 :(得分:2)

是。 Page-object gem可以在Cucumber之外使用。

以下是如何将其与RSpec一起使用的示例。

$ tree

├── Gemfile
├── spec
│   ├── my_app
│   │   └── search_spec.rb
│   ├── pages
│   │   ├── article_page.rb
│   │   └── index_page.rb
│   └── spec_helper.rb

的Gemfile

source "https://rubygems.org"

gem 'rspec'
gem 'page-object'

spec_helper.rb

require 'page-object'

Dir["#{File.dirname(__FILE__)}/pages/*_page.rb"].each { |file| require file }

RSpec.configure do |config|
  config.include PageObject::PageFactory

  config.before do
    @browser = Watir::Browser.new :firefox
  end

  config.after do
    @browser.close
  end
end

search_spec.rb

require 'spec_helper'

describe 'Search field' do
  it 'searches an article' do
    visit(IndexPage) do |page|
      page.search = 'Ruby'
      page.submit_search
    end

    expect(on(ArticlePage).main_header).to eq('Ruby')
  end
end

article_page.rb

class ArticlePage
  include PageObject

  h1(:main_header)
end

index_page.rb

class IndexPage
  include PageObject

  page_url 'https://www.wikipedia.org'

  text_field(:search, id: 'searchInput')
  button(:submit_search)
end

答案 1 :(得分:0)

正如rubygems.org上提到的那样PageObject gem只有开发依赖于Cucumber。它不需要黄瓜实施。对运行时和开发依赖关系之间的差异进行了精确解释here

出于执行目的,Cucumber会查找步骤定义。将Page Factory传递给World会将PageObject功能添加到Cucumber。我认为将PageObject绑定到Cucumber的唯一一件事就是它的单元测试。 Evmorov已经为它与Rspec合作提供了一个很好的解决方案。