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 回答