0
<select name="dropdown" multiple="multiple" size="2">

  <option value="1">#Ram</option>
  <option value="2">##animals</option>
  <option value="3">###cat</option>
  <option value="4">###dog</option>
  <option value="5">#kalu</option>
  <option value="6">##animals</option>
  <option value="7">###rat</option>
  <option value="8">###dog</option>
  <option value="9">#jadu</option>
  <option value="10">##animals</option>
  <option value="11">###cat</option>

</select>

###dogここで、 #kalu->##animals->###dog の後にあるを選択したいと思います。これは、私が与える入力です。しかし、今のポイントは、正しい###dog?を選択する方法です。

4

2 に答える 2

1

すべてのオプションを取得し、各オプションのパス (つまり親) を決定する必要があると思います。

以下は、HTML サンプルで機能します。あまり多くの仮定をしていないことを願っています。

#This is the option (path) you want to select
option_to_select = '#kalu->##animals->###dog'

#Get the select list
dropdown = Selenium::WebDriver::Support::Select.new(driver.find_element(:name => 'dropdown'))

#Get the text of all options
option_text = dropdown.options.collect(&:text)

#For each option, determine its full path and value
paths = {}
option_text.each_with_index do |text, index|
    level = text[/^(#+)/].length
    segment = option_text[0..index]
    path = []
    1.upto(level) do |i|
        path << segment[segment.rindex{ |x| x =~ /^#{'#' * i}\w/ }]
    end
    paths[path.join('->')] = (index + 1).to_s
end

#Convert the desired option path to a value and select it from the dropdown
dropdown.select_by(:value, paths[option_to_select])
于 2013-02-06T02:53:24.963 に答える
0

SizzleはCSSセレクターをサポートする必要があります。

driver.find_element(:css, "select option:contains('###dog'):last")
于 2013-02-04T23:34:16.547 に答える