我的Rspec + Capybara集成测试工作正常,直到我开始尝试使用Capybara-Webkit与依赖Javascript的界面元素进行交互.
当我尝试使用Capybara-Webkit时,我会在save_and_open_line下面看到空白页面.为什么?
/spec/features/area_spec.rb:
require 'spec_helper'
describe "Area" do
...
describe "Admin" do
...
before(:each) do
Capybara.current_driver = :webkit
@virginia = User.create(
:username => "Virginia",
:password => "password",
:password_confirmation => "password",
:email => "example@example.com")
@admin = Role.create(:name => "admin")
@assignment = Assignment.create(user_id: @virginia.id, role_id: @admin.id)
visit login_path
fill_in 'user_session_username', :with => @virginia.username
fill_in 'user_session_password', :with => @virginia.password
click_on 'submit_user_session'
visit report_path(@report)
save_and_open_page
page.find('#nav_reports').trigger(:mouseover)
...
end
...
end
...
end
Run Code Online (Sandbox Code Playgroud)
/spec/spec_helper.rb:
require 'rubygems'
require 'spork'
require …Run Code Online (Sandbox Code Playgroud) 我正在使用带有webkit的Capybara进行测试,但出于某种原因,当测试失败时,它会显示错误,但不会显示代码中实际发生的错误.
Failures:
1) online shopping - sign up
Failure/Error: page.should have_content 'Payment added successfully'
expected there to be content "Payment added successfully" in "Internal Server Error undefined method `client_id' for #<InvoicePayment:0x007fbd5b834008> WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20) at 127.0.0.1:60324"
# ./spec/requests/online_shopping_spec.rb:140:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
当使用save_and_open_page它时,只显示错误,没有关于它发生位置的信息:
内部服务器错误
#NETrick/1.3.1的未定义方法`client_id'(Ruby/1.9.3/2012-04-20),版本127.0.0.1:60324
我期待看到的是错误发生的行号和功能:
app/controllers/invoices_controller.rb:30:在'show'中
我似乎无法在Google上找到与此相关的任何内容.我可能使用了错误的命名法.有谁知道如何解决这个问题?
我在Ubuntu(14.04 LTS)上使用capybara webkit,我在尝试使用它时遇到以下错误:
Capybara::Webkit::ConnectionError: /srv/www/app/shared/bundle/ruby/2.1.0/gems/capybara-webkit-1.3.1/bin/webkit_server failed to start.
from /srv/www/app/shared/bundle/ruby/2.1.0/gems/capybara-webkit-1.3.1/lib/capybara/webkit/connection.rb:75:in `parse_port'
from /srv/www/app/shared/bundle/ruby/2.1.0/gems/capybara-webkit-1.3.1/lib/capybara/webkit/connection.rb:81:in `discover_port'
from /srv/www/app/shared/bundle/ruby/2.1.0/gems/capybara-webkit-1.3.1/lib/capybara/webkit/connection.rb:62:in `start_server'
from /srv/www/app/shared/bundle/ruby/2.1.0/gems/capybara-webkit-1.3.1/lib/capybara/webkit/connection.rb:25:in `initialize'
from /srv/www/app/shared/bundle/ruby/2.1.0/gems/capybara-webkit-1.3.1/lib/capybara/webkit/driver.rb:17:in `new'
Run Code Online (Sandbox Code Playgroud)
我使用以下方法安装QT:
sudo apt-get install libqt4-dev libqtwebkit-dev libqt5webkit5-dev
Run Code Online (Sandbox Code Playgroud)
使用gem版本:capybara(2.4.4)和capybara-webkit(1.3.1)
相同的程序在mac上工作正常(使用自制软件安装qt)
谢谢
我正在我的页面上使用降价编辑器,我正在尝试定位,并使用capybara-webkit填写,但没有任何运气.
我的模板看起来像这样
<%= simple_form_for form, url: url, method: :put do |f| %>
<%= f.input :notes, as: :text %>
<%= f.button :submit, class: 'fluid' %>
<% end %>
<!-- https://github.com/lepture/editor -->
<link rel="stylesheet" href="//cdn.jsdelivr.net/editor/0.1.0/editor.css">
<script src="//cdn.jsdelivr.net/editor/0.1.0/editor.js"></script>
<script src="//cdn.jsdelivr.net/editor/0.1.0/marked.js"></script>
<script !src="">
(function () {
var editor = new Editor();
editor.render();
})()
</script>
Run Code Online (Sandbox Code Playgroud)
渲染的html(包括执行的编辑器javascript)看起来像这样(通过capybara-webkit调试工具)
<form novalidate="novalidate" class="simple_form simple_form ui form segment new_steps_update" id="new_steps_update" action="/presentations/1/who" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="?"><input type="hidden" name="_method" value="put">
<div class="field text optional steps_update_notes"><label class="text optional" for="steps_update_notes">Notes</label><textarea class="text …Run Code Online (Sandbox Code Playgroud) 我在安装 capybara-webkit gem 时遇到问题。这是我在 gemfile 中的测试组的一部分:
group :test do
gem 'capybara-webkit'
end
Run Code Online (Sandbox Code Playgroud)
当我在控制台上写“捆绑”时 - 它给了我
`"An error occurred while installing capybara-webkit (1.15.1), and Bundler cannot continue. Make sure that `gem install capybara-webkit -v '1.15.1' --source 'https://rubygems.org/'` succeeds before bundling."`
Run Code Online (Sandbox Code Playgroud)
所以我发现我需要通过自制软件安装qt。所以我去了 homebrew-core,写了 'brew update',而不是 'cd $( brew --prefix )/Homebrew/Library/Taps/homebrew/homebrew-core' ;'git 结帐 9ba3d6ef8891e5c15dbdc9333f857b13711d4e97 公式/qt@5.5.rb'; 和'brew install qt@5.5'。然后它给了我'错误:qt@5.5:未知版本:mountain_lion'。我发现问题可能出现在“Formula/qt@5.5.rb”中,它有字符串“depends_on :macos => :mountain_lion”。所以我评论了它,然后当我写 'brew install qt@5.5' 时 - 它给了我另一个错误:
"Error: Failed to download resource "qt@5.5_bottle_manifest""
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?
使用 Javascript 时,我无法使请求规范生效。如果我在没有 Javascript 的情况下运行它们,我的规格就会通过(页面被构建为可以使用或不使用 JS)。
具体来说,当我执行像Post.should have(1).record. Capybara 只是不从数据库中提取记录,并且在运行之间不会清理数据库。
我试过在禁用事务性装置的情况下使用 DatabaseCleaner - 我猜这是常用的方法。没有骰子。
我也尝试过(并且,理想情况下更喜欢)在没有 DatabaseCleaner 的情况下运行,使用事务性装置并强制 AR 在线程之间共享相同的连接(José Valim 描述的补丁)。再次,没有骰子。
此外,我还尝试在 Capybara-webkit 和 Selenium 之间切换 - 问题仍然存在。
我已经建立了一个示例应用程序,它只有一个基本的 Post 脚手架,它复制了这个问题:https : //github.com/cabgfx/js-specs 有一个带有事务装置和 AR 共享连接的 spec_helper.rb,以及一个 spec_helper_database_cleaner。 rb 用于其他场景。
我通常使用 Spork,但我在两个 spec_helper.rb 文件中都禁用了它,只是为了消除潜在的故障点(在两个应用程序中;“真实”应用程序和示例应用程序)。
我在 Macbook Air 上使用 Pow 进行本地开发,通过 RVM 运行 OS X 10.7.3 和 MRI 1.9.3。(我也在 1.9.2 上试过)。
希望我是有道理的 -非常感谢任何指导/帮助/指针!
I have added visually hidden jump links to my website, that appear when they are focused (similar to e.g. GitHub, just press Tab once on the home page).
我想用 Capybara 测试这种行为。我无法检查例如“可见性:真/假”,因为链接并未真正隐藏(否则屏幕阅读器将看不到它们),而只能通过绝对定位从视口移出。当它们被聚焦时,它们被放置在视口中的原始位置。
所以我想我必须检查 X 和 Y 坐标,但 Capybara 似乎没有提供获取它们的本地方法?这是真的?如果是这样,我将如何为例如元素“#jump_to_content”获取它们?通过执行一些 JavaScript?
更新
我在这里找到了一些灵感:https : //content.pivotal.io/blog/testing-accessibility-with-rspec-and-capybara
但这似乎不适用于我的配置:
link.native.location
NoMethodError: undefined method `location' for #<Capybara::Poltergeist::Node tag="a">
Run Code Online (Sandbox Code Playgroud) 我正在维护一套功能规范,其中包含许多在测试中运行的 sidekiq 作业。一切都很好,直到需要为所有功能规范启用 javascript,事情突然变得丑陋。我不确定我是否理解这样做的原因。
一个典型的问题是这样的:在规范开始时我调用了助手,最终启动了 Sidekiq 工作:
it 'does something fancy' do
Sidekiq::Testing.inline! do
page.attach_file('black_list_file', file)
click_on 'Import file'
end
expect(page).to have_content('Import started') # No problem here
expect(page).to have_link('imported_file.csv') # This fails
end
Run Code Online (Sandbox Code Playgroud)
我尝试sleep n在expect语句之间放置- 即使使用n = 10. 然后我尝试调试,并注意到一些奇怪的事情:ImportWorker.jobs返回仍在队列中的作业,如果我ImportWorker.drain从调试器中明确声明,规范将通过。
但!如果我放在ImportWorker.drain两expect行之间- 它仍然失败,即使我sleep在排空之前放置,等待请求实际调用perform_async工人。
当我切换到 selenium 驱动程序时,事情变得更加奇怪 - 一切顺利,测试通过。
现在,我有一些深入了解从水豚提出的要求,从规格不同的线程中进行处理,如解释在这里。所以很可能,当 worker 被调用时,它不知道inline!,而只是将作业放入 Redis 队列。我仍然不明白为什么 Selenium 能够管理这个问题。如果这是真的,我如何使用 webkit 驱动程序测试涉及 sidekiq 作业的功能。
更新。 …
capybara capybara-webkit sidekiq selenium-webdriver ruby-on-rails-4
我有一个链接:
link_to %q(<span class='glyphicon glyphicon-trash'/>).html_safe, feed_item, data: {confirm: 'Are you sure?',toggle: 'tooltip'}, method: :delete, title: 'Delete', id: 'delete_post'
Run Code Online (Sandbox Code Playgroud)
和以下功能规范代码
page.accept_confirm do
click_link 'delete_post'
end
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Capybara::Webkit::ClickFailed:
Failed to find position for element /html/body/div[@id='wrapper']/div[@id='page-content-wrapper']/div/div[@id='main']/div[@id='main_content']/div[4]/div/div/div[1]/h3/div/a[@id='delete_post']
Run Code Online (Sandbox Code Playgroud)
如果我用一些文本(例如"删除")用glyphicon替换span,则测试有效.这似乎与Github上未解决的问题有关,可能与CSS覆盖可点击的html元素有关.但是,我无法理解在这种情况下如何发生这种重叠或如何纠正它.
将图标用于"编辑"或"删除"等常见任务已成为一种常见做法,因此最好找到解决方案.
我该如何解决这个问题?
我正在尝试在Amazon Linux AMI版本2017.09上安装capybara-webkit gem.
sudo yum install -y epel-release
sudo yum install -y qt5-qtwebkit-devel
Run Code Online (Sandbox Code Playgroud)
第一个包安装正常,但qt5-qtwebkit-devel出现以下错误:
Error: Package: qt5-qtbase-gui-5.6.1-3.el6.x86_64 (epel)
Requires: libgdk-x11-2.0.so.0()(64bit)
Error: Package: qt5-qtbase-gui-5.6.1-3.el6.x86_64 (epel)
Requires: libgdk_pixbuf-2.0.so.0()(64bit)
Error: Package: qt5-qtbase-gui-5.6.1-3.el6.x86_64 (epel)
Requires: libatk-1.0.so.0()(64bit)
Error: Package: qt5-qtbase-gui-5.6.1-3.el6.x86_64 (epel)
Requires: libgtk-x11-2.0.so.0()(64bit)
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
Run Code Online (Sandbox Code Playgroud)
我无法解决libgdk_pixbuf-2.0.so.0Amazon Linux中的依赖关系.我尝试安装,libX11-devel但没有解决问题.
当然gem install capybara-webkit -v '1.10.1'失败了因为没有安装qt5.
我发现了一个 …
capybara-webkit ×10
capybara ×5
rspec ×5
qt5 ×2
amazon-ec2 ×1
amazon-linux ×1
editor ×1
javascript ×1
macos ×1
qt ×1
qtwebkit ×1
sidekiq ×1
testing ×1