在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
答案 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。