Watir 瓦蒂尔:如何找到iframe';什么标签?

Watir 瓦蒂尔:如何找到iframe';什么标签?,watir,Watir,我有一个元素,例如#(webdriver元素)}>。如何确定它是什么标记(iframe) 通过搜索类似的Javascript方法找到了它:存在元素.tag_name,但是当将它用于iframe时,我得到了nomethoder错误:私有方法“tag_name”调用了# 对于IFrame,它意味着什么?是否有一些替代方法可以替代.tag\u name?异常意味着tag\u name方法对于Watir::IFrame(和Watir::Frame)对象是私有的。“Private”以及“public”和“

我有一个元素,例如
#(webdriver元素)}>
。如何确定它是什么标记(iframe)

通过搜索类似的Javascript方法找到了它:存在
元素.tag_name
,但是当将它用于iframe时,我得到了
nomethoder错误:私有方法“tag_name”调用了#


对于IFrame,它意味着什么?是否有一些替代方法可以替代
.tag\u name

异常意味着
tag\u name
方法对于Watir::IFrame(和Watir::Frame)对象是私有的。“Private”以及“public”和“protected”方法用于控制类内方法的访问。对方法类型有很好的描述:

  • 任何人都可以调用公共方法——没有访问控制。默认情况下,方法是公共的(initialize除外,initialize始终是私有的)
  • 受保护的方法只能由定义类及其子类的对象调用。家庭内部保持访问权限
  • 无法使用显式接收器调用私有方法。因为在使用私有方法时不能指定对象,所以只能在定义类中以及由同一对象中的直接子代调用私有方法
最终,这意味着您不能从类外部调用
标记\u名称

鉴于watirapi允许为其他元素类型调用
tag\u name
方法,我认为这是一个bug。已打开拉取请求以公开该方法

作为一种解决方法,您可以使用
send
调用私有方法:

browser.iframe.send('tag_name')
#=> "iframe"
请注意,如果您已经有一个Watir::IFrame对象,并且根据您正在尝试执行的操作,您可能不需要检查标记名。您可以改为检查对象的类:

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