如何将参数发送到页面对象方法并验证其存在?

时间:2014-08-30 09:58:07

标签: ruby cucumber watir page-object-gem

以下是我的页面文件。在我的步骤定义中,我正在尝试验证" linka"或" linkb"

class PageName
  include PageObject

  link(:linka, :text => 'texta')
  link(:linkb, :text => 'textb')

  def is_Available?(element)
    return element?
  end  

end

以下是我认为实现这一目标的方法。在这里,我计划将在我的页面中声明的链接的变量名称作为参数发送。预计会在控制台上打印 true

Then(/^I verify availability of "(.*?)"$/) do |arg1|
    puts on(HomePage).is_Available? arg1
end

面对以下错误

Then I verify availability of "linka"
  undefined method `element?' for #<HomePage:0x35b2300> (NoMethodError)
  ./features/support/pages/HomePage_page.rb:12:in `is_Available?'
  ./features/step_definitions/homepage.rb:8:in `/^I verify availability of " (.*?)"$/'
  features\HomePage.feature:5:in `Then I verify availability of "reviews"'

我可以知道我哪里出错吗?

建议我做些工作

此致 阿维纳什

1 个答案:

答案 0 :(得分:1)

问题是element方法参数中的is_Available?与返回的element?不同。在当前代码中,页面对象正在查找方法element?,而不是linka?linkb?

要将字符串转换为方法调用,您可以使用send

def is_Available?(element)
  return send("#{element}?")
end

此方法:

  1. 传入字符串(例如&#34; linka&#34;或&#34; linkb&#34;)
  2. 在字符串的末尾添加一个问号 - 即创建&#34; linka?&#34;或&#34; linkb?&#34;
  3. 根据字符串向页面对象发送方法调用,最终类似于调用page.linka?page.linkb?