2013-07-30 5 views
0

Сайт в вопрос: http://gis.nyc.gov/doitt/nycitymap/template?applicationName=ZOLAИспользование Watir для управления динамическим веб-интерфейсов

Текущий код:

$browser = Watir::Browser.new 
    $browser.goto "http://gis.nyc.gov/doitt/nycitymap/template?applicationName=ZOLA" 
    $browser.span(:id, "zolaDisclaimerButton").when_present.click 
    $browser.span(:id, "dijit_layout_ContentPane_0_button_title").click 

выше будет перемещаться к месту, принять отказ от ответственности, и нажмите на кнопку «Поиск для местоположения " справа. На странице есть раскрывающийся список в виде выпадающего списка, и мне нужно выбрать что-то другое, кроме значения по умолчанию. Поскольку это не избранный список, я не могу использовать select_list (blahblah) .select («текст»). Как я могу манипулировать этим типом кода?

раздел сайта выглядит следующим образом:

<div title="Search Type"><div id="widget_wm_widget_SimpleSelect_0" class="dijit dijitReset dijitInlineTable dijitLeft formField dijitTextBox dijitComboBox" lang="" wairole="combobox" dojoattachpoint="comboNode" role="combobox" dir="ltr" style="vertical-align: baseline ! important;" widgetid="wm_widget_SimpleSelect_0" aria-expanded="false"><div class="dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer" dojoattachevent="onmousedown:_onArrowMouseDown" wairole="presentation" role="presentation" dojoattachpoint="downArrowNode"><input class="dijitReset dijitInputField dijitArrowButtonInner" type="text" wairole="presentation" readonly="" tabindex="-1" value="▼ " role="presentation"></input></div><div class="dijitReset dijitValidationContainer"><input class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" type="text" wairole="presentation" readonly="" tabindex="-1" value="Χ " role="presentation"></input></div><div class="dijitReset dijitInputField dijitInputContainer"><input id="wm_widget_SimpleSelect_0" class="dijitReset dijitInputInner" type="text" waistate="haspopup-true,autocomplete-list" wairole="textbox" dojoattachpoint="textbox,focusNode" dojoattachevent="onkeypress:_onKeyPress,compositionend" autocomplete="off" role="textbox" aria-haspopup="true" aria-autocomplete="list" aria-invalid="false" tabindex="0" aria-required="true" value="Address" aria-owns="wm_widget_SimpleSelect_0_popup"></input></div></div><br></br><img class="wmHorizontalLine" src="/doitt/webmap/js/dojo/resources/blank.gif"></img></div></div> 

(взяты из Firefox»Web Developer, может быть eaiser читать, таким же способом)

ответ

1

Ваш вклад, как показано ниже, один текстовое поле, одно - кнопка со стрелкой.

<div id="widget_wm_widget_SimpleSelect_0" class="dijit dijitReset dijitInlineTable dijitLeft formField dijitTextBox dijitComboBox" lang="" wairole="combobox" dojoattachpoint="comboNode" role="combobox" dir="ltr" style="vertical-align: baseline ! important;" widgetid="wm_widget_SimpleSelect_0" aria-expanded="false"> 
    <div class="dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer" dojoattachevent="onmousedown:_onArrowMouseDown" wairole="presentation" dojoattachpoint="downArrowNode" role="presentation"> 
     <input class="dijitReset dijitInputField dijitArrowButtonInner" type="text" wairole="presentation" readonly="" tabindex="-1" value="▼ " role="presentation"/> 
    </div> 
    <div class="dijitReset dijitInputField dijitInputContainer"> 
     <input id="wm_widget_SimpleSelect_0" class="dijitReset dijitInputInner" type="text" waistate="haspopup-true,autocomplete-list" wairole="textbox" dojoattachpoint="textbox,focusNode" dojoattachevent="onkeypress:_onKeyPress,compositionend" autocomplete="off" role="textbox" aria-haspopup="true" aria-autocomplete="list" aria-invalid="false" tabindex="0" aria-required="true" value="Address" aria-owns="wm_widget_SimpleSelect_0_popup"> 
    </div> 
</div> 

В то время как в раскрывающемся списке является DIV в нижней части DOM, которая существует, но скрыт при загрузке страницы.

<div id="widget_wm_widget_SimpleSelect_0_dropdown" class="dijitPopup dijitComboBoxMenuPopup" style="visibility: hidden; top: -9999px; z-index: 1000; left: 1609.3px;" role="presentation" dijitpopupparent="wm_widget_SimpleSelect_0"> 
    <ul id="wm_widget_SimpleSelect_0_popup" class="dijitReset dijitMenu dijitComboBoxMenu" style="top: 0px; overflow: hidden; width: 200px; height: 88px;" tabindex="-1" dojoattachevent="onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut" dir="ltr" widgetid="wm_widget_SimpleSelect_0_popup"> 
     <li id="wm_widget_SimpleSelect_0_popup_prev" class="dijitMenuItem dijitMenuPreviousButton" wairole="option" dojoattachpoint="previousButton" role="option" style="display: none;">Previous choices</li> 
     <li id="wm_widget_SimpleSelect_0_popup0" class="dijitReset dijitMenuItem" role="option">Address</li> 
     <li id="wm_widget_SimpleSelect_0_popup1" class="dijitReset dijitMenuItem" role="option">Borough/Block/Lot</li> 
     <li id="wm_widget_SimpleSelect_0_popup2" class="dijitReset dijitMenuItem" role="option">Intersection</li> 
     <li id="wm_widget_SimpleSelect_0_popup3" class="dijitReset dijitMenuItem" role="option">Place of Interest</li> 
     <li id="wm_widget_SimpleSelect_0_popup_next" class="dijitMenuItem dijitMenuNextButton" wairole="option" dojoattachpoint="nextButton" role="option" style="display: none;">More choices</li> 
    </ul> 
</div> 

Таким образом, логика вы нажимаете кнопку со стрелкой, подождите тех <li> быть видимым, а затем нажмите видимую <li>.

$browser.element(:css, "#widget_wm_widget_SimpleSelect_0 .dijitArrowButton").click 

# find option by css selector or xpath for only visible ones 
# e.g. clicking `Place of Interest` 
$browser.element(:css, ".dijitComboBoxMenuPopup[style*='visibility: visible;'] #wm_widget_SimpleSelect_0_popup3").click 
+0

Oh awesome okay! Вы случайно знаете, как получить DOM? В firefox сложно управлять, поскольку по умолчанию ничего не расширяется, и поиск не работает так хорошо. – tic

+0

@tic: В вашем случае выше, это довольно сложно, я считаю. Потому что выпадение становится невидимым после потери фокуса. Поэтому мне пришлось наблюдать выделенную панель DOM. Однако в большинстве случаев Firebug в порядке. –

+1

Спасибо за ответ и разъяснение. Firebug работает намного лучше, чем встроенный инструмент веб-разработчика FF. Однако с предоставленным кодом я не мог заставить его работать - список никогда не появляется из первой строки. Пожалуйста, порекомендуйте. – tic

Смежные вопросы