Ruby Watir 表单下拉未找到

Posted

技术标签:

【中文标题】Ruby Watir 表单下拉未找到【英文标题】:Ruby Watir Form Pulldown Not Found 【发布时间】:2021-12-02 02:36:24 【问题描述】:

有人知道如何使用Watir 触发下拉选择吗?我似乎无法找到第一个字段。我已经尝试过 class(显然已弃用)、idname

require 'webdrivers/chromedriver'
require 'open-uri'
require 'json'

Selenium::WebDriver::Chrome.path = '/Applications/RF_Utilities/Google Chrome.app/Contents/MacOS/Google Chrome'
url = 'https://www.finditatmpg.com/Default.aspx'

a = Watir::Browser.new :chrome, headless: false
a.goto url
#   a.select(id: 'dpdCemetery_Input').select('Beechwood')  
a.select(name: 'dpdCemetery').select('Beechwood')                       # doesn't work
puts "cemetery selected"                                  # a marker

a.text_field(id: 'txtSurname').set 'Smith'                          # this works if set first
puts "last name selected"                                 # a marker

a.text_field(id: 'txtFirstname').set 'John'
puts "first name selected"                              # a marker

a.button(id: 'btnSearch_input').click                       # submit

错误:

timed out after 5 seconds, waiting for false condition on #<Watir::Select: located: false; :name=>"dpdCemetery", :tag_name=>"select"> (Watir::Wait::TimeoutError)

更新:这是表单的复制语法:

<div id="dpdCemetery" class="RadComboBox RadComboBox_Bootstrap" style="width:300px;white-space:normal;">
  <!-- 2021.1.119.45 --><table summary="combobox" style="border-width:0;border-collapse:collapse;width:100%">
    <tbody><tr>
      <td class="rcbInputCell rcbInputCellLeft" style="width:100%;">
        <input name="dpdCemetery" type="text" class="rcbInput radPreventDecorate" id="dpdCemetery_Input" value="Select a Cemetery" autocomplete="off">
      </td>
      <td class="rcbArrowCell rcbArrowCellRight">
        <a id="dpdCemetery_Arrow" style="overflow: hidden;display: block;position: relative;outline: none;">select</a>
      </td>
    </tr>
  </tbody></table><div class="rcbSlide" style="z-index:6000;display:none;"><div id="dpdCemetery_DropDown" class="RadComboBoxDropDown RadComboBoxDropDown_Bootstrap "><div class="rcbScroll rcbWidth"></div></div></div><input id="dpdCemetery_ClientState" name="dpdCemetery_ClientState" type="hidden" autocomplete="off">
</div>

【问题讨论】:

【参考方案1】:

问题在于这些不是“真正的”html Select/Option 元素下拉菜单,因此您不能使用 Select 类。标签名称是 div 而不是 select

您需要使用类似(更新 - 正确的定位器是 id 而不是名称):

a.div(id: 'dpdCemetary').click
a.li(text: /Beechwood/).click

【讨论】:

好的,发布了 html。我已经为表单中的输入对象确定了id。它不是列表的一部分,div 是该对象的父对象。我听到你在说什么,但我无法将其清除,因为它是 text 类型的实际 input 好的,更新。 a.div(id: 'dpdCemetery').click 删除选择列表,焦点位于文本字段内。我尝试使用.set('Beechwood'),但错误element click intercepted: Element &lt;input class="rbDecorated rbPrimary" type="submit" name="btnSearch" id="btnSearch_input" value="Search" tabindex="-1"&gt; is not clickable at point (87, 402). Other element would receive the click: &lt;li class="rcbItem"&gt;...&lt;/li&gt; @Rich_F 在 Drowdown 删除选择列表后,您应该编写代码以单击其中一个选项,而不是写入文本字段。如果您的字符串中有拼写错误,如果您在文本字段内书写,这种选择列表会自动拒绝您的字符串。 @Rajagopalan 这不是正确的pulldown。这是一个JS 生成的列表。出于某种原因,开发人员没有求助于HTML 是的,我显示的代码点击了匹配的 li,无需输入任何内容。刚刚验证上面的代码没有拦截到点击。但很高兴你让它工作了。【参考方案2】:

已解决:

a.text_field(name: 'dpdCemetery').set('Beechwood')

似乎它的行为类似于text 字段。 JS 提供了dropdown 列表。我的印象是Watir 可以处理这种事情。

【讨论】:

以上是关于Ruby Watir 表单下拉未找到的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails 表单添加带有文本框的“其他”选项以选择下拉菜单

Ruby : Watir : 如何避免从 Net::ReadTimeout 关闭浏览器?

Codeigniter - 在表单编辑中未显示数组时制作下拉菜单

Ruby on Rails:搜索表单 - 多个搜索字段

ruby PORO表单对象和父对象未初始化

Ruby Headless gem 屏幕尺寸未得到尊重