我试图理解将页面对象gem与Cucumber完全联系起来。
页面工厂暴露在Cucumbers world中,允许在步骤中使用on / visit,但这似乎可以在没有Cucumber的情况下暴露。
页面对象所依赖的@browser变量是在Cucumber的before_suite或before_scenario上下文中创建的,但也可以在没有Cucumber的情况下创建。
有没有什么东西真的把这个宝石绑在黄瓜身上?
答案 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合作提供了一个很好的解决方案。