ruby - 如何使用 Watir (Ruby) 从不可见元素中读取文本?

标签 ruby watir watir-webdriver

页面上有一个 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/

相关文章:

Ruby:如何计算二维平面中两点之间的距离?

ruby-on-rails - 如果我使用 '||=' 声明一个常数值,会发生什么(坏的)?

ruby - 使用 watir 标记或突出显示 div 内的部分文本

ruby-on-rails-3 - 在 rails action 中启动 Watir-Webdriver

ruby-on-rails - 超出范围错误,在 rspec 测试期间类型::整数

ruby - 如何在 Ruby 中实现 "callback"?

Ruby Watir 找不到 firefox 二进制文件

ruby - 如何获取图片源值

ruby - Watir - 使用部分文本查找元素

selenium - 如何使用 webdriver 一次性设置文本字段的值?