#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 всегда отображать страницу, без необходимости вставлять режим ожидания после вызова метода?
Версии
- Ruby 2.3.1p112
- capybara 2.10.1
- запуск 2.4.3
- полтергейст 1.11.10
- PhantomJS 2.1.1
- Google Chrome 53.0.2785.143 (64-разрядный)
- Linux 3.16.0-4-amd64 #1 SMP Debian
Комментарии:
1. Я не могу воспроизвести это на macOS, используя предоставленный вами код, так что это может быть проблема с запускаемой платформой. Просто хочу подтвердить, что у вас нет перехвата after suite, который удаляет все сохраненные страницы, не так ли?
2. @Tom Спасибо, что посмотрели на это. У меня нет крючка after suite — код под названием «проблемный код» — это все, что нужно, чтобы это произошло для меня.