javascript - 使用 Capybara 和 Minitest 测试 JavaScript

标签 javascript ruby-on-rails selenium capybara minitest

有人问过这个问题的多种变体,我确实从阅读该主题中学到了东西,但大多数答案似乎并不直接适用于这种情况,或者涉及使用 Rspec 或 Cucumber 的解决方案。

我目前正在使用 Minitest 和 Capybara 开发一个测试套件。如果可能的话,我不想引入太多其他 gem,但如果它们是轻量级的,我愿意接受它,因为测试已经需要一段时间才能运行。

Rspec 有 :js => true 和 Cucumber 有 @javascript,但是 minitest 似乎没有这样的东西。那么,自然的解决方案是切换驱动程序并执行:Capybara.current_driver = :selenium,但是当我这样做时,它不起作用,并且我得到 2 个错误(每个错误一个)我启用 js 的测试)。

我的问题是:为什么会出现这些错误,我怎样才能进行一些基本的 JavaScript 测试?以下是错误:

Component returned failure code: 0x804b0012 (NS_ERROR_UNKNOWN_PROTOCOL) [nsIWebNavigation.loadURI]
    Exception `Selenium::WebDriver::Error::UnknownError' at:
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:59:in `new'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:59:in `create_response'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:65:in `request'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:598:in `raw_execute'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:576:in `execute'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:99:in `get'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/common/navigation.rb:14:in `to'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/selenium/driver.rb:36:in `visit'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/session.rb:157:in `visit'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/dsl.rb:161:in `visit'
    test/integration/resource_access_test.rb:22:in `block (2 levels) in <top (required)>'

这是另一个错误:

undefined method `[]' for nil:NilClass
    Exception `NoMethodError' at:
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/rack-test-0.6.1/lib/rack/test.rb:171:in `env_for'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/rack-test-0.6.1/lib/rack/test.rb:56:in `get'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/rack_test/browser.rb:62:in `process'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/rack_test/browser.rb:21:in `visit'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/rack_test/driver.rb:32:in `visit'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/session.rb:157:in `visit'
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/dsl.rb:161:in `visit'
    test/integration/resource_access_test.rb:40:in `block (2 levels) in <top (required)>'

有谁知道这里会发生什么,以及我该如何解决这个问题?

最佳答案

尝试使用以下语法来切换 Capybara 驱动程序:

Capybara.current_driver = Capybara.javascript_driver

关于javascript - 使用 Capybara 和 Minitest 测试 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11873904/

相关文章:

ruby-on-rails - Rails 命名空间路由和资源上的自定义操作

ruby-on-rails - 如何从 Rails gem 或 lib 中访问 session 和 cookie?

html - 子菜单(下拉菜单)被截断并且不显示在移动设备上

java - 尝试关闭控制台中的警告但失败

java - 如何在span下拉菜单中选择元素cssSelector webdriver Java

Javascript 事件监听器只能工作一次

javascript - 是否可以使用 Electron 进行复制/粘贴?

Javascript 不会在页面加载时更改图像源

python - 操作系统错误 : [Errno 8] Exec format error with GeckoDriver and Selenium on MacOS

javascript - 将 IBM watson API 与 jquery 的 $.ajax 一起使用