Ask A Question

Notifications

You’re not receiving notifications from this thread.

Fill in Stripe Elements JS for SCA / 3D Secure 2 and Capybara Discussion

Chris Oliver asked in General

Hello Chris,

I have followed your course on Stripe and i'm stuck one complete_stripe_sca step. The problem is the test does not go beyond that. It keeps on waiting.

  fill_stripe_elements card: 4000002760003184
  fill_in 'name_on_card', with: user.full_name
  click_button 'Subscribe'
        complete_stripe_sca
        expect(page).to have_current_path(orders_path)

Thats it. It nevers comes to the last line. When on without headless chrome, it stucks after clicking the dialogue box of SCA and just stays there on the same page.

Do you have any idea what is wrong ? Let me know if you need more details.

Thanks

Reply

I figured this out. It was chrome driver on which it was not working. I changed to firefox and it worked perfectly fine.

Reply

Hi all,
the same thing as Ahmad happened to me, and switching to firefox did not fix the issue.

I don't know why but after some digging I found that the tests were never going back to the top level once inside the second within_frame call:

find_frame('body > div > iframe') do
      sleep 1
      find_frame('#challengeFrame') do
        click_on "Complete authentication"
        # test hang here
      end
    end

To fix it I instead used :

stripe_frame = find('body > div > iframe')
switch_to_frame(stripe_frame) # enter the first frame
auth_frame = find('#challengeFrame')
sleep 2
switch_to_frame(auth_frame) # enter the second frame
sleep 2
click_on "Fail authentication"
switch_to_frame(:top) # go back to the top level

That is manually switching between frames and going back to the top level.

I post that here in case it happens to somebody else.

PS: My SCA confirmation/failure take place inside a Capybara.using_session if that's of any help.

Reply

I had to go one level deeper:

def complete_stripe_sca
  find_frame('body > div > iframe') do
    find_frame('#challengeFrame') do
      find_frame("iframe[name='acsFrame']") do 
        click_on "Complete authentication"
      end
    end
  end
end
Reply
Join the discussion
Create an account Log in

Want to stay up-to-date with Ruby on Rails?

Join 82,329+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.