有很多关于如何使用Capybara / Selenium / Rspec 执行javascript测试的示例,您可以在其中编写测试:
it "does something", :js => true do
...
end
然而,使用 minitest ,您无法传递第二个参数来指示selenium执行测试。
有没有人对如何做到这一点有任何想法?
答案 0 :(得分:18)
: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
答案 1 :(得分:0)
嗯,我注意到文档中有几行似乎只能说上面的内容只能在Rspec中完成
但是,如果您使用的是 RSpec或黄瓜,则可能需要考虑将:rack_test
更快地保留为default_driver
,并仅标记那些需要支持JavaScript的驱动程序using :js => true
或@javascript
。
答案 2 :(得分: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
答案 3 :(得分:0)
为了更新一些信息,现在有一个功能更强大的selenium-webdriver Ruby Bindings。
要使用Rails 4和selenium-webdriver快速测试终端上的Firefox,您需要执行以下4个步骤:
将gem添加到您的Gemfile
gem&#39; selenium-webdriver&#39; gem&#39; minitest-rails&#39;
安装宝石
捆绑安装
生成测试用例(参考:Official Guide)
bin / rails生成integration_test your_case_name
开始在测试用例中编写测试代码。 实际上你可以在没有Capybara的红宝石中写它,用Capybara写一个案例你可以参考Capybara at Github
最小样本:
# 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
同样感谢让我能够做出更好回答的评论。