2013-02-04 2 views
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일까요? CSS 선택기를 지원해야합니다드롭 다운 목록에서 "### dog"를 선택하는 방법은 무엇입니까?

답변

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]) 
+0

당신의 제안에 감사 드리며 나는 그것을 분명히 시도 할 것입니다. 평소대로 저스틴 감사합니다. 그것은 항상 당신이 본 각 문제에 대한 답변을 가지고있는 것 같습니다 :) – DoLoveSky

0

지글 지글 :

driver.find_element(:css, "select option:contains('###dog'):last") 
+0

나는 당신의 요점을 찾지 못했습니다. 그것을 명확히 할 수 있습니까? 나는 그것을위한 일반적인 해결책을 원한다. – DoLoveSky

관련 문제