0

有问题的网站: http://gis.nyc.gov/doitt/nycitymap/template?applicationName= ZOLA

当前代码:

  $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("text")。我该如何操作这种类型的代码?

该网站的部分如下:

<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,可能也更容易阅读)

4

1 回答 1

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>

而下拉列表是DOM底部的一个div,它存在但在页面加载时隐藏。

<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
于 2013-07-31T01:23:18.693 回答