0

HTMLコード:

<div id="empid" title="Please first select a list to filter!"><input value="5418630" name="candidateprsonIds" type="checkbox">foo  <input value="6360899" name="candidateprsonIds" type="checkbox"> bar gui<input value="9556609" name="candidateprsonIds" type="checkbox"> bab </div>

ここで、selenium-webdriverを使用して以下を取得したいと思います。

[[5418630,foo],[6360899,bar gui],[9556609,bab]]

できますか?

私は以下のコードを試しました:

driver.find_elements(:id,"filtersetedit_fieldNames").each do |x|

      puts x.text

end

しかし、それは"foo bar gui bab"私のコンソールに文字列としてデータを与えています。したがって、理解できませんでした-予想以上にそのようなものを作成する方法Hash

この点について何か助けはありますか?

4

1 に答える 1

1

そのようなテキストノードを取得するために私が知っている唯一の方法は、execute_scriptメソッドを使用することです。

次のスクリプトは、オプション値のハッシュとそれに続くテキストを提供します。

#The div containing the checkboxes
checkbox_div = driver.find_element(:id => 'empid')

#Get all of the option values
option_values = checkbox_div.find_elements(:css => 'input').collect{ |x| x['value'] }
p option_values
#=> ["5418630", "6360899", "9556609"]

#Get all of the text nodes (by using javascript)
script = <<-SCRIPT
    text_nodes = [];
    for(var i = 0; i < arguments[0].childNodes.length; i++) {
        child = arguments[0].childNodes[i];
        if(child.nodeType == 3) {
            text_nodes.push(child.nodeValue);
        }
    }   
    return text_nodes
SCRIPT
option_text = driver.execute_script(script, checkbox_div)
#Tidy up the text nodes to get rid of blanks and extra white space
option_text.collect!(&:strip).delete_if(&:empty?)
p option_text
#=> ["foo", "bar gui", "bab"]

#Combine the two arrays to create a hash (with key being the option value)
option_hash = Hash[*option_values.zip(option_text).flatten]
p option_hash
#=> {"5418630"=>"foo", "6360899"=>"bar gui", "9556609"=>"bab"}
于 2013-02-06T22:13:41.330 に答える