Ruby on rails 如何使用Minitest、Capybara和Selenium执行javascript测试?
关于如何使用Capybara/Selenium/Rspec执行javascript测试,有很多示例,您可以在其中编写如下测试:Ruby on rails 如何使用Minitest、Capybara和Selenium执行javascript测试?,ruby-on-rails,ruby-on-rails-3,selenium,capybara,minitest,Ruby On Rails,Ruby On Rails 3,Selenium,Capybara,Minitest,关于如何使用Capybara/Selenium/Rspec执行javascript测试,有很多示例,您可以在其中编写如下测试: it "does something", :js => true do ... end 但是,使用minitest时,无法传递第二个参数来指示selenium执行测试 有人对如何做到这一点有什么想法吗?嗯,我注意到文档中有几行似乎说上面的内容只能在Rspec中完成 但是,如果您使用的是 rScript或黄瓜,您可能会考虑将更快的:RACKyTest< /CO
it "does something", :js => true do
...
end
但是,使用minitest时,无法传递第二个参数来指示selenium执行测试
有人对如何做到这一点有什么想法吗?嗯,我注意到文档中有几行似乎说上面的内容只能在Rspec中完成
但是,如果您使用的是<强> rScript或黄瓜,您可能会考虑将更快的<代码>:RACKyTest< /COD>作为<代码> Debug Tuxor < /C> >,并仅使用那些需要JavaScript驱动程序>代码>的测试:使用JS= > Trase或
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
: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
要求“小型测试/自动运行”
类WebsiteTest
当然,为了方便起见,您可以将其抽象为一个模块:
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
要求“小型测试/自动运行”
模块可能驱动程序
def需要_js
Capybara.current_驱动程序=:selenium
结束
def拆卸
超级的
使用默认驱动程序
结束
结束
类MiniTest::Unit::TestCase
包括可能的驾驶员
结束
类WebsiteTest
为了更新一些信息,现在有一个更强大的selenium webdriver
要使用Rails 4和selenium webdriver从终端在firefox上快速测试JavaScript,您需要执行以下4个步骤:
# 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 server(Jenkins)和Rails minitest的资源,我已经创建了一个简单的项目,希望它能帮助任何人快速轻松地入门:
同样感谢您的评论,让我能够做出更好的回答。迷你测试水豚实际上没有提供这一功能。这更准确地回答了OP的问题,因为使用
迷你测试元数据gem允许您将:js=>true
散列传递到it
块,就像在RSpec中一样。这避免了在每个测试方法中都需要方法调用,就像在接受的答案中一样。如果包含gem自述文件中的:before
和:after
块(参见链接),而不是显示的不完整代码,那么答案会有所改进。您不能在minitest中的it“应该这样做”do
级别指定:js=>true。仅在主description
块中。如何在Test::Unit上使用Js是一个问题。说要像当前答案一样使用冗长的Capybara.current\u driver=
。这理论上可能会回答这个问题,但最好将答案的基本部分包含在这里,供未来用户使用,并提供链接供参考。通过链接到您自己的库不是一个好的答案。链接到它,解释它解决问题的原因,提供使用库来解决问题的代码,以及免责声明,这些都是更好的答案。见: