你能通过变量选择watir命令吗?

时间:2014-03-05 23:55:49

标签: ruby watir watir-webdriver

我对编程很新,而且我不确定我应该寻找哪些关键字。

我现在正在做这样的事情:

def click(text, type)
  b.span(:text=> text).click if type == 'span'
  b.button(:name=> text).click if type == 'button'
  b.image(:src=>text).click if type == 'image'
  b.button(:title=>text).click if type == 'title'
end

我不喜欢它,因为它不能很好地扩展。我想做点什么:

def click(text,type)
  b.type(:text=> text).click
end

如果我尝试输入没有引号的类型,它会抛出一个未定义的方法错误,但它肯定不是一个字符串。如何告诉脚本使用watir-webdriver span / button / image / etc?

2 个答案:

答案 0 :(得分:1)

我不确定你是如何在脚本中调用click方法的,但这是一个似乎有效的人为例子:

require 'watir-webdriver'

def click_method(element, text)
  @b.element(:text => "#{text}").click  
end

@b = Watir::Browser.new
@b.goto "http://www.iana.org/domains/reserved"

click_method("link", "Domains")

修改

require 'watir-webdriver'

def method_not_named_click(el, locator, locator_val)
  if locator_val.is_a? String
    @b.send(el, locator => "#{locator_val}").click
  elsif locator_val.is_a? Integer
    @b.send(el, locator => locator_val).click
  end
end

@b = Watir::Browser.new
@b.goto "http://www.iana.org/domains/reserved"

method_not_named_click(:a, :text, "Domains")
method_not_named_click(:a, :index, 3)

答案 1 :(得分:1)

很难弄清楚你想要用这种方法做什么,或者为什么它甚至是必要的 - 或者为什么你的类型参数不是字符串以外的东西 - 但是这里是一种帮助您清理代码的方法,类似于建议的代码。

请注意,当你说“它绝对不是一个字符串”时,你不清楚你所暗示的是什么。如果它不是字符串,它是什么?它是从哪里来的,你将它坚持到这个方法的参数而不知道它是什么类型的对象?

所以......我假设你的类型没有拥有成为一个String对象,所以我做了它所以需要符号...

def click(text, type)
  types={span: :text, button: :name, image: :src, title: :title }
  @b.send(type, {types[type]=>text}).click
end