使用Watir动态选择Elememt类型

时间:2019-10-13 08:11:55

标签: ruby watir

在watir中,我们可以通过诸如browser.div(text:'some text')之类的文本来查找元素。

在我的项目中,有很多常见的元素,例如菜单下拉菜单,其中包含带有文本和类“ items”的div。在这种情况下,如果我想使用一种更通用的方式来访问这些元素,则可以执行browser.div(text:'some text', class: 'items')

我对其他html元素(例如链接,范围,按钮等)也有同样的看法。在某些情况下,同一文本在多个位置,但元素类型不同。无论如何,我可以做一个方法来传递元素类型并仍然按文本查找吗?

类似

def get_element_by_text(tag, text)
browser.tag(text:'some text')
end

2 个答案:

答案 0 :(得分:1)

是的,可以编写以下方法

browser.element(tag_name: tag,text:'some text')

在我上面的代码tag中,该变量将通过您的方法的形式参数接收任何标签名称。

答案 1 :(得分:1)

除了Rajagopalan的答案外,如果您还想区分查找元素数组还是单个元素,则始终可以使用Ruby的send()函数: https://apidock.com/ruby/Object/send

tag = 'input'
browser.send(tag, text: 'some text')
# browser.input(text: 'some text')
tag = 'inputs'
browser.send(tag, text: 'some text')
# browser.inputs(text: 'some text')

所以在您的情况下:

def get_element_by_text(tag, text)
  browser.send(tag, text: text)
end

或者使其更具动态性

def get_element(tag, *args)
  browser.send(tag, args)
end

注意:就我个人而言,我反对这种一种功能到规则的所有行为。标准Watir在代码之间保持良好的平衡。在执行此操作时,您不知道该是在重写watir。