2

疑問に思っているのですが、watir を使用して非表示の要素の値を取得するにはどうすればよいですか? これは要素です:

<input type="hidden" value="randomstringhere" id="elementid" name="elementname" />

そして、これは私のコードatmです:

require "rubygems"
require "watir-webdriver"
$browser = Watir::Browser.new :ff
$browser.goto("http://www.site.com")
$grabelement = $browser.hiddens(:id, "elementid")
$blah = $grabelement.attribute_value("value")
puts $blah

これは最後の行でスタックし、そこで戻ります

code.rb:6:in `<main>': undefined method `attribute_value' for #<Watir::HiddenCollection:0x8818adc> (NoMethodError)

基本的な質問で申し訳ありませんが、検索しても何も見つかりませんでした。

前もって感謝します!

4

1 に答える 1

7

問題

あなたのコードはかなり近いです。問題は次の行です。

$grabelement = $browser.hiddens(:id, "elementid")

この行は、id "elementid" を持つ隠し要素のコレクション (つまりすべて) を取得するように指示しています。エラー メッセージが示すように、コレクションには attribute_value メソッドがありません。要素 (つまり、コレクション内のオブジェクト) のみがメソッドを持ちます。

解決策(一致するIDを持つ単一の非表示を想定)

1 つしかないと仮定すると、hidden代わりに を使用して最初の一致を取得する必要がありますhiddens(つまり、 をドロップしますs)。

$grabelement = $browser.hidden(:id, "elementid")
$blah = $grabelement.value
puts $blah
#=> "randomstringhere"

.valuevalue 属性については、 の代わりに実行できることに注意してください.attribute_value('value')

解決策 (ID が一致する隠しオブジェクトが複数ある場合)

実際に複数ある場合は、コレクションを反復処理するか、最初のものを取得するだけです。

#Iterate over each hidden that matches
browser.hiddens(:id, "elementid").each{ |hidden| puts hidden.value }

#Get just the first hidden in the collection
browser.hiddens(:id, "elementid").first.value
于 2012-11-08T02:17:36.547 に答える