使用Capybara+Selenium Webdriver运行RSpec报undefined method `visit`错如何解决
问题排查与修复方案
错误根因
undefined method 'visit'报错是因为Capybara的DSL方法默认仅会注入到标记为feature类型的RSpec用例中,你当前的测试用例没有声明对应类型,所以无法识别visit等Capybara专属方法。
修复方法(二选一即可)
方案1:给测试用例增加类型标记
修改run.rb文件,在describe块后添加:type => :feature参数,同时注意visit的地址需要补全协议(否则会报错),修改后代码如下:
require_relative 'spec_helper' describe "test process", :type => :feature do it "checks google" do # 地址需要补全http/https协议 visit("https://www.google.com") puts "LAUNCHED" end end
方案2:全局注入Capybara DSL
如果不想给每个测试用例单独加类型标记,可以在spec_helper.rb末尾添加全局配置,直接把Capybara的方法注入所有RSpec用例:
# 追加到spec_helper.rb的最后 RSpec.configure do |config| config.include Capybara::DSL end
额外注意事项
- 如果你需要使用你配置的
headless_chrome驱动执行测试,需要在测试用例上增加:js => true标记,示例:describe "test process", :type => :feature, :js => true do - 如果测试的是外部站点(不是本地开发的Rack应用),需要在
spec_helper.rb里追加两行配置,避免Capybara启动本地服务:Capybara.run_server = false Capybara.default_driver = :chrome # 也可以直接指定为:headless_chrome
内容的提问来源于stack exchange,提问作者user3636388
相关产品推荐
相关产品推荐

