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 を変更するか、クリックして表示することを検討しましたが、可能であればこれを避けたいと思います。不可能な場合は、すべての表示を変更する解決策を回避することをお勧めします。

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 の使用:

メソッドを使用すると、より簡単にできることがわかります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メソッドを使用して、「visible」の値をvisibleに変更してみてください。document.getElementById('id').style.visibility = 'visible'IDを持っていると仮定するようなもの。そうでない場合は、いつでも開発者に要素にテスト ID を付けるように依頼できます (または、自分で行うことができます)。

于 2016-12-07T15:58:57.860 に答える