Я ударил стену, пытаясь написать тест интеграции для Stripe checkout.js [https://checkout.stripe.com/checkout.js] для моего приложения Rails 3.2.
Выполнение проверок на полосах работает корректно для меня при проверке вручную (с использованием клавиш тестирования Stripe), но я не могу заставить Capybara обнаружить и fill_in
поле электронной почты в модуле checkout iframe.
Я использую полтергейст для безголового javascript, хотя также тестировал это с помощью capybara-webkit и даже селена с той же проблемой.
То, что я пытаюсь проверить, - это полный поток подписки на подписку, чтобы показать, что новый пользователь может создать учетную запись абонента после ввода своих платежных реквизитов в Stripe, но я не могу пройти мимо всплывающего окна Stripe.
Вот мой before .. do
:
describe "show Stripe checkout", :js => true do
before do
visit pricing_path
click_button 'plan-illuminated'
stripe_iframe = all('iframe[name=stripe_checkout_app]').last
Capybara.within_frame stripe_iframe do
fill_in "email", :with => "[email protected]"
fill_in "billing-name", :with => "Mr Name"
fill_in "billing-street", :with => "test Street"
fill_in "billing-zip", :with => 10000
fill_in "billing-city", :with => "Berlin"
click_button "Payment Info"
end
end
it { should have_selector('button', text: "Subscribe") }
end
Какие ошибки с:
Failure/Error: Capybara.within_frame stripe_iframe do
Capybara::Poltergeist::TimeoutError:
Timed out waiting for response to {"name":"push_frame","args":[null]}
Если я поменяю попытку выбрать правильный iframe (предлагаемый здесь: проблема с Capybara, заполняющая JS-модальный), вот так:
# stripe_iframe = all('iframe[name=stripe_checkout_app]').last
# Capybara.within_frame stripe_iframe do
Capybara.within_frame 'stripe_checkout_app' do
Я все равно получаю подобное:
Capybara::Poltergeist::TimeoutError:
Timed out waiting for response to {"name":"push_frame","args":["stripe_checkout_app"]}
Похоже, что в зависимости от того, какой я использую javascript для тестирования, rspec/capybara не может найти проверку iframe в Stripe. Когда я проверю с помощью Selenium, я вижу кнопку Choose this Plan
нажатой и всплывающее окно Checkout, но время истекает, ища поле электронной почты для заполнения.
Любые идеи?
Я уже пробовал:
- Различные способы выбора или поиска поля электронной почты.
- Обновление всех моих драгоценных камней.
- Использование StripeMock до этого (не так, чтобы оно было задействовано, верно?).
- Выполнение тех же тестов с собственным сайтом Stripe, которые дают те же ошибки:
Тестирование с помощью:
visit "https://stripe.com/docs/checkout"
click_button 'Pay with Card'
stripe_iframe = all('iframe[name=stripe_checkout_app]').last
Capybara.within_frame stripe_iframe do
fill_in 'Email', with: '[email protected]'
sleep 3
end
В зависимости от того, какой метод я использую для выбора iframe, я получаю те же ошибки. Используя только Capybara.within_frame 'stripe_checkout_app' do
:
Failure/Error: Capybara.within_frame stripe_iframe do
Capybara::Poltergeist::TimeoutError:
Timed out waiting for response to {"name":"push_frame","args":[null]}
или с использованием селена с stripe_iframe = all('iframe[name=stripe_checkout_app]').last
:
Failure/Error: Unable to find matching line from backtrace
SystemStackError:
stack level too deep
или даже просто:
Failure/Error: fill_in 'Email', with: '[email protected]'
Capybara::ElementNotFound:
cannot fill in, no text field, text area or password field with id, name, or label 'Email' found
... в зависимости от того, какой тест javascript я использую.
Приветствуется любая помощь или мудрость!