Watir:如何找到iframe的标签?

时间:2014-11-17 09:00:02

标签: watir

我有一个元素,例如#<Watir::IFrame:0x..f98fef949215c673e located=false selector={:element=>(webdriver element)}>。如何确定它是什么标签(iframe)?

通过搜索类似的Javascript方法找到它:存在element.tag_name,但在将其用于 iframe 时,我得到NoMethodError: private method 'tag_name' called for #<Watir::IFrame:0x00000002f8c288>'

对于 iframe .tag_name是否有其他替代方法?

1 个答案:

答案 0 :(得分:2)

该异常意味着tag_name方法对于Watir :: IFrame(和Watir :: Frame)对象是私有的。 &#34;私人&#34;,以及&#34;公共&#34;和&#34; protected&#34;,方法用于控制类中方法的访问。 Ruby Pickaxe book对方法类型有很好的描述:

  • 任何人都可以调用公共方法---没有访问控制。默认情况下,方法是公共的(初始化除外,它始终是私有的。)
  • 受保护的方法只能由定义类及其子类的对象调用。访问权归家庭所有。
  • 无法使用显式接收器调用私有方法。因为在使用它们时无法指定对象,所以只能在定义类和同一对象中的直接后代中调用私有方法。

最终,这意味着您无法从课堂外调用tag_name

鉴于Watir API允许为其他元素类型调用tag_name方法,我会说这是一个错误。已打开拉取请求,方法已公开Issue 293

作为解决方法,您可以使用send

调用私有方法
browser.iframe.send('tag_name')
#=> "iframe"

请注意,鉴于您已经拥有Watir :: IFrame对象,并且根据您尝试执行的操作,您可能不需要检查标记名称。您可以检查对象的类:

browser.iframe.class
#=> Watir::IFrame