【问题标题】:Dropdown not getting selected when it should be ... why?应该选择的下拉菜单没有被选中……为什么?
【发布时间】:2015-07-03 02:07:29
【问题描述】:

我正在尝试解决我们测试中的一个错误,我认为该错误应该可以工作。我很确定这是 selectize 或 capybara 中的错误,但我不知道为什么。

我已经进入 capybara 的源代码,一切似乎都在正常工作。我不确定如何继续前进。

为了测试这个错误,我已将错误尽可能地精简为一个小test application。请参阅下面的设置

bugs/show.html.erb

  <select id="select-repo" class="repositories selectized" placeholder="Pick a repository...">
  </select>

  <select id="dropdown1">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
    <option value="4">Four</option>
  </select>

  <select id="dropdown2">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
    <option value="4">Four</option>
  </select>

bug_spec.rb

feature 'bug' do
  it "spec setup", js: true do
    visit bug_path

    find('div.selectize-input input', match: :first).set('exercism.io')
    select 'Four', from: 'dropdown1' # this is not getting selected
    select 'Four', from: 'dropdown2'

    sleep 2

    expect(page).to have_select('dropdown1', selected: 'Four') # testing that dropdown1 is being selected
  end
end

# note that the javascript to initialize the selectize drop down is in application.js if you want to look at it go to the github application.

上面的测试访问的页面有一个 ajax 选择下拉菜单和两个普通的选择元素。它尝试将文本 - 'exercism.io' - 放在选择下拉列表中(通常我有另一行来实际模拟按下回车键,但没有那行会发生错误),然后它继续设置值下拉 1 和下拉 2。我已经进行了测试js: truesleep 2 以使ajax 正常工作,因此您可以看到测试运行时实际发生的情况。

问题是它无法设置 dropdown1 的值。当您运行测试并查看发生了什么时,您可以看到它找到了要设置的值,但实际上并没有设置它。它只是移动到下一个选择。

另一个奇怪的事情是,如果我如下更改测试,则测试通过。所以我很确定这与选择下拉菜单的设置有关。

bug_spec.rb

feature 'bug' do
  it "spec setup", js: true do
    visit bug_path

    select 'Four', from: 'dropdown1' # this is not getting selected
    select 'Four', from: 'dropdown2'
    find('div.selectize-input input', match: :first).set('exercism.io')

    sleep 2

    expect(page).to have_select('dropdown1', selected: 'Four') # testing that dropdown1 is being selected
  end
end

我在demo application 中复制了这个错误,可以在 github 上找到。

很抱歉,如果这个问题很长,我真的不知道该问题该如何表述。

请注意,此示例已被精简。在我的实际代码中,我使用了 provided 的代码来使用 capybara 并一起选择。

【问题讨论】:

  • 我不熟悉 selenium 中的 ruby​​ 绑定。帮帮我:当你做 select 'Four', from: 'dropdown1' 时,from: 使用什么选择器策略?
  • 按 ID 选择
  • 是的,您需要区分获取选项与获取子元素以及获取值与通过 id 获取与通过内部文本获取。您的问题中没有足够的信息来帮助我为您解答问题。
  • 对不起,我并没有真正理解你所说的。也许我对水豚的了解还不够好。我提供了一个完整的应用程序来查看它是否复制了该错误。不知道怎么没有足够的信息? “获取选项”或“获取子元素”是什么意思。我怎样才能提供更多信息以及该错误的工作副本? ://
  • 这看起来可能是浏览器焦点问题。尝试在设置后添加 find('#dropdown1').click('exercism.io) 这似乎在我的快速测试中绕过了它。如果浏览器在执行期间没有焦点(在另一个窗口中单击),则看起来测试也通过了。另请参阅:github.com/mattheworiordan/jquery-focus-selenium-webkit-fix可能相关且有用。

标签: ruby ruby-on-rails-4 selenium capybara selectize.js


【解决方案1】:

我得到了关于水豚forums的答案。

看起来这是@tgf 提到的浏览器焦点问题(在link 中)

谢谢。

【讨论】:

    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多