【问题标题】:Impossible to test Angular UI Typeahead with Poltergeist and PhantomJS无法使用 Poltergeist 和 PhantomJS 测试 Angular UI Typeahead
【发布时间】:2014-02-06 19:31:58
【问题描述】:

我在测试预输入输入时遇到问题。我正在使用 Rails、RSpec、Capybara、Angular UI 0.10、AngularJS、Poltergeist。这是我的测试:

create(:user, name: "Test User")
fill_in 'User', with: "Test"
find('#delegations').find('li.active').click

如果我使用 Chrome 驱动程序运行它,它会成功运行。但是,当使用 Poltergeist 运行时,建议框不显示,尽管服务器收到请求并相应地返回用户。

我认为fill_in 在场上触发blur,使该框消失。我使用Capybara::Screenshot 来查看是否有任何建议出现,但没有。输入字段甚至没有获得焦点。

【问题讨论】:

    标签: ruby-on-rails phantomjs angular-ui-bootstrap bootstrap-typeahead poltergeist


    【解决方案1】:

    我发现这确实是因为 Poltergeist 在fill_in 中触发了blur。我所要做的就是,在填写预输入字段之前,执行这个脚本:

    page.execute_script "$('input[typeahead]').unbind('blur')"
    

    这样,UI Typeahead 的 blur 事件不会被调用,它认为它已经将焦点放在该字段上,从而相应地呈现建议框。

    如果您不使用 JQuery,则此脚本适用于 AngularJS:

    elements = document.getElementsByTagName('input');
    for (var i = 0; i < elements.length; i++) {
      if (elements[i].hasAttribute('typeahead')) {
        angular.element(elements[i]).unbind('blur');
      }
    }
    

    【讨论】:

    • 你是救生员。今天早上我在同样的问题上苦苦挣扎。如果我们一起入狱,我会保护你。
    • 感谢您的提问和回答。这让我很头疼。
    • 如果你的肥皂掉了,我也会给你。
    • 好东西。为了让未来的搜索者清楚,这种技术适用于 Twitter Typeahead:twitter.github.io/typeahead.js/examples,我相信这是 Angular Typeahead 使用的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多