我正在使用capybara-webkit驱动程序进行支持JS的测试.但是,当我尝试填写条纹结帐iframe的表单字段时,我无法fill_in在两个驱动程序中使用capybara 帮助程序.Selenium驱动程序提供了有助于实现此任务的方法.
4.times {page.driver.browser.find_element(:id, 'card_number').send_keys('4242')}
page.driver.browser.find_element(:id, 'cc-exp').send_keys '5'
page.driver.browser.find_element(:id, 'cc-exp').send_keys '18'
page.driver.browser.find_element(:id, 'cc-csc').send_keys '123'
page.driver.browser.find_element(:id,'billing-zip').send_keys '600004'
Run Code Online (Sandbox Code Playgroud)
如果我使用fill_in帮助器,我将无法完全输入详细信息.例如,对于16位卡号,输入字段仅填充4位数字,在日期字段中我只能输入月份而不是年份.
我想知道webkit驱动程序中是否有帮助程序可以让我在Stripe结帐表单中填写表单.对此有所了解会很棒!提前致谢.
integration-testing webkit capybara capybara-webkit stripe-payments
我正在使用capybara,capybara-webkit,capybara-screenshot和黄瓜.(Ruby 1.9.3,Rails 3.1.3)并且Capybara.javascript_driver = :webkit还设置了env.rb
不幸的是,@javascript由于某些原因,运行黄瓜规格永远不会成功,错误截图只是捕获example.com.
我实际尝试打开的URL是使用我的某个模型的rails路由器结果生成的,例如 visit products_url
那么我怎么能避免它最终查询example.com?
任何意见都非常欢迎.
仅仅因为评论搞砸了 - 这就是我找到的解决方案:
Capybara.run_server = true
Capybara.server_port = 7787
Before '@javascript' do
Capybara.app_host = "http://127.0.0.1:#{Capybara.server_port}"
end
Run Code Online (Sandbox Code Playgroud) 我试图将一个hidden_field放在一个form_for中,在一个ActionView助手错误中崩溃.还有一些关于FixNum的东西,因为我没有挖掘源代码,因此逃脱了我.我的price_controller显示了这个:
@price = Price.new
@commodity = Commodity.find(params[:id])
Run Code Online (Sandbox Code Playgroud)
我想用这个hidden_field建立价格和商品之间的联系:
<%= form_for (@price), :url => prices_path do |f| %>
<% f.hidden_field :commodity_id, @commodity.id %>
.
.
<div class="actions">
<%= f.submit "Submit" %>
</div>
Run Code Online (Sandbox Code Playgroud)
看看form_for api,上面应该可行.阅读stackoveflow上的其他回复,我已将hidden_field放在表单中的自己的div中,添加了一个Hidden_field_tag,并将其放在提交行之前的actions div中.看看合并消息,我猜它不喜欢这条线,但对我来说似乎没问题.commodity_id字段是匹配字段,sam
我正在使用capybara-webkit来测试与第三方网站的集成(我需要javascript).
我想使用vcr来记录在集成测试期间发出的请求,但是capybara-webkit不会覆盖net http,因此vcr无法记录它们.我如何为vcr编写一个适配器,以便记录所需的内容?
在Rails应用程序我想测试一个引导模式与jQuery的TokenInput场使用水豚用在Rspec的capybara-webkit驱动程序.有问题的部分如下:
click_link 'Create Team Modal'
sleep 1
within('div#modal_popup') do
fill_in 'input#token-input-team_name', with: 'Fancy team name'
sleep 1
fill_in 'input#token-input-team_name', with: '\t'
sleep 1
click_button 'Create Team'
end
page.should have_content('Fancy team name')
Run Code Online (Sandbox Code Playgroud)
这只适用于所有这些sleep 1; 否则Capybara崩溃have_content,最终导致服务器错误,因为团队名称永远无法正确选择.但是,没有 TokenInput字段的其他Bootstrap模式sleep 1在加载之前不需要.
尽管如此,有没有办法摆脱睡眠并让这一切正常进行?Capybara 2取出wait_until(有充分的理由),因为它将在默认的等待时间内等待测试某些东西......但这似乎没有反映在我的上述测试中; 就好像Capybara在进入/退出这个模态时没有参与等待期.有人对此有经验吗?使用Rails 3.2.10,Rspec 2.12,Capybara 2,capybara-webkit 0.14.0,TokenInput 1.6.
ruby-on-rails capybara jquery-tokeninput twitter-bootstrap capybara-webkit
我使用以下html堆栈创建了自定义上传表单:
<form>
<label></label>
<input type="file">
</form>
Run Code Online (Sandbox Code Playgroud)
文件字段通过带有display: none属性的css隐藏.因此,用户在单击标签(自定义样式)时会调用文件附加对话框.
在我的功能测试中,我无法附加文件,因为隐藏了输入字段.我尝试了几种可能的解决方案,但它们都不起作用:
find(:xpath, '//input', visible: false).set(some_file_path)
Run Code Online (Sandbox Code Playgroud)
要么
within('form') do
attach_file(:input, some_file_path, visible: false)
end
Run Code Online (Sandbox Code Playgroud)
还有很多其他人.所有的时间我最终都无法点击未知位置错误的元素.删除与输入字段重叠的标签后,将其显示为可见并运行我的规范.所以这里的问题是:
display: none属性(因此无法找到)有没有办法让Capybara与Capybara-webkit驱动程序以一些理智的方式处理这种微妙的情况?
我bundle install在Rails 4应用程序中执行命令时遇到以下错误.
> ruby -v
ruby 2.1.8p440 (2015-12-16 revision 53160) [i386-mingw32]
> rails --version
Could not find gem 'capybara-webkit x86-mingw32' in any of the gem sources listed in your Gemfile or available on this machine.
Run `bundle install` to install missing gems.
Run Code Online (Sandbox Code Playgroud)
我的Gemfile
...
.....
group :development, :localtesting, :test do
gem 'sqlite3', '1.3.11'
gem 'byebug', '3.4.0'
#gem 'web-console', '2.0.0.beta3'
gem 'spring', '1.1.3'
gem 'i18n-tasks'
gem 'capybara'
gem 'selenium-webdriver'
gem 'rspec'
gem 'rspec-rails'
gem 'rspec_junit_formatter'
gem 'capybara-webkit'
end …Run Code Online (Sandbox Code Playgroud) 我遇到的问题是,当访问URL时,带有Capybara和capybara-webkit的webkit_server实例无法连接到本地Xvfb屏幕.这似乎发生在反复访问不同的URL和执行查找程序几分钟后.(我使用capybara用于香草Ruby中的屏幕抓取应用程序,而不是用于测试.)
我已经确认,当它挂起时,仍然可以访问该站点(例如,通过命令行上的curl或wget).我还尝试包装调用Timeout块中的访问和后续查找程序的Ruby代码,以便在等待60秒后访问新URL,但任何visit()尝试在第一次发生后都会失败.解决问题的唯一方法是同时杀死调用Capybara/capybara-webkit和webkit_server进程并重新启动的Ruby进程.
当我对webkit_server进程进行分析时,我会反复看到这样的输出:
clock_gettime(CLOCK_MONOTONIC, {5821, 680279627}) = 0
gettimeofday({1330890176, 712033}, {0, 33052112}) = 0
gettimeofday({1330890176, 712087}, {0, 140736435864256}) = 0
gettimeofday({1330890176, 712137}, {0, 33108640}) = 0
clock_gettime(CLOCK_MONOTONIC, {5821, 680486036}) = 0
clock_gettime(CLOCK_MONOTONIC, {5821, 680530091}) = 0
read(7, 0x1fac1b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
Run Code Online (Sandbox Code Playgroud)
如果我调用调用它的Ruby进程,它会挂在read()上:
Process 3331 attached - interrupt to quit
read(5,
^C <unfinished ...>
Process 3331 detached
Run Code Online (Sandbox Code Playgroud)
我知道Ruby代码挂在Capybara visit()方法上.
关于我可以采取哪些措施进行故障排除或纠正这一点的任何想法都表示赞赏.我假设问题与某些资源webkit_server需要访问URL有关,但我不确定接下来要尝试什么.
谢谢!
最新的Capybara-webkit抛出弃用警告:
WARNING: The next major version of capybara-webkit will require at least version 5.0 of Qt. You're using version 4.8.7.
Run Code Online (Sandbox Code Playgroud)
所以我:
gem uninstall capybara-webkit
brew uninstall qt
brew install qt5
gem install capybara-webkit
Run Code Online (Sandbox Code Playgroud)
这种贬值现在已经消失,但一切都崩溃了:
$ rspec -p -- spec/features
Randomized with seed 52457
...2015-07-30 16:56:21.731 webkit_server[8416:6381638] Error loading /Library/Internet Plug-Ins/QuickTime Plugin.plugin/Contents/MacOS/QuickTime Plugin: dlopen(/Library/Internet Plug-Ins/QuickTime Plugin.plugin/Contents/MacOS/QuickTime Plugin, 265): no suitable image found. Did find:
/Library/Internet Plug-Ins/QuickTime Plugin.plugin/Contents/MacOS/QuickTime Plugin: mach-o, but wrong architecture
plugin,NP_Initialize start
plugin,NP_Initialize end
plugin,NP_GetEntryPoints start
Private_Initialize
plugin,NP_GetEntryPoints end …Run Code Online (Sandbox Code Playgroud) 我在使用rspec,capybara,capybara-webkit和timecop看到一些集成规范中的错误.
Capybara::FrozenInTime:
time appears to be frozen, Capybara does not work with libraries which freeze time, consider using time travelling instead
Run Code Online (Sandbox Code Playgroud)
我知道冻结时间的唯一宝石是Timecop,但我没有在失败的测试用例中使用它.
由于错误只是偶尔发生,我甚至无法知道它在改变之后是否消失.