save_and_show_page не отображает страницу, если тест заканчивается слишком быстро

#ruby #phantomjs #capybara #poltergeist

#ruby #phantomjs #capybara #полтергейст

Вопрос:

Capybara, библиотека веб-тестирования для Ruby, имеет метод Capybara::Session.save_and_show_page, который выводит текущую веб-страницу в браузере. Похоже, что это работает асинхронно — веб-страница отображается через некоторое время после выполнения вызова. Это нормально, но если тест заканчивается слишком быстро после вызова #save_and_show_page , веб-страница не отображается.

Проблемный код

Учитывая этот Gemfile:

 source "https://rubygems.org"
gem "launchy"
gem "poltergeist"
 

Тогда этот код не отображает веб-страницу:

 require "capybara/poltergeist"
session = Capybara::Session.new(:poltergeist)
session.visit("http://www.google.com")
session.save_and_open_page
 

Обходной путь

Добавление краткого ожидания в конце кода приводит к отображению веб-страницы по желанию:

 require "capybara/poltergeist"
session = Capybara::Session.new(:poltergeist)
session.visit("http://www.google.com")
session.save_and_open_page
sleep 1
# => Opening "/home/wayne/homesmart/franchise-manager-qa/capybara-201610141504469160970532.html" with Google Chrome  (text/html)
# => [10253:10281:1014/150446:ERROR:nss_util.cc(809)] After loading Root Certs, loaded==false: NSS error code: -8018
# => Created new window in existing browser session.
 

Как я могу заставить метод Capybara #save_and_open_page всегда отображать страницу, без необходимости вставлять режим ожидания после вызова метода?

Версии

Комментарии:

1. Я не могу воспроизвести это на macOS, используя предоставленный вами код, так что это может быть проблема с запускаемой платформой. Просто хочу подтвердить, что у вас нет перехвата after suite, который удаляет все сохраненные страницы, не так ли?

2. @Tom Спасибо, что посмотрели на это. У меня нет крючка after suite — код под названием «проблемный код» — это все, что нужно, чтобы это произошло для меня.