【发布时间】:2020-01-24 20:49:23
【问题描述】:
运行 RSpec 和 Selenium-Webdriver 时出现问题。我正在滚动我自己的框架,并且在每次测试运行后都遇到了问题。我的spec_helper.rb 设置如下所示:
require 'selenium-webdriver'
Dir['./spec/support/**/*.rb'].each { |file| require file }
RSpec.configure do |config|
config.before(:each) do
# Default browser is chrome, otherwise look for ENV variables
case ENV['browser'] ||= 'chrome'
when 'chrome'
@driver = Selenium::WebDriver.for :chrome
when 'firefox'
@driver = Selenium::WebDriver.for :firefox
end
# Clear cookies between each example
@driver.manage.delete_all_cookies
# Set up implicit waits
@driver.manage.timeouts.implicit_wait = 5
# Default base_url is set to website, otherwise look for ENV variables
case ENV['base_url'] ||= 'https:www.website.com' #redacted real website
when 'local'
ENV['base_url'] = 'local_url_here'
when 'development'
ENV['base_url'] = 'https:www.website.com' #redacted real website
when 'production'
ENV['base_url'] = 'prod_url_here'
end
# Close browser window after each test
config.after(:each) do
@driver.close
end
end
end
我的实际 rspec 测试采用以下格式设置:
Rspec.describe 'something' do
context 'some context' do
#multiple it 'stuff' do's
end
end
end
这很典型。但是第一次测试会运行良好,在第一次测试后每个测试运行良好,但浏览器(在本例中为 Chromedriver)在每次测试后关闭并给出错误:Selenium::WebDriver::Error::WebDriverError: no such session。
所以我尝试了:
config.after(:all) do
@driver.quit
end
相反。这会成功运行所有测试,但在测试结束时我也会收到 n 个错误(其中 n = 总测试数)undefined methodquit' for nil:NilClass`。它还会为每个测试打开一个新的浏览器实例(我不想这样做)。
即使没有@driver.quit,RSpec 似乎也会关闭驱动程序。所以我真的很困惑在这里做什么。我不希望新浏览器打开每个实例,但我希望浏览器在每次测试后关闭并打开一个新浏览器(或者这是一个坏主意?,我正在删除 cookie,所以如果它只是切换到一个新的 URL,因为我正在为每个测试做一个 visit 会起作用吗?)
处理这个问题的最佳方法是什么?
【问题讨论】:
标签: ruby selenium-webdriver rspec