Хобрук: Ваш путь к мастерству в программировании

Полтергейст Stripe checkout.js

Я пытаюсь протестировать в своем приложении Rails всплывающее окно оформления заказа Stripe (http://www.stripe.com/checkout).

Я использовал Capybara + selenium-driver, и все работало хорошо. Когда страница загружается, checkout.js добавляет iframe, и я смог получить к нему доступ.

within_frame('stripe_checkout_app') do
 do something
end

Теперь, переключаясь на полтергейст, я получаю эту ошибку:

Сбой/ошибка: inside_frame('stripe_checkout_app') do Capybara::Poltergeist::FrameNotFound: Фрейм 'stripe_checkout_app' не найден.

и если я проверю страницу, там нет iframe. Так что я думаю, что этот сценарий

<script type="text/javascript" src="https://checkout.stripe.com/checkout.js"></script>

не загружается, когда я запускаю тест с полтергейстом.

Обновлять

Я попытался запустить тест с помощью Capybara-webkit с тем же результатом.

Failure/Error: Capybara.within_frame('stripe_checkout_app') do
 Capybara::Webkit::InvalidResponseError:
   Unable to locate frame.

Я тоже пробовал ждать полминуты! с участием

sleep 30

Это мои настройки веб-макета:

RSpec.configure { |config|
WebMock.disable_net_connect!(allow_localhost: true)
 }

Обновление 2:

Stripe_checkout_app — это имя iframe.

<iframe frameborder="0" allowtransparency="true" src="https://checkout.stripe.com/v3" name="stripe_checkout_app" class="stripe_checkout_app" style="z-index: 9999; display: none; background-color: transparent; border: 0px none transparent; overflow-x: hidden; overflow-y: auto; visibility: visible; margin: 0px; padding: 0px; -webkit-tap-highlight-color: transparent; position: fixed; left: 0px; top: 0px; width: 100%; height: 100%;"></iframe>

Ответы:


1

Для всех, кто заинтересован, я нашел способ получить доступ к iframe без использования 'within_frame', просто используя метод окна переключения полтергейста.

stripe = page.driver.window_handles.last

page.within_window stripe do
  fill_in "Name", :with => "Name"
  fill_in "Street", :with => "Street"
  fill_in "Postal", :with => 10000
  fill_in "City", :with => "Berlin"

  click_button "Payment Info"
end

Для испанцев я нашел решение здесь: numerica latina.

21.03.2014
  • parov, у меня та же проблема ( stackoverflow.com/questions/24081305 ), хотя, когда я пробую ваше решение, я получаю следующую ошибку: undefined method 'window_handles' for #<Capybara::Poltergeist::Driver:0x007fa09adde108> - есть идеи? Спасибо! 06.06.2014
  • Вы можете проверить, какую ветку полтергейста вы используете? Метод есть в ветке master. github.com/teampoltergeist/poltergeist/blob/master/ библиотека/капибара/ 07.06.2014
  • Спасибо паров! Вы ведете меня по правильному пути! Когда я bundle update, я получаю Using poltergeist (1.0.3), что кажется довольно старым. ... проверка моего gemfile показывает, что я заблокировал Capybara до «~› 1.1.2», что ограничило Poltergeist до 1.0.3. Обновление всего до последних драгоценных камней (Capybara 2.3.0 и Poltergeist 1.5.1) все исправило! 07.06.2014

  • 2

    Если у вас есть аналогичная проблема с phantomjs 1.9.7, это связано с настройками SSL. Вы можете отключить проверку, используя:

    Capybara.register_driver :poltergeist do |app|
      options = {
        phantomjs_options: ['--ssl-protocol=any', '--ignore-ssl-errors=yes'],
        inspector: false
      }
      Capybara::Poltergeist::Driver.new(app, options)
    end
    
    09.01.2016
    Новые материалы

    Прогресс в технологии Трансформеров часть 3
    Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

    Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
    Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

    Приключения в Javascript, часть 1
    Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..