Я никогда не пытался использовать selenium-webdriver
в отдельном скрипте, подобном этому, но я столкнулся с той же проблемой, используя selenium-webdriver
в контексте capybara
/ cucumber
.
Глядя на исходный код capybara
, я обнаружил этот хук, который явно закрывает браузер после завершения вашего скрипта. Если вы не используете selenium-webdriver
с capybara
, то это может быть бесполезно, но для меня это было полезно ...
gems/capybara-1.1.1/lib/capybara/selenium/driver.rb
регистрирует ловушку at_exit
, которая затем вызывает quit
для объекта браузера:
require 'selenium-webdriver'
class Capybara::Selenium::Driver < Capybara::Driver::Base
...
def browser
unless @browser
@browser = Selenium::WebDriver.for(options[:browser], options.reject { |key,val| SPECIAL_OPTIONS.include?(key) })
main = Process.pid
at_exit do
# Store the exit status of the test run since it goes away after calling the at_exit proc...
@exit_status = $!.status if $!.is_a?(SystemExit)
quit if Process.pid == main
exit @exit_status if @exit_status # Force exit with stored status
end
end
@browser
end
Вы должны иметь возможность обезопасить метод quit
, чтобы он ничего не делал, например:
Selenium::WebDriver::Driver.class_eval do
def quit
#STDOUT.puts "#{self.class}#quit: no-op"
end
end
Примечание: если вы используете Selenium::WebDriver.for :chrome
и chromedriver
- которые вы не , но могут быть и другие люди - я заметил, что он также убивает процесс chromedriver
, и как только этот «сервисный» процесс завершается, Chrome Браузер Процесс, который был подключен к нему, также завершается.
Таким образом, я должен был также предотвратить остановку этого сервисного процесса, например:
Selenium::WebDriver::Chrome::Service.class_eval do
def stop
#STDOUT.puts "#{self.class}#stop: no-op"
end
end
Была еще одна проблема, с которой я столкнулся, которая, вероятно, не повлияет на вас, если вы не используете этот драйвер с огурцом ... Даже после того, как я оставил браузер открытым, он будет оставлен открытым на странице "about: blank". Похоже, что это вызывается этим хуком:
драгоценные камни / водосвинка-1.1.1 / Библиотека / водосвинка / cucumber.rb:
After do
Capybara.reset_sessions!
end
Что вызывает gems / capybara-1.1.1 / lib / capybara / session.rb: 70: в `reset! '"
Что вызывает gems / capybara-1.1.1 / lib / capybara / selenium / driver.rb: 80: в `reset! '':
def reset!
...
@browser.navigate.to('about:blank')
...
end
И я решил это с помощью другого обезьяньего патча:
Capybara::Selenium::Driver.class_eval do
def reset!
end
end