我有一个使用子域来切换数据库的应用程序(多租户).我正在尝试使用Capybara进行集成测试,它确实依赖于子域.
我的理解是,设置Capybara.default_host=某些内容会使我的所有请求都来自此主机.似乎并非如此.在这篇文章中,作者建议只使用主机访问显式网址,但如果我在整个地方导航,这会变得有点烦人.我想设置主机,然后能够按预期使用我的rails路径.不知道我做错了什么,但这是我尝试过的:
# spec_helper.rb
RSpec.configure do |config|
config.before(:each, :type => :request) do
Capybara.default_host = 'http://app.mydomain.com'
end
end
# in some_integration_spec.rb
before do
puts "Capybara.default_host: #{Capybara.default_host}"
puts "some_app_url: #{some_app_url}"
end
Run Code Online (Sandbox Code Playgroud)
这产生了输出:
Capybara.default_host: http://app.mydomain.com
some_app_url: http://www.example.com/some_path
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么? default_host似乎什么都不做.正如我所说,我不想说visit(Capybara.default_host + some_app_path),因为每次都有点烦人.为什么还存在default_host选项?
基本上,我要做的是点击一个按钮,当悬停在另一个元素(其父元素)时变为可见.
我试图trigger.('mouseover')在隐藏按钮的父级上使用,但这似乎不起作用.
这是规范中的代码片段:
# label[for ... ] -> the parent element
page.execute_script("$('label[for=\"department_#{department.id}\"]').trigger(\"mouseover\")")
# le hidden button
find(".actions").click
# some <li> on a list that drops down when clicking the hidden button
click_on("Edit department")
Run Code Online (Sandbox Code Playgroud)
错误......
Failure/Error: click_on("Edit department")
Selenium::WebDriver::Error::ElementNotVisibleError:
Element is not currently visible and so may not be interacted with
Run Code Online (Sandbox Code Playgroud)
我想知道如何.actions在页面上显示按钮,以便之后点击它.
任何帮助将非常感激.
我正在尝试使用Cucumber/Capybara/Selenium堆栈测试一个就地编辑器,但我的问题是通过单击div而不是链接或按钮来激活编辑器.我似乎无法弄清楚如何让Capybara这样做.有办法做到这一点吗?
似乎最常被接受的处理Selenium和测试的方法是避免使用事务夹具,然后在测试/场景之间使用像database_cleaner这样的东西.我最近遇到了以下文章,建议执行以下操作:
spec_helper.rb
class ActiveRecord::Base
mattr_accessor :shared_connection
@@shared_connection = nil
def self.connection
@@shared_connection || retrieve_connection
end
end
# Forces all threads to share the same connection. This works on
# Capybara because it starts the web server in a thread.
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
Run Code Online (Sandbox Code Playgroud)
对于性能而言,这似乎比替代品更好.有没有人有理由不这样做?
有人可以解释这两个平台之间的区别吗?是BDD的一部分,但为什么我应该使用一个或另一个,或两者兼而有之?谢谢你的回答
我有一个方案,当我使用真正的omniauth时工作得很好,但是当我用黄瓜/水豚的模拟auth运行它时失败了.
在回调中,当我这样做时sign_in @user,它成功创建用户并登录... current_user已设置.但是当我这样做时redirect_to request.env['omniauth.origin'] || '/',在接下来的行动中,current_user现在是零.
我已通过屏幕截图确认/暂停浏览器它不能使用模拟身份验证.firefox和chrome驱动程序中出现相同的错误.
知道为什么会发生这种情况吗?
/features/support/env.rb:
Cucumber::Rails::Database.javascript_strategy = :truncation
Run Code Online (Sandbox Code Playgroud)
场景:
@javascript
Scenario:
Given I am on the home page
When I press "Login"
And I should see "Login with Twitter" in the selector "#login-modal"
Given Omniauth returns a user with provider "twitter" and uid "1" and nickname "foo"
When I login with Twitter
Then I should be logged in as "foo"
Run Code Online (Sandbox Code Playgroud)
步骤定义:
Given(/^Omniauth returns a user with provider "(.*?)" …Run Code Online (Sandbox Code Playgroud) 我正在构建一个Rails 3应用程序,它为移动设备(使用jQuery Mobile)和常规桌面浏览器呈现不同的视图.我正在使用Cucumber/Capybara进行测试,并为移动设备和浏览器提供单独的测试套件.我可以使用此处的'headers hack'在请求的HTTP头中设置移动用户代理字符串...
在Rails 3中使用Cucumber/Capybara,如何设置自定义User-Agent字符串?
问题...
我的大多数移动Cucumber步骤都运行良好(例如,我将移动标头设置为一步,然后移动视图呈现).然而,在表单提交之后,测试然后呈现下一步的浏览器视图(而不是我想要的移动视图).我想这可能是因为Capybara在表单提交动作后丢弃了标题.
我尝试通过向控制器操作添加记录器来测试这一点,以便我可以查看user_agent标头,如下所示:
def show
# …
logger.info("Headers: #{request.user_agent}")
# …
end
Run Code Online (Sandbox Code Playgroud)
我使用了iPhone标头(买方是资源).在我的test.log中,我看到:
对于创建动作......
Started POST "/buyers" for 127.0.0.1 at 2011-04-19 16:49:18 -0700
Processing by BuyersController#create as HTML
#...
Headers: Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
#...
Redirected to http://www.example.com/buyers/1
Completed 302 Found in 7ms
Run Code Online (Sandbox Code Playgroud)
对于后续的show动作(注意'标题:'为空白)......
Started GET "/buyers/1" for 127.0.0.1 at 2011-04-19 16:49:18 -0700
Processing by BuyersController#show as HTML
#... …Run Code Online (Sandbox Code Playgroud) 我开始从黄瓜+ webrat迁移到黄瓜+水豚.现在"我应该看"的行为似乎有些不同.其中大部分都失败了,虽然我没有改变页面上的任何内容.我替换了应该找到的片段,其中包含每个页面上的一些内容,对于某些文本它可以使用,而对于其他文本则不然.我找不到页面内容中的任何模式,也没有找到任何模式.Webrat用于打印它找到的页面内容,以防它不包含所需的短语.反正有没有capybara显示它从试图找到文本的页面中得到了什么文本?
我需要使用Open :: URI从我的应用程序下载一个csv文件,为此我需要给它一个完全限定的URI.那么最好的方法是获取主机,更重要的是我的黄瓜脚本中的PORT?
注意我正在使用Capybara和Selenium
我有一个文件字段,它有opacity: 0一个假的按钮.它是一种常见的css技术,用于伪造一种在不同浏览器中一致显示的"上传按钮".
Capybara不允许我打电话attach_file给那个输入.错误是Selenium::WebDriver::Error::ElementNotVisibleError: Element is not currently visible and so may not be interacted with.
有谁知道强迫水豚与隐形元素互动的方法吗?
答案仍然没有答案,但我找到了解决方法.没有什么是智能的,只需用简单的脚本使元素可见即可
page.execute_script %Q{
$('#photos').css({opacity: 1, transform: 'none'});
}
Run Code Online (Sandbox Code Playgroud)
我发布它作为记录.