【发布时间】: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: true 和sleep 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