【问题标题】:Ruby Rspec cucumber array each doRuby Rspec 黄瓜数组每个都做
【发布时间】:2015-04-29 12:35:54
【问题描述】:

我有一个场景,当我登录页面时,我会看到很多个人资料(可以是 1 到 5)。 我正在寻找基于 tn 编号的特定配置文件。 我找到代表 tn 的元素,然后放入数组中以搜索所有可用的相同元素以找到正确的配置文件以便单击它。

代码如下:

And(/^I look for "([^"]*)"$/) do |number|   
   elements = @driver.find_elements(:css => "h3.phone-number")   
   elements.each do |element|  
     renewals_page.select_profile.click if element.text == @config[number]  
       return element  
   end   
     fail  
end

我从yaml 文件传递​​所需的数字取决于帐户。 renewals_page.select_profile.click 在另一个文件中定义为方法

  def select_profile   
    @driver.find_element(:css => "h3.phone-number")   
  end    

因此,当我尝试找到该元素并单击它时,出现以下错误

unexpected return (LocalJumpError)    
./features/step_definitions/renewals_login_step.rb:28:in `block (2 levels) in <top (required)>'    
./features/step_definitions/renewals_login_step.rb:26:in `each'    
./features/step_definitions/renewals_login_step.rb:26:in `/^I look for "([^"]*)"$/'

【问题讨论】:

    标签: ruby rspec webdriver cucumber


    【解决方案1】:

    从这里删除return

    renewals_page.select_profile.click if element.text == @config[number]  
    #   ⇓⇓⇓⇓⇓⇓
    #   return element  # removed
       element   # proper working return from lambda: result of last line
    end 
    

    原因是return关键字只能用于从method返回,不能从lambda返回。

    【讨论】:

    • 当我这样做时,我得到运行时错误 (RuntimeError) ./features/step_definitions/renewals_login_step.rb:30:in `/^I look for "([^"]*)"$/ ' 这没什么好说的
    • 当然你会得到一个RuntimeError,因为你在each循环之后有一个fail。如果我了解您要实现的目标,我可以使用完全可用的代码版本来更新我的答案。问题是你不能从 lambdas 中返回,句号
    • 由于某种原因,抓取元素有效,但在数组中,元素没有传递文本
    • 那不是 lambda。对于枚举器来说,这是一个格式不正确的块。他绝对可以从那里return
    • 我认为我做错了。最好找到元素并点击这些元素。每个都做|元素| if element.text == @config[number] element.click end
    猜你喜欢
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多