2015-07-20 135 views
0

,当我写了下面的黄瓜情景步骤未定义的方法执行黄瓜

Scenario: Validate in orders list the order status "Order Creates" 
    When I click on the orders button 
    And the order "14103795" is visible 
    # Then I can see the screen with the list of orders 
    Then I can see the order status "Order Created", the message "Order successfully created", the order date "XXXX", the deliver date "XXXX" or the cancellation date "XXXX". 

当我运行.feature文件,它执行,但是当文件完成运行我得到了以下错误:

undefined method `last' for #<String:0x007ffdba07f5e8> (NoMethodError) 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/runner.rb:101:in `execute' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/runner.rb:46:in `execute' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/runner.rb:30:in `around_hook' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/around_hook.rb:11:in `describe_to' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:92:in `block (2 levels) in compose_around_hooks' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:91:in `call' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:91:in `compose_around_hooks' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:22:in `block in describe_to' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/runner.rb:17:in `call' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/runner.rb:17:in `test_case' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:21:in `describe_to' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-2.0.2/lib/cucumber/filters/prepare_world.rb:11:in `test_case' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:21:in `describe_to' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-2.0.2/lib/cucumber/filters/apply_around_hooks.rb:8:in `test_case' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:21:in `describe_to' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-2.0.2/lib/cucumber/filters/apply_after_hooks.rb:5:in `test_case' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:21:in `describe_to' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-2.0.2/lib/cucumber/filters/apply_before_hooks.rb:5:in `test_case' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:21:in `describe_to' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-2.0.2/lib/cucumber/filters/apply_after_step_hooks.rb:8:in `test_case' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:21:in `describe_to' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-2.0.2/lib/cucumber/filters/activate_steps.rb:8:in `test_case' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:21:in `describe_to' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-2.0.2/lib/cucumber/filters/quit.rb:11:in `test_case' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/case.rb:21:in `describe_to' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/filters/locations_filter.rb:17:in `block in done' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/filters/locations_filter.rb:16:in `each' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/filters/locations_filter.rb:16:in `done' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/filter.rb:61:in `done' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/test/filters/tag_filter.rb:18:in `done' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/compiler.rb:23:in `done' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core/gherkin/parser.rb:31:in `done' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core.rb:29:in `parse' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-core-1.2.0/lib/cucumber/core.rb:18:in `compile' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-2.0.2/lib/cucumber/runtime.rb:70:in `run!' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-2.0.2/lib/cucumber/cli/main.rb:38:in `execute!' 
/Users/galibon/.rvm/gems/[email protected]/gems/cucumber-2.0.2/bin/cucumber:9:in `<top (required)>' 
/Users/galibon/.rvm/rubies/ruby-1.9.3-p551/bin/cucumber:23:in `load' 
/Users/galibon/.rvm/rubies/ruby-1.9.3-p551/bin/cucumber:23:in `<main>' 
/Users/galibon/.rvm/gems/[email protected]/bin/ruby_executable_hooks:15:in `eval' 
/Users/galibon/.rvm/gems/[email protected]/bin/ruby_executable_hooks:15:in `<main>' 

而且,最后一步没有创建步骤骨架。

有人可以帮助我吗?

下面是步骤定义

When(/^I click on the orders button$/) do 
    @orders = Orders.new 
    @orders.click_orders 
end 

When(/^the order "([^"]*)" is visible$/) do |order| 
    @orders.locateOrders(order) 
end 

和这里的班,我创建

def click_orders 
    click_link('Pedidos') 
    sleep(4) 
end 

def locateOrders(order) 
    exists = false 
    while exists == false 
     if page.has_content?(order) 
      exists=true 
      @order_num=order 
      puts 'exists' 
     elsif page.has_content?(order) == false 
      if page.has_content?("Carregar mais pedidos") 
       click_button("Carregar mais pedidos") 
       sleep(5) 
      else 
       fail(ArgumentError.new('Pedido não encontrado')) 
      end 
     end 
    end 
end 


def order_verify(order_status) 
    sleep(3) 
    counter = page.all(:xpath, '//*[@id="sh-content"]/div[1]/div[2]/div').count 
    for i in 1..counter.to_i 
     puts i 
     within(:xpath, '//*[@id="sh-content"]/div[1]/div[2]/div['+i.to_s+']/div'){ 
      @card_order = find(:xpath, '//*[@id="sh-content"]/div[1]/div[2]/div['+i.to_s+']/div/div[1]/div[1]/span[2]').text 
      puts @card_order 
     } 
     if @card_order == @order_num 
      within(:xpath, '//*[@id="sh-content"]/div[1]/div[2]/div['+i.to_s+']/div'){ 


      } 
     end 
    end 
end 

最后一步,女巫正想打电话给order_verify方法页的对象,是不是在运行场景时生成骨架。

这里是我的env.rb文件

require 'selenium/webdriver' 
require 'rubygems' 
require 'rspec' 
require 'json' 
require 'capybara/cucumber' 



include Capybara::DSL 
Capybara.default_driver = :chrome 
Capybara.register_driver :chrome do |app| 
Capybara::Selenium::Driver.new(app, :browser => :chrome) 
end 

Capybara.default_wait_time = 2 
+0

看起来你是返回,当你试图找回一个数组,并调用'.last'上一个字符串。用失败的代码修改你的问题。 –

+0

@ColtonFent,这里是更新,希望它有帮助。谢谢 –

+0

这个错误在黄瓜里面,似乎是因为TestStep#source方法返回一个字符串而不是数组。你是否在使用任何可以覆盖/添加#source方法到系统中的对象的宝石? –

回答

1

解决它。显然这是黄瓜版本2.0.2的问题。

我刚刚卸载它,并安装2.0.0版本女巫使用黄瓜核心1.1.3和错误停止发生。它也生成了步骤框架。

0

如果你想使用最新的黄瓜2.0.2和2.5.0水豚一起,请更改您的“env.rb”文件下。

替换此行:

include Capybara::DSL 

有了:

World(Capybara::DSL) 

为什么要用世界()?:只是为了确保你不掺假的全局命名空间,但仍然具有的所有功能该模块可用于整个范围。

重复此为所有“包括”在env.rb文件语句

例如水豚:: RSpecMatchers,测试::单位::断言等

希望这能解决你的问题,祝你好运!

相关问题