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

时间:2013-02-07 10:18:51

标签: 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(页面缓存响应并相应地显示它们)。我考虑更改所有显示:在页面中没有或点击使它们可见但我希望尽可能避免这种情况。 如果不可能,改变所有显示器的解决方案都不是首选的工作。

PPS:诅咒,我试图超载可见? Watir :: Element类中的方法总是返回true,但是没有做到这一点。

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

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

2 个答案:

答案 0 :(得分:7)

我认为你必须使用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"

答案 1 :(得分:0)

尝试使用execute_script方法将“可见”的值更改为可见。像document.getElementById('id').style.visibility = 'visible'这样的东西,假设它有一个ID。如果没有,你可以随时要求开发人员在元素上放置一个测试ID(或者只是自己动手)。