【问题标题】:Undefined method error when trying to run around hooks尝试绕过钩子时出现未定义的方法错误
【发布时间】:2013-05-13 18:20:07
【问题描述】:

我正在尝试针对每种帐户类型多次运行给定的场景。我在other thread 中发现“围绕钩子”可能是采用 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'

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

【问题讨论】:

    标签: ruby cucumber hook watir page-object-gem


    【解决方案1】:

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

    首先,您收到错误是因为您没有使用World 注册PageObject::PageFactory 模块。在要求之后添加这一行:

    World(PageObject::PageFactory)
    

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

    【讨论】:

    • @Cheezy- 插入 World 调用并没有解决问题。我之前没有包含它,因为我认为 env.rb 文件是在执行任何操作之前执行的,并且我已经在其中包含了 World 行。关于您的问题,该产品需要在不同用户/配置文件上验证相同步骤,因为我们发现了与在不同配置文件下运行相同步骤相关的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2013-10-13
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多