【问题标题】:undefined method `visit_page' for #<Object:0x007fe29cb4c798> (NoMethodError)#<Object:0x007fe29cb4c798> 的未定义方法“visit_page”(NoMethodError)
【发布时间】:2014-02-01 06:56:51
【问题描述】:

我当前的问题仅在从命令行执行测试时出现。从 RubyMine 运行脚本时,我没有问题,从命令行看起来像这样

黄瓜特征/回归/createCloudUser.feature -r features/step_definitions/ -r lib/

执行:

Feature: User pages Creation
  Add user to system

  Background:                   # features/regression/createUser.feature:4
Given you are in Cloud Staging # features/step_definitions/is_given_steps.rb:5
  undefined method `visit_page' for #<Object:0x007fe29cb4c798> (NoMethodError)
  ./features/step_definitions/old_pages.rb:10:in `/^you are accessing User Page$/'

它指向以下页面:

#is_given_steps.rb
When(/^you are accessing User Page$/) do
  defined? $base_url
  #pry
  visit_page CreateCustomerPage   #Error is on this line unsure why?
end

这是课程:

require 'fig_newton'
require 'page-object'

class CreateCustomerPage
  include PageObject
  include DataMagic

  page_url "https://#{FigNewton.site_url}/admin/users/new"

  text_field(:first_name, :id => 'user_first_name')
  text_field(:last_name, :id => 'user_last_name')
  text_field(:user_email, :id => 'user_email')

  button(:create_customer, :name => 'commit')
  button(:cancel, :name => 'button')


  def customerIsCreated
    raise 'User Not Created' unless browser.text.include?("#{FigNewton.customer_created.to_s.strip}")
    return true
  end

  def customerIsNotCreated
    raise 'User was Created' unless browser.text.include?("#{FigNewton.customer_no_created.to_s.strip}")
    return true
  end

  def complete_user_creation (data = { })
    populate_page_with data_for(:create_user, data)

    create_customer
  end

end

项目设置如下:

TestProj-|
         |--Config
         |--Feature
              |--Regression
                    |-- *.features
              |--step_definitions
                    |-- is_given_steps.rb    
              |--support
                    |-- env.rb
         |--lib
              |---pages
                    |--Common
                    |--IS
                        |--*.* (other files)
                        |-- CreateCustomerPage.rb

添加了 env.rb

#env.rb
#ADDED THIS AS TEST
$: << File.dirname(__FILE__)+'/../../lib'

$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../../', 'lib'))

require 'rspec-expectations'
require 'page-object'
require 'selenium-webdriver'
require 'fig_newton'
require 'data_magic'
require 'require_all'
require 'time'
require 'date'
require 'yaml'
require 'fileutils'
require 'aws-sdk'

require_all 'lib'


$base_url = FigNewton.sys_url #used to parse a separate Url


World(PageObject::PageFactory)

我不确定为什么 visit_page 会在该页面上引发错误。当我从 Rubymine 执行时,我没有问题并且测试成功运行。请帮忙。

【问题讨论】:

  • 您将对象传递给visit page 而不是url
  • 你的 env.rb 在哪里?可以发一下吗?
  • @snowe2010 这对我来说是新的,谢谢!
  • 对象需要扩展不包括 PageObject - 请参阅下面的答案

标签: ruby cucumber bundler rubymine page-object-gem


【解决方案1】:

由于您手动需要文件夹,我猜您不需要包含 env.rb 的文件夹。

鉴于项目设置,我猜env.rb 位于support 文件夹中。您需要在 Cucumber 命令中包含对此的要求 - 即 -r features/support:

cucumber features/regression/createCloudUser.feature -r features/step_definitions/ -r lib/ -r features/support

【讨论】:

  • 那就完美了!!现在就像一个魅力!谢谢一百万!
【解决方案2】:

这个错误

# (NoMethodError) 的未定义方法 `visit_page'

表示你还没有初始化visit_page所在的页面。你可以要求,或者如果你正在做一个 POM,你需要为那个步骤所在的地方做这样的事情:

Given $/You are in Cloud Staging$/ do 
  @page = SomePage.new(@test_env) // initialize new object where method lives
  @page.visit_page
end

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多