将字符串转换为页面对象中的元素

时间:2017-04-18 14:12:28

标签: ruby watir watir-webdriver pageobjects page-object-gem

使用ruby的页面对象gem,我为链接定义了一些页面对象,如:

  link(:link_for_1week, text: /1 wk/)
  link(:link_for_2week, text: /2 wks/)
  link(:link_for_3week, text: /3 wks/)
  link(:link_for_4week, text: /4 wks/)
  link(:link_for_5week, text: /5 wks/)
  link(:link_for_6week, text: /6 wks/)
  link(:link_for_2months, text: /2 mo/)
  link(:link_for_3months, text: /3 mo/)
  link(:link_for_6months, text: /6 mo/)
  link(:link_for_1year, text: /1 yr/)

我正在使用一种方法通过用户输入动态调用这些链接:

If I give user input as '1week' it has to click on 'link_for_1week'
If I give user input as '2week' it has to click on 'link_for_2week' 
and so

我不知道该怎么做,我甚至使用了instance_eval,但它不起作用:

def click_link(args:)
  self.browser.instance_eval('link_for_'+args+'_element.click')
end

但我无法点击链接。

我不确定使用这个instance_eval ..除了instance_eval之外,最受欢迎......

3 个答案:

答案 0 :(得分:3)

您可以使用send将String转换为方法调用:

def click_link(text)
  send("link_for_#{text}")
end

答案 1 :(得分:0)

我没有使用过那个gem,但方法中的参数是错误的。而不是

def click_link(args:) 

使用

def click_link(args) 

答案 2 :(得分:0)

下面提到的代码将解决您的问题:

( “link_for _#{ARGS} _Element”)

当您需要使用双引号从任何ruby变量中编写/获取动态值时,请使用“#{variable}”语法。