页面上有一个 div 不可见但有一些我想捕获的值。在其上调用文本会返回一个空字符串。
如何在不处理原始 html 的情况下获得显示的值?无论文本在浏览器中的可见性如何,我都可以强制 .text 返回实际值吗?
irb(main):1341:0> d.first.visible?
=> false
irb(main):1344:0> d.first.html
=> "<div class=\"day\">7</div>"
irb(main):1345:0> d.first.text
=> ""
PS:有很多很多div(页面缓存响应并相应地显示它们)。我考虑过更改页面中的所有显示:无或单击以使其可见,但我希望尽可能避免这种情况。 如果不可能,更改所有显示的解决方案 none 将是首选的解决方法。
PPS:该死,我试图让可见的重载? Watir::Element 类中的方法始终返回 true,但这并没有起到作用。
irb(main):1502:0> d.first.visible?
=> true
irb(main):1504:0> d.first.text
=> ""
最佳答案
对于较新版本的 Watir,现在有一个 Element#text_content
方法可以为您执行以下 JavaScript。
e = d.first
e.text_content
#=> "7"
对于旧版本的 Watir(原始答案):
您可以使用 JavaScript 来获取它。
e = d.first
browser.execute_script('return arguments[0].textContent', e)
#=> "7"
请注意,这仅适用于类似 Mozilla 的浏览器。对于类似 IE 的浏览器,您需要使用 innerText
。尽管如果您使用的是 watir-classic,它只是 d.first.innerText
(即不需要 execute_script
)。
使用 attribute_value:
事实证明,您可以使用 attribute_value
方法使其更简单。似乎它可以获得与javascript相同的属性值。
d.first.attribute_value('textContent')
#=> "7"
使用 inner_html
如果元素只包含文本节点(即没有元素),也可以使用inner_html
:
d.first.inner_html
#=> "7"
关于ruby - 如何使用 Watir (Ruby) 从不可见元素中读取文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14748645/