8

有很多关于如何使用 Capybara/Selenium/Rspec 执行 javascript 测试的示例您可以在其中编写如下测试:

it "does something", :js => true do
  ...
end

但是,使用minitest您不能传递第二个参数来指示 selenium 执行测试。

有人对如何做到这一点有任何想法吗?

4

4 回答 4

18

flag 在做什么:js很简单。它将当前驱动程序从默认(机架测试)切换到另一个支持 javascript 执行(selenium、webkit)的驱动程序。你可以在 minitest 中做同样的事情:

require "minitest/autorun"

class WebsiteTest < MiniTest::Unit::TestCase
  def teardown
    super
    Capybara.use_default_driver
  end

  def test_with_javascript
    Capybara.current_driver = :selenium
    visit "/"
    click_link "Hide"
    assert has_no_link?("Hide")
  end

  def test_without_javascript
    visit "/"
    click_link "Hide"
    assert has_link?("Hide")
  end
end

当然,为方便起见,您可以将其抽象为一个模块:

require "minitest/autorun"

module PossibleJSDriver
  def require_js
    Capybara.current_driver = :selenium
  end

  def teardown
    super
    Capybara.use_default_driver
  end
end

class MiniTest::Unit::TestCase
  include PossibleJSDriver
end

class WebsiteTest < MiniTest::Unit::TestCase
  def test_with_javascript
    require_js
    visit "/"
    click_link "Hide"
    assert has_no_link?("Hide")
  end

  def test_without_javascript
    visit "/"
    click_link "Hide"
    assert has_link?("Hide")
  end
end
于 2012-11-08T19:43:17.663 回答
0

嗯,我注意到文档中有几行似乎说上述内容只能在 Rspec 中完成

但是,如果您使用的是RSpec 或 Cucumber,您可能希望考虑将fast 保留:rack_testdefault_driver,并仅分别标记那些需要支持 JavaScript 的驱动程序using :js => true或的测试@javascript

于 2011-04-13T20:29:56.580 回答
0

https://github.com/wojtekmach/minitest-metadata似乎为此提供了解决方案。

您可以执行以下操作:

describe "something under test" do
  it "does not use selenium for this test" do
    visit "/"
    assert body.has_content?("Hello world")
  end

  it "does use selenium for this test", :js => true do
    visit "/"
    click_link "Hide" # a link that uses a javascript click event, for example
    assert body.has_no_link?("Hide")
  end
end
于 2011-10-17T23:04:42.023 回答
0

只是为了更新一些信息,现在有一个更强大的带有Ruby 绑定的 selenium-webdriver 。

要使用 Rails 4 和 selenium-webdriver 从终端快速测试 Firefox 上的 JavaScript,您需要执行以下 4 个步骤:

  1. 将 gem 添加到您的 Gemfile

    gem 'selenium-webdriver' gem 'minitest-rails'

  2. 安装宝石

    捆绑安装

  3. 生成测试用例(参考:官方指南

    bin/rails 生成 integration_test your_case_name

  4. 开始在您的测试用例中编写测试代码。实际上你可以在没有 Capybara 的情况下用 ruby​​ 编写它,要使用 Capybara 编写案例你可以参考Github 的 Capybara

最小样本:

# create a driver
driver = Selenium::WebDriver.for :firefox
# navigate to a page
driver.navigate.to 'url_to_page'
# get element with class box
box = driver.find_element(:css, '.box')

# check width
# get width by execute JavaScript
assert_equal 100, driver.execute_script('return $(arguments[0]).width()', box)

目前似乎缺乏关于如何顺利使用 selenium-webdriver、CI 服务器(Jenkins)和 Rails minitest 的资源,我创建了一个简单的项目,希望它可以帮助任何人快速轻松地入门: Rails Selenium Working Case

也感谢让我可以做出更好答案的评论。

于 2015-08-28T17:31:21.060 回答