While testing a checkout process in one of our applications we were trying to test the stripe payment.
Our application is based on Laravel. In our integrating testing we use Behat and Selenium2 for javascript.
Our form used the elements in Stripe, which inject an iframe into our website.
To test our application with Behat we had to jump in to the iframe and fill in the credit card details. Then we had to jump out of the iframe again and press the payment button.
Here is the example code filling the form using selenium2 in behat.
public function iEnterMyPaymentDetails()
{
$this->minkContext->fillField('cardholder-name', $this->helperContext->getFaker()->name);
$this->minkContext->fillField('cardholder-email', $this->helperContext->getFaker()->email);
$this->minkContext->fillField('cardholder-postcode', $this->helperContext->getFaker()->postcode);
$this->getSession()->wait(500);
// Switch to the payment iframe
$this->getSession()->switchToIFrame('__privateStripeFrame2');
$this->minkContext->fillField('cardnumber', '4242 4242 4242 4242');
$this->minkContext->fillField('exp-date', '12 / 30');
$this->minkContext->fillField('cvc', '123');
// switch back to main content
$this->getSession()->switchToIFrame();
$this->minkContext->pressButton('payment-button');
}