AKW*_*KWF 5 rspec capybara ruby-on-rails-3 poltergeist
我正在第4天尝试autocomplete在RSpec测试中开火.在浏览器中超级工作,它非常难以在我的请求规范中运行.
更新:看起来我的RSpec/Capy脚本是针对dev db而不是test db运行的.我使用的是战俘,所以我不知道如何设置default_url_options[:host]或Capybara.app_host并Capybara.server_port到.我有一种感觉,如果我解决这个问题,它可能有用.
堆栈是:
点击链接,点击按钮,fill_in字段都很棒.但是,当需要让这个自动完成工作时,它绝对拒绝工作.
我正在使用这种方法:
def fill_autocomplete(field, options = {})
fill_in field, with: options[:with]
page.execute_script %Q{ $("##{field}").trigger('focus') }
page.execute_script %Q{ $("##{field}").trigger('keydown') }
selector = %Q{ul.ui-autocomplete li.ui-menu-item a:contains("#{options[:select]}")}
Capybara::Screenshot.screenshot_and_open_image
page.should have_selector('ul.ui-autocomplete li.ui-menu-item a')
page.execute_script %Q{ $("#{selector}").trigger('mouseenter').click() }
end
Run Code Online (Sandbox Code Playgroud)
我在这里找到了.这screenshot条线是我自己的.但是上面的一行:
page.should have_selector('ul.ui-autocomplete li.ui-menu-item a')
Run Code Online (Sandbox Code Playgroud)
回报false.它就像浏览器中的魅力一样.我不能为我的生活弄清楚为什么它不起作用.我已经尝试过我所知道的一切.我该怎么调试呢?
屏幕截图只显示了我期待的页面,并且字段填写正确.我甚至用插入autocomplete呼叫的"你好"警报对此进行了测试.在浏览器中完美运行,但在测试中根本没有结果.
简而言之,看起来以下两行没有效果:
page.execute_script %Q{ $("##{field}").trigger('focus') }
page.execute_script %Q{ $("##{field}").trigger('keydown') }
Run Code Online (Sandbox Code Playgroud)
小智 3
我遇到了类似的问题,尽管 Capybara 的文档说have_selector将等待 AJAX 调用完成,但它对我不起作用。
以下内容在我的案例中有效:
def fill_in_autocomplete(field_label, field_class, options = {})
field_id = "##{page.evaluate_script("$('#{field_class}').attr('id')")}"
selector = "ul.ui-autocomplete li.ui-menu-item a"
fill_in(field_label, with: options[:with])
page.execute_script("$('#{field_id}').trigger('focus')")
page.execute_script("$('#{field_id}').trigger('keydown')")
sleep(2) # Hack! not sure why the line below isn't working...
#expect(page).to have_selector(selector, text: options[:with])
page.execute_script("$('#{selector}').click()")
end
Run Code Online (Sandbox Code Playgroud)
您可以像这样调用上面的方法:
fill_in_autocomplete('Some label', '.js-some-field', with: 'Some value'
Run Code Online (Sandbox Code Playgroud)
我不想传递字段 ID 并选择了一个类,这就是为什么助手中的第一行根据元素的类获取 ID。
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |