【发布时间】:2014-04-15 15:50:29
【问题描述】:
让我首先确认这不是重复的(因为那里发布的答案没有解决我的问题)。 This post 本质上是我的确切问题:Capybara 在 Stripe 模式中找不到表单字段来填写它们。
这是我的水豚规格:
describe 'checkout', type: :feature, js: true do
it 'checks out correctly' do
visit '/'
page.should have_content 'Amount: $20.00'
page.find('#button-two').click_button 'Pay with Card'
Capybara.within_frame 'stripe_checkout_app' do
fill_in 'Email', with: 'example@example.com'
fill_in 'Name', with: 'Nick Cox'
fill_in 'Street', with: '123 Anywhere St.'
fill_in 'ZIP', with: '98117'
fill_in 'City', with: 'Seattle'
click_button 'Payment Info'
fill_in 'Card number', with: '4242424242424242' #test card number
fill_in 'MM/YY', with: '02/22'
fill_in 'CVC', with: '222'
click_button 'Pay'
end
page.should have_content 'Thanks'
end
end
该规范中的文字是我最近的尝试。 Capybara 错误是Unable to find field "Email"。
我尝试过的
- 这是按照建议here 用占位符文本填充字段的最新尝试
- 通过名称属性查找电子邮件字段(例如,
fill_in 'email', with: 'example@example.com') -
describe中有和没有type: :feature和js: true哈希 - 有和没有
within_frame调用Capybara - 尝试通过 css 查找输入(例如,
page.find('.emailInput input').set('example@example.com') - 在表单输入周围添加
within块:within('.panel') do(Unable to find css ".panel"失败) - 在上一步之前添加
sleep 3,以防它过早地寻找该div(Unable to find css ".panel"失败) - 添加对
find(以及page.find)的调用并将表单操作作为块传递(有和没有嵌套在find块中的within块):
Capybara.within_frame 'stripe_checkout_app' do
page.find('.panel') do
fill_in 'Email', with: 'example@example.com'
...
end
end
我也用 poltergeist 试过这个。
令人抓狂的是,我已将 Capybara 驱动程序从 poltergeist 改回 selenium/Firefox,并且我可以实际看到驱动程序打开页面,单击按钮并调出模式。
关于如何让 Capybara 与此表单交互有什么想法吗?
编辑
我还尝试在其中粘贴binding.pry 并使用pry gem 进行调试。模态加载时页面的 HTML 是一些元素,然后是动态将 JS 插入 iframe 头部的脚本标记。在binding.pry 被击中的位置查看 DOM 的屏幕截图(在模式窗口以 Stripe 形式打开之后):
所以<div class="emailInput"> 显然在那里,但page.has_selector?('.emailInput') 在 pry 控制台中返回 false。
Here 是当我从 pry 绑定中打印 page.html 作为Capybara.within_frame 'stripe_checkout_app' do 之后的下一行时会发生什么的 GitHub 要点。 也就是说,这是从 Capybara 的角度来看的标记,它与 DOM 大不相同,如上图所示实际表单的 DOM 屏幕截图所示。 如您所见,Capybara 看到的标记中没有任何输入或任何可使用的东西。
更新
这是包含执行模式的 JS 的表单的标记。 (标记是haml)。
%form{ action: "/charge?amount=1400", method: 'post', class: 'payment', id: 'fourteen' }
%article
%label.amount
%span Amount: $14.00
.stripejs#button-one
%script{ src: 'https://checkout.stripe.com/checkout.js', class:'stripe-button', :'data-key' => settings.publishable_key, :'data-name' => 'Slow Coffee', :'data-description' => '2 8oz. bags (2/month)', :'data-shipping-address' => true }
【问题讨论】:
-
在这篇文章中,有一些调试水豚测试的技巧nofail.de/2013/10/debugging-rails-applications-in-development
-
您能告诉我您要填写的模型弹出表单的代码吗?
-
表单 HTML 由 Stripe 的 JS 动态生成,但可以查看表单right here 的完整标记截图。
-
假设您正在尝试填写 ...您是否尝试过 fill_in('email') [注意小写] ;您也可能需要指定 id="email"
-
nick,我有一个非常相似/相同的问题,但现在甚至无法让您的解决方案为我工作。你不会碰巧有任何其他建议吗?谢谢! stackoverflow.com/questions/24081305/…
标签: ruby capybara stripe-payments