6

页面上有一个不可见但具有我想要捕获的值的 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(页面正在缓存响应并相应地显示它们)。我考虑更改页面中的所有 display:none 或单击以使它们可见,但如果可能的话,我希望避免这种情况。如果不可能,更改所有显示的解决方案 none 将是首选的解决方法。

PPS:该死的,我试图超载可见的?Watir::Element 类中的方法总是返回 true,但这并没有成功。

irb(main):1502:0> d.first.visible?
=> true

irb(main):1504:0> d.first.text
=> ""
4

2 回答 2

9

对于较新版本的 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方法使其更简单。似乎它可以获得与 javascript 相同的属性值。

d.first.attribute_value('textContent')
#=> "7"

使用 inner_html

如果元素只包含文本节点(即没有元素),您还可以使用inner_html

d.first.inner_html
#=> "7"
于 2013-02-07T17:48:18.380 回答
0

尝试使用该execute_script方法将“可见”的值更改为可见。比如document.getElementById('id').style.visibility = 'visible'假设它有一个ID。如果没有,您可以随时要求开发人员在元素上放置一个 test-id(或者自己做)。

于 2016-12-07T15:58:57.860 回答