这是我的问题:
我正在编写一个应用程序使用selenium-webdriver连接到网站点击/填充一堆东西。
显然,我想测试我的代码 ......这就是困难的地方!我该怎么做?
这是我的测试:
require 'spec_helper'
require 'capybara/rspec'
module MyModule
Capybara.run_server = false
describe "the method", :type => :request do
it "should open a browser and go to the site" do
MyClass.open_site("http://google.com")
page.has_content? "Google"
end
end
end
以下是代码:
require 'selenium-webdriver'
module MyModule
class MyClass
def self.open_site(url)
@driver = Selenium::WebDriver.for :firefox
@driver.navigate.to url
end
end
end
以下是我遇到的错误:
Failures:
1) the method should open a browser and go to the site
Failure/Error: page.has_content? "Google"
ArgumentError:
rack-test requires a rack application, but none was given
# (eval):2:in `has_content?'
# ./spec/integration/myclass_spec.rb:10
我可以理解测试很困惑,因为通常Capybara运行Selenium来访问网站并检查一切看起来是否正常。但是这里Selenium作为代码的一部分独立运行......
我怎么能告诉rack-test使用正在运行的Selenium作为它的应用程序?
Capybara甚至是测试此代码的正确解决方案吗?
感谢您的帮助!
答案 0 :(得分:1)
您正在使用的其中一项功能必须是使用机架应用程序。
问题不应该在以下行:
page.has_content? "google"
因为硒驱动器对我来说效果很好。我怀疑这是你设置驱动程序的方式。
在我发现这些帖子之前,我遇到了类似的问题:google groups
他们给了我一些指导让我的测试运行。 最后,我最终得到了这些线来配置我的测试。 我正在使用chrome但是Internet Explorer和firefox也会这样工作。
require 'selenium-webdriver'
Capybara.register_driver :selenium_ie do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
Capybara.default_driver = :selenium_chrome
Capybara.app_host = 'http://www.google.com'
答案 1 :(得分:0)
这是我使用运行MongoDB的Sinatra应用程序所做的。评论硒代码,尝试没有水豚的纯硒。安装test-unit
,capybara
,capybara-webkit
,selenium-webdriver
宝石。对于capybara-webkit做brew install qt4
(mac)或以另一种方式安装qt4。
require './app'
require 'test-unit'
require 'capybara'
require 'capybara-webkit'
require 'selenium-webdriver'
class IntegrationTest < Test::Unit::TestCase
include Capybara::DSL
def setup
# Clear database first
MongoMapper.database.collections.select { |c| c.name != 'system.indexes' }.each(&:drop)
# For pure selenium: @b = Selenium::WebDriver.for :firefox
# For pure selenium: @w = Selenium::WebDriver::Wait.new(:timeout => 15)
Capybara.run_server = false
Capybara.default_selector = :css
Capybara.default_wait_time = 5
Capybara.ignore_hidden_elements = false
Capybara.javascript_driver = :webkit # Comment out to use :selenium
Capybara.default_driver = Capybara.javascript_driver
Capybara.app = Sinatra::Application.new
Capybara.app_host = "http://crowdfundhq.dev:3001"
Capybara.server_port = 3001
end
def teardown
# For pure selenium: @b.quit
Capybara.reset_sessions!
Capybara.use_default_driver
end
def test_root
# For pure selenium: @b.get "http://crowdfundhq.dev:3001"
# For pure selenium: assert @b.page_source =~ /#pricing/
# Change driver during test: Capybara.current_driver = Capybara.javascript_driver
visit("/")
assert(page.body =~ /highlight/)
end
end