Ruby on rails Selenium::WebDriver::Error::InvalidSessionIdError导致Rspec失败
编辑:萝卜片是一条红鲱鱼。单独运行rspec本身仍然是一个问题 调用示例:Ruby on rails Selenium::WebDriver::Error::InvalidSessionIdError导致Rspec失败,ruby-on-rails,selenium,selenium-webdriver,rspec,turnip,Ruby On Rails,Selenium,Selenium Webdriver,Rspec,Turnip,编辑:萝卜片是一条红鲱鱼。单独运行rspec本身仍然是一个问题 调用示例: bundle exec rspec spec/features/subscription\u spec.rb:33 错误: Failures:
bundle exec rspec spec/features/subscription\u spec.rb:33
错误:
Failures:
1) Subscription should redirect to back for free subscription
Got 0 failures and 2 other errors:
1.1) Failure/Error: visit subscription_status_path
Selenium::WebDriver::Error::NoSuchWindowError:
Browsing context has been discarded
# WebDriverError@chrome://marionette/content/error.js:175:5
# NoSuchWindowError@chrome://marionette/content/error.js:409:5
# assert.that/<@chrome://marionette/content/assert.js:428:13
# assert.open@chrome://marionette/content/assert.js:183:72
# GeckoDriver.prototype.get@chrome://marionette/content/driver.js:1109:10
# despatch@chrome://marionette/content/server.js:305:40
# execute@chrome://marionette/content/server.js:275:16
# onPacket/<@chrome://marionette/content/server.js:248:20
# onPacket@chrome://marionette/content/server.js:249:9
# _onJSONObjectReady/<@chrome://marionette/content/transport.js:503:20
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/response.rb:72:in `assert_ok'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:88:in `new'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:88:in `create_response'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/default.rb:114:in `request'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:64:in `call'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/bridge.rb:167:in `execute'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/w3c/bridge.rb:567:in `execute'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/w3c/bridge.rb:59:in `get'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/common/navigation.rb:32:in `to'
# /usr/local/bundle/gems/capybara-3.32.2/lib/capybara/selenium/driver.rb:71:in `visit'
# /usr/local/bundle/gems/capybara-3.32.2/lib/capybara/session.rb:278:in `visit'
# /usr/local/bundle/gems/capybara-3.32.2/lib/capybara/dsl.rb:58:in `block (2 levels) in <module:DSL>'
# ./spec/features/subscription_spec.rb:36:in `block (2 levels) in <top (required)>'
# ./spec/rails_helper.rb:60:in `block (3 levels) in <top (required)>'
# /usr/local/bundle/gems/database_cleaner-1.8.4/lib/database_cleaner/generic/base.rb:16:in `cleaning'
# /usr/local/bundle/gems/database_cleaner-1.8.4/lib/database_cleaner/configuration.rb:87:in `block (2 levels) in cleaning'
# /usr/local/bundle/gems/database_cleaner-1.8.4/lib/database_cleaner/configuration.rb:88:in `cleaning'
# ./spec/rails_helper.rb:59:in `block (2 levels) in <top (required)>'
1.2) Failure/Error: example.run
Selenium::WebDriver::Error::UnknownError:
Failed to decode response from marionette
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/response.rb:72:in `assert_ok'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:88:in `new'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:88:in `create_response'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/default.rb:114:in `request'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:64:in `call'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/bridge.rb:167:in `execute'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/w3c/bridge.rb:567:in `execute'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/w3c/bridge.rb:92:in `alert_text'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/common/alert.rb:27:in `initialize'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/common/target_locator.rb:107:in `new'
# /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/common/target_locator.rb:107:in `alert'
# /usr/local/bundle/gems/capybara-3.32.2/lib/capybara/selenium/driver_specializations/firefox_driver.rb:48:in `reset!'
# /usr/local/bundle/gems/capybara-3.32.2/lib/capybara/session.rb:130:in `reset!'
# /usr/local/bundle/gems/capybara-3.32.2/lib/capybara.rb:322:in `block in reset_sessions!'
# /usr/local/bundle/gems/capybara-3.32.2/lib/capybara.rb:322:in `reverse_each'
# /usr/local/bundle/gems/capybara-3.32.2/lib/capybara.rb:322:in `reset_sessions!'
# /usr/local/bundle/gems/capybara-3.32.2/lib/capybara/rspec.rb:18:in `block (2 levels) in <top (required)>'
# ./spec/rails_helper.rb:60:in `block (3 levels) in <top (required)>'
# /usr/local/bundle/gems/database_cleaner-1.8.4/lib/database_cleaner/generic/base.rb:16:in `cleaning'
# /usr/local/bundle/gems/database_cleaner-1.8.4/lib/database_cleaner/configuration.rb:87:in `block (2 levels) in cleaning'
# /usr/local/bundle/gems/database_cleaner-1.8.4/lib/database_cleaner/configuration.rb:88:in `cleaning'
# ./spec/rails_helper.rb:59:in `block (2 levels) in <top (required)>'
Finished in 9.46 seconds (files took 4.92 seconds to load)
2 examples, 1 failure
Failed examples:
rspec ./spec/features/subscription_spec.rb:33 # Subscription should redirect to back for free subscription
Traceback (most recent call last):
12: from /usr/local/bundle/gems/capybara-3.32.2/lib/capybara/selenium/driver.rb:458:in `block in setup_exit_handler'
11: from /usr/local/bundle/gems/capybara-3.32.2/lib/capybara/selenium/driver.rb:243:in `quit'
10: from /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/firefox/marionette/driver.rb:56:in `quit'
9: from /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/common/driver.rb:168:in `quit'
8: from /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/w3c/bridge.rb:155:in `quit'
7: from /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/w3c/bridge.rb:567:in `execute'
6: from /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/bridge.rb:167:in `execute'
5: from /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:64:in `call'
4: from /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/default.rb:114:in `request'
3: from /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:88:in `create_response'
2: from /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:88:in `new'
1: from /usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
/usr/local/bundle/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/response.rb:72:in `assert_ok': Tried to run command without establishing a connection (Selenium::WebDriver::Error::InvalidSessionIdError)
turnip_helper.rb:
require'rails\u helper'
要求“turnip/capybara”#分步骤使用capybara DSL方法
要求“sidekiq/测试”
Dir.glob(“spec/steps/***steps.rb”){| f | load f,true}
rails_helper.rb:
ENV['RAILS_ENV']| |='test'
需要文件。展开\u路径(“../config/environment”,\u目录\u)
如果Rails.env.production,是否中止(“Rails环境正在生产模式下运行!”)?
需要“rspec/rails”
需要“设计”
需要“网络驱动程序”
需要“工厂机器人轨道”
需要“冒牌货”
需要“水豚”
Dir[Rails.root.join('spec','support','**','*.rb')。每个{f |都需要f}
开始
ActiveRecord::Migration.maintenant\u test\u schema!
rescue ActiveRecord::PendingMigrationError=>e
把e.带到美国
出口1
结束
Capybara.register_驱动程序:firefox_headless do|app|
选项=::Selenium::WebDriver::Firefox::options.new
options.args e
救援=>e
STDERR.puts“删除#{model.name}:#{e.inspect}的elasticsearch索引时出错”
结束
结束
结束
结束
结束
RSpec.configure do | config|
config.expect_with:rspec do| expections|
expections.include\u chain\u子句\u in\u custom\u matcher\u descriptions=true
结束
config.mock_with:rspec do|mock|
mocks.verify_partial_doubles=true
结束
config.shared\u context\u metadata\u behavior=:将\u应用于\u主机\u组
结束
订阅规格rb:33
scenario“应该重定向到后台进行免费订阅”,js:true-do
废话
结束
如果我运行的rspec测试没有声明js:true
,它就可以工作
我做了更多的探索,结果发现即使不去追萝卜它也失败了。因此,萝卜片可能是一条红鲱鱼
在这一点上,失败的纯粹是rspec/capybara(与我的stackoverflow帖子中的错误相同)
有趣的是,这里有一个特别的任务:
scenario“应该看到现有订阅的错误消息”,js:true-do
高级用户确认
使用premium\u user.email“password”登录
访问“/订阅”
期望(第页)。包含内容“您已订阅”
结束
“sign_in_with”是一个使用水豚语法的助手:
模块功能
会话助手模块
def注册(电子邮件、密码、确认)
访问新用户注册路径
在“电子邮件”中填写:电子邮件
在“用户[密码]”中填写:password
填写“用户[密码确认]”,:with=>confirmation
单击按钮“注册!”
结束
def登录(电子邮件、密码)
访问新用户会话路径
在“电子邮件”中填写:电子邮件
在“密码”中填写:Password
单击按钮“登录”
结束
结束
结束
这(使用helper的
登录)工作正常。如果我在这个任务中使用binding.pry,我会看到Firefox在“登录”期间存在。但在这一步完成后,Firefox立即消失,然后“访问”失败,因为Firefox消失了。我不知道为什么,但Firefox Headless似乎是个问题。无论出于何种原因,它对萝卜有效,但对纯rspec无效。当我不再使用Firefox,改用Chrome headless时,它确实起了作用。我不知道为什么,但Firefox headless似乎是个问题。无论出于何种原因,它对萝卜有效,但对纯rspec无效。当我不再使用Firefox,改用Chrome headless浏览器时,它成功了。