Save_and_open_page не работает с capybara 2.0?
Я только что обновил capybara до 2.0, и все мои вызовы save_and_open_page возвращают html-страницу без стилизации. Он имеет ссылки на таблицы стилей в верхней части страницы. Когда я вернусь назад к capybara 1.3, стили снова работают. Кто-нибудь знает, как это исправить, и/или в чем проблема?
спасибо,
Dave
Обновление 1.
хак:
Я нашел разумный способ обойти проблему, следуя ссылкам, рекомендованным simonmorley:
Проблема Capybara Webkit
который указывает на: capybara-screenshot
В нем используется скриншот capybara-screenshot, чтобы получить скриншот того, как выглядит страница. Когда вы объединяете его с save_and_open_page, который генерирует html, вы можете видеть, как он выглядит, и видеть HTML.
save_and_open_page
Capybara::Screenshot.screenshot_and_open_image
Если бы я мог работать Capybara::Screenshot.screenshot_and_save_page
, тогда я думаю, что у меня может быть решение (если название подразумевает действие, которое, как я думаю, оно делает). Однако, когда я пытаюсь, я получаю cannot load such file -- capybara/util/save_and_open_page
Обновление 2.
!! подождите, screenshot_and_open_image теперь не работает (изображение png не создается или не отображается).!!
Обновление 3.
Тестовое приложение:
Я создал тестовое приложение и разместил его на test_capybara_screenshot на Github.
Когда я запускаю это тестовое приложение в разработке, на странице появляется стильный стиль красного фона. Когда я запускаю тесты, единственное, что работает для меня, это save_and_open_page, за исключением того, что нет стиля.
Обратите внимание, что когда я запускаю какие-либо тесты, я получаю следующее предупреждение:
ПРЕДУПРЕЖДЕНИЕ: Nokogiri был создан против LibXML версии 2.7.8, но динамически загружал 2.7.3
Подробности теста rspec:
- На странице save_and_open_ отображается скучный белый фон (нет
укладка).
- Сценарий screenshot_and_open_image возвращается с ошибкой:
Rack:: Драйвер test capybara не имеет возможности выводить снимки экрана. Пропуск.
Ошибка при открытии /~/Documents/experiments/test_capybara_screenshot/tmp/capybara/screenshot-2012-11-26-07-48-29.png с опциями {}: не найдено ни одного приложения для обработки '/~/Documents/эксперименты/test_capybara_screenshot/TMP/водосвинка/скриншот-2012-11-26-07-48-29.png
- Возврат к экрану screenshot_and_save_page:
Произошла ошибка при перехвате
LoadError: невозможно загрузить такой файл - capybara/util/save_and_open_page произошло в ~/.rvm/gems/[email protected]/gems/activesupport-3.2.6/lib/active_support/dependencies.rb: 251: в `require '
Ответы
Ответ 1
Мне удалось исправить проблему с помощью save_and_open_page после просмотра и копания блога. Я уронил камень capybara_screenshot из моего проекта. Вы можете увидеть мой рабочий код в моем github test_capybara_screenshot репозитории. Решение, которое я выяснил, использует некоторые указатели, которые я нашел на веб-сайте capybara github.
Предположения:
- Вы используете rspec для тестирования.
- Ваше приложение уже настроено для использования конвейера активов.
Первое, что я делаю, - настроить его так, чтобы активы были предварительно скомпилированы в тестовый каталог. Я делаю это, добавляя следующий код в файл spec/spec_helper.rb
в цикле RSpec.configure
:
config.before (scope = :suite) do
%x[bundle exec rake assets:precompile]
end
Я указываю, где активы предварительно скомпилированы в файле config/environments/test.rb
:
config.assets.prefix = "assets_test" # place test assets in public/assets_test directory
config.action_controller.asset_host = "file://#{::Rails.root}/public"
Это делает так, что тестовые активы не зависят от активов разработки и генерируются только во время запуска тестового набора.
Если вы сделаете это, вы, вероятно, захотите иметь git игнорировать каталоги /public/assets*
.
Ответ 2
Попробуйте добавить в свой файл gem следующее:
group :test do
gem "capybara"
gem "launchy"
end
save_and_open_page не будет работать без этого, я не верю.
- Обновлено -
Я тестировал это для вас, и когда я использовал метод save и open, я получаю ту же ошибку. В моей настройке это связано с тем, что моя страница ссылается:
<link href="/assets/application.css" media="screen" rel="stylesheet" type="text/css" />
Это происходит в Firefox, Chrome и Safari. По словам инспектора, ни один из файлов не найден.
Я не рассматривал это слишком подробно и не получил ответа, почему он не работает. Однако есть и ряд людей, борющихся с этим:
https://github.com/jnicklas/capybara/issues/485
И, немного больше информации о capybara и прекомпиляции активов:
https://github.com/jnicklas/capybara/pull/609
И что может быть исправить здесь:
https://groups.google.com/forum/#!msg/ruby-capybara/SBCor8UUj7w/hv97EgUQ1P4J
Однако, если вы просто хотите увидеть свою страницу, вы можете попробовать это: удалить scrap save_and_open_page и изменить свои тесты на использование javascript. Таким образом, мои страницы открываются нормально.
require 'spec_helper'
describe "Foo" do
it "should fail if Bar is lactose intolerant", :js => true do
# .....
end
end
Попробуйте это и сообщите мне, если это поможет.
(от Taylored Web Sites):
Я вижу страницу на несколько секунд, затем она исчезает. Есть ли способ закрыть окно браузера?