2016-03-01 83 views
0

我用红宝石和硒黄瓜。 下面是场景,我需要检查这个元素没有 在页面上我一步黄瓜红宝石硒开始救援

Step file: 
    begin 
    expect(checkout_page.city_acctdetails.displayed?).to eql false 
    rescue Selenium::WebDriver::Error::NoSuchElementError 
    puts "City dropdown is not present" 
    false 
    end 

它就像一个魅力之内做这样。 当我尝试在另一个文件/帮手

RubyHelper.rb file 
    def self.not_present(locator) 
    begin 
     locator.displayed? 
    rescue Selenium::WebDriver::Error::NoSuchElementError 
     puts "Not present" 
     false 
    end 
    end 

所以把为方法,当我在黄瓜步骤的文件来执行类似

RubyHelper.not_present(checkout_page.city_acctdetails) 

我得到错误: 找不到元素:{ }(硒:: webdriver的::错误:: NoSuchElementError)

需要声明:

#BDD framework that makes feature files running 
require 'cucumber' 

#Control remote browsers 
require 'selenium-webdriver' 

#Run tests in parallel 
require 'parallel_tests' 

#Use expect().to for verifying result 
require 'rspec' 

#Key value format for storing text data 
require 'yaml' 
+0

不挑剔,但是如果异常被触发,你不想要not_present返回true吗?你不想在locator.displayed之后错误吗? ?处理负面情况非常有趣。这就是我坚持积极的原因。你的需求在你的帮助文件中看起来像什么? – MikeJRamsey56

+0

@ MikeJRamsey56因为取决于场景,我可能有元素存在与否,所以我正在对元素不存在进行评估,因为我期待如此 – Vanatomas

+0

Vanatomas你知道你的意思。但读过它的其他人无法访问您的头像。他们所拥有的只是他们阅读的内容。在六个星期里,你可能不记得你的意图。我已经学会了写简单,避免消极,并有方法意味着他们说什么。只是友好的建议。 – MikeJRamsey56

回答

0

红宝石黄瓜的魔力取决于一种叫做World object的东西。从而使您的RubyHelper文件到您的步骤定义,你需要:

  1. 裹在一个模块中的辅助方法
  2. 告诉黄瓜包含模块到每个世界对象的每个场景

RubyHelper .RB文件

require 'cucumber' 
require 'selenium-webdriver' 
require 'rspec' 
module MyHelper 
    def not_present(locator) 
    begin 
     locator.displayed? 
    rescue Selenium::WebDriver::Error::NoSuchElementError 
     puts "Not present" 
     false 
    end 
    end 
end 
World(MyHelper) 
+0

应该看到这第一件事。 – MikeJRamsey56

+0

获取未定义的方法'世界'for ...我应该添加额外的宝石?使用Rspec – Vanatomas

+0

@Vanatomas您是否在使用最新的黄瓜?我正在运行2.3.2。 – MikeJRamsey56

0

也许你可以尝试sleep或等待事件的负载。这是当你运行你的测试时,测试被执行了,但元素还没有在那里。