0

我正在尝试为每种帐户类型多次运行给定的场景。我在其他线程中发现“围绕钩子”可能是采用 DRY 方式的最佳选择。

下面是我的代码:

require 'watir-webdriver'
require 'page-object/page_factory'
require 'page_navigation'
require 'data_magic'
require_relative 'pages/login_page'

Before do
  beforeCodeBlock
  ...
end

Around('@hooks_test') do|scenario, block|
  DataMagic.load('default.yml')     
  account_type = {"listener" => DataMagic.yml["listener_data"],
              "free" => DataMagic.yml["free_data"],
              "premium" => DataMagic.yml["premium_data"]}

  account_type .each {|key, value|
  puts "Running scenario: #{scenario.name} as #{key} user"

  visit_page(LoginPage)
  on_page(LoginPage).sign_in(value["username"],value["password"])  #Login as
  block.call

  }
end

After do
  afterCodeBlock
  ...
end

因此,当我运行功能文件时,我得到以下输出和后续错误:

Running scenario: Hooks test as listener user
   undefined method `visit_page' for nil:NilClass (NoMethodError)
   /myProject/features/support/hooks.rb:38:in `block (2 levels) in   <top (required)>'
   /myProject/features/support/hooks.rb:35:in `each'
   /myProject/features/support/hooks.rb:35:in `Around'

visit_page在执行处理属于 PageObject gem的方法之前,一切似乎都按预期工作。

4

1 回答 1

1

我在这里看到的可能有两个问题。

首先,您收到错误是因为您没有PageObject::PageFactory使用World. 在要求之后添加此行:

World(PageObject::PageFactory)

其次,您正在使用一个Around块并多次调用相同的场景。从我所看到的来看,您这样做是为了对不同的登录用户执行相同的行为。如果行为完全一样,你运行 3 次是为了什么?

于 2013-05-13T10:20:07.850 回答